form-dynamic-ajax 7.0.3 → 7.0.4

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-dynamic-ajax.mjs","sources":["../../../projects/form-dynamic-angular/src/lib/form-dynamic-angular.component.ts","../../../projects/form-dynamic-angular/src/lib/form-dynamic-angular.component.html","../../../projects/form-dynamic-angular/src/lib/form-dynamic-angular.module.ts","../../../projects/form-dynamic-angular/src/public-api.ts","../../../projects/form-dynamic-angular/src/form-dynamic-ajax.ts"],"sourcesContent":["import { FormBuilder, FormGroup, UntypedFormGroup } from '@angular/forms';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\r\nexport interface ITreeSelectOptions {\r\n key: string,\r\n label: string,\r\n icon: string,\r\n children?: ITreeSelectOptions[]\r\n}\r\nexport interface IOptions {\r\n description: string,\r\n code: number | string\r\n}\r\nexport interface ICols {\r\n field: string,\r\n header: string\r\n}\r\n\r\nexport type TTypes =\r\n \"autocomplete\" |\r\n \"button\" |\r\n \"check-box\" |\r\n \"currency\" |\r\n \"check-box-multi\" |\r\n \"date\" |\r\n \"switch\" |\r\n \"list\" |\r\n \"likert\" |\r\n \"mask\" |\r\n \"multi\" |\r\n \"number\" |\r\n \"password\" |\r\n \"photo\" |\r\n \"radio-button\" |\r\n \"select\" |\r\n \"select-button\" |\r\n \"table\" |\r\n \"text\" |\r\n \"text-area\" |\r\n \"tree-select\" |\r\n \"upload-files\" |\r\n \"editable-table\"\r\nexport interface IForm {\r\n id: number | string,\r\n label?: string,\r\n type: TTypes,\r\n col?: string,\r\n disabled?: boolean | null,\r\n formControl?: string,\r\n required?: boolean,\r\n placeholder?: string,\r\n\r\n numberOfMonthsDate?: number;\r\n selectionMode?: \"multiple\" | \"range\" | \"single\"\r\n minDate?: Date,\r\n maxDate?: Date,\r\n viewDate?: 'month' | 'date',\r\n dateFormat?: string\r\n timeOnly?: boolean\r\n showTime?: boolean,\r\n\r\n maxlength?: number,\r\n rowsTextArea?: number,\r\n\r\n mask?: string,\r\n unmask?: boolean,\r\n\r\n search?: boolean,\r\n options?: IOptions[]\r\n treeSelectOptions?: ITreeSelectOptions[],\r\n\r\n buttonClass?: string,\r\n iconButton?: string,\r\n\r\n formControlOther?: string,\r\n hideLabelTop?: boolean,\r\n\r\n scrollHeight?: string,\r\n colsTable?: ICols[],\r\n rowsTable?: any[],\r\n rowsFooter?: any[],\r\n buttonsTable?: IButtonsTable[],\r\n\r\n acceptFiles?: string,\r\n msgAcceptFiles?: string,\r\n viewNameFile?: boolean,\r\n multileFile?: boolean,\r\n\r\n onChange?: Function,\r\n onCLick?: Function,\r\n onCLear?: Function,\r\n onFocusDate?: Function,\r\n}\r\nexport interface IButtonsStandard {\r\n type: 'clean' | 'filter' | 'save' | 'cancel',\r\n onCLick: Function,\r\n styleClass?: string\r\n}\r\nexport interface IButtonsOptional {\r\n label: string,\r\n onCLick: Function,\r\n icon: string,\r\n styleClass: string,\r\n view?: Function;\r\n}\r\n\r\nexport interface IButtonsTable {\r\n styleClass: string,\r\n label: string,\r\n icon: string,\r\n onCLick: Function\r\n}\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'form-dynamic-angular',\r\n templateUrl: 'form-dynamic-angular.component.html',\r\n styleUrls: ['form-dynamic-angular.component.css']\r\n})\r\n\r\nexport class FormDynamicAngularComponent implements OnInit {\r\n @Input() title!: string;\r\n @Input() subTitle!: string;\r\n @Input() validateForm: boolean = false;\r\n\r\n @Input() form: IForm[] = []\r\n @Input() control: FormGroup;\r\n\r\n @Input() buttonsStandard: IButtonsStandard[]\r\n @Input() buttonsOptional: IButtonsOptional[]\r\n\r\n @Input() files: any[] = [];\r\n\r\n filesView: any[] = [];\r\n filteredAutoComplete: any[] = [];\r\n\r\n constructor(\r\n public translate: TranslateService,\r\n private formBuilder: FormBuilder\r\n ) {\r\n this.control = this.formBuilder.group({});\r\n }\r\n\r\n ngOnInit(): void {\r\n this.files.map(f => {\r\n this.filesView.push({ ...f, type: f.contentType })\r\n })\r\n\r\n if (window.location.protocol === \"https\") {\r\n navigator.mediaDevices.getUserMedia({ video: true })\r\n .then(function (mediaStream) {\r\n const video: HTMLVideoElement | null = document.querySelector('#video');\r\n if (video) {\r\n video.srcObject = mediaStream;\r\n video.play();\r\n }\r\n })\r\n .catch(function (err) { })\r\n }\r\n }\r\n\r\n numberOfMonthsDate(numberOfMonthsDate: number) {\r\n return numberOfMonthsDate ?? 1\r\n }\r\n\r\n selectionMode(selectionMode: string) {\r\n return selectionMode ?? \"single\"\r\n }\r\n\r\n async capturePhoto(fileName: string) {\r\n const canvas: HTMLCanvasElement | null = document.querySelector(\"#canvas\");\r\n const icon: HTMLButtonElement | null = document.querySelector(\"#icon-remove\");\r\n const video: HTMLVideoElement | null = document.querySelector('#video');\r\n const button: HTMLButtonElement | null = document.querySelector('#button');\r\n\r\n\r\n if (canvas && video) {\r\n canvas.height = video.videoHeight;\r\n canvas.width = video.videoWidth;\r\n const context = canvas.getContext('2d');\r\n if (context && icon && button) {\r\n context.drawImage(video, 0, 0)\r\n video.style.display = \"none\"\r\n button.disabled = true\r\n canvas.style.display = \"block\"\r\n icon.style.visibility = \"visible\"\r\n\r\n let aux = {\r\n name: \"photo user\",\r\n contentType: \"image/png\",\r\n content: canvas.toDataURL(\"image/png\")\r\n };\r\n\r\n this.control.get(fileName)?.setValue(aux);\r\n }\r\n }\r\n }\r\n\r\n removePhoto() {\r\n const canvas: HTMLCanvasElement | null = document.querySelector(\"#canvas\");\r\n const icon: HTMLButtonElement | null = document.querySelector(\"#icon-remove\");\r\n const video: HTMLVideoElement | null = document.querySelector('#video');\r\n const button: HTMLButtonElement | null = document.querySelector('#button');\r\n\r\n if (canvas && video) {\r\n const context = canvas.getContext('2d');\r\n if (context && icon && button) {\r\n video.style.display = \"block\"\r\n button.disabled = false\r\n canvas.style.display = \"none\"\r\n icon.style.visibility = \"collapse\"\r\n }\r\n }\r\n }\r\n\r\n getUrl(file: File) {\r\n return window.URL.createObjectURL(file)\r\n }\r\n\r\n async onSelectFile(fileName: string, event: any, multiple: boolean) {\r\n const file = event.target.files\r\n // if (!multiple) {\r\n // this.filesView = [];\r\n // }\r\n this.filesView.push(...file);\r\n\r\n const newFIles = file\r\n let arr = [];\r\n for (const item of newFIles) {\r\n let aux = {\r\n name: item.name,\r\n contentType: item?.type,\r\n content: await this.toBase64(item)\r\n };\r\n arr.push(aux);\r\n }\r\n this.control.get(fileName)?.setValue(arr);\r\n }\r\n\r\n onRemove(event: File, fileName: string) {\r\n this.filesView.splice(this.filesView.indexOf(event), 1);\r\n var input = document.getElementById('fileInput') as HTMLInputElement\r\n if (input) {\r\n input.value = ''\r\n }\r\n }\r\n\r\n filterAutoComplete(event: { query: any; }, suggestionsAutoComplete: any) {\r\n let filtered: any[] = [];\r\n let query = event.query;\r\n\r\n if (suggestionsAutoComplete) {\r\n for (let i = 0; i < suggestionsAutoComplete.length; i++) {\r\n let dados = suggestionsAutoComplete[i];\r\n if (dados.description.toLowerCase().normalize('NFD').replace(/\\p{M}/ug, '').indexOf(query.toLowerCase().normalize('NFD').replace(/\\p{M}/ug, '')) != -1) {\r\n filtered.push(dados);\r\n }\r\n }\r\n\r\n this.filteredAutoComplete = filtered;\r\n }\r\n }\r\n\r\n toBase64 = async (file: File) => {\r\n return new Promise((resolve, _) => {\r\n const reader = new FileReader();\r\n reader.onloadend = () => resolve(reader.result);\r\n reader.readAsDataURL(file);\r\n });\r\n }\r\n\r\n onChange(change?: Function) {\r\n if (change) {\r\n change()\r\n }\r\n }\r\n\r\n clickCLear(clear?: Function) {\r\n if (clear) {\r\n clear()\r\n }\r\n }\r\n\r\n onBlur(blur?: Function) {\r\n if (blur) {\r\n blur()\r\n }\r\n }\r\n}\r\n","<div>\r\n <div *ngIf=\"title\" class=\"div-title\">\r\n <span translate={{title}}></span>\r\n <div *ngIf=\"subTitle\" class=\"flex subtitle\">\r\n <span translate={{subTitle}}></span>\r\n </div>\r\n <p-divider></p-divider>\r\n </div>\r\n <form *ngIf=\"control\" [formGroup]=\"control\">\r\n <div class=\"grid\">\r\n <div *ngFor=\"let item of form\" class=\"{{item.col}} col-12\">\r\n <label *ngIf=\"item.label && !item.hideLabelTop\">{{item.label}}</label>\r\n <label *ngIf=\"item.required && item.label\" class=\"danger-text ml-2\">*</label>\r\n\r\n <div class=\"mt-2\">\r\n <!-- text -->\r\n <input id={{item.id}} [ngClass]=\"{\r\n 'ng-invalid ng-dirty':\r\n validateForm && control.controls[item.formControl].errors\r\n }\" pInputText placeholder={{item.placeholder}} *ngIf=\"item.type == 'text' || item.type == 'number' \"\r\n type={{item.type}} formControlName={{item.formControl}} class=\"w-full\" />\r\n\r\n <!-- select -->\r\n <p-dropdown id={{item.id}} [ngClass]=\"{\r\n 'ng-invalid ng-dirty':\r\n validateForm && control.controls[item.formControl].errors\r\n }\" [filter]=item.search emptyFilterMessage=\"Nenhum dado encontrado\"\r\n emptyMessage=\"Nenhum dado encontrado\" placeholder={{item.placeholder}} styleClass=\"w-full p-0\"\r\n (onChange)=\"onChange(item.onChange)\" *ngIf=\"item.type === 'select'\" [showClear]=\"true\"\r\n [options]=\"item.options\" formControlName={{item.formControl}} optionLabel=\"description\"\r\n (onClear)=\"clickCLear(item.onCLear)\"></p-dropdown>\r\n\r\n <!-- currency -->\r\n <p-inputNumber id={{item.id}} *ngIf=\"item.type === 'currency'\" [ngClass]=\"{\r\n 'ng-invalid ng-dirty':\r\n validateForm && control.controls[item.formControl].errors\r\n }\" formControlName={{item.formControl}} placeholder={{item.placeholder}} inputStyleClass=\"w-full\"\r\n styleClass=\"w-full\" (onKeyDown)=\"onChange(item.onChange)\" mode=\"currency\" [min]=\"0\"\r\n currency=\"BRL\">\r\n </p-inputNumber>\r\n\r\n <!-- mask -->\r\n <p-inputMask id={{item.id}} *ngIf=\"item.type === 'mask'\" [ngClass]=\"{\r\n 'ng-invalid ng-dirty':\r\n validateForm && control.controls[item.formControl].errors\r\n }\" formControlName={{item.formControl}} placeholder={{item.placeholder}} styleClass=\"w-full\"\r\n (onComplete)=\"onChange(item.onChange)\" mask={{item.mask}} unmask={{item.unmask}}\r\n (onClear)=\"clickCLear(item.onCLear)\" showClear=\"true\"></p-inputMask>\r\n\r\n <!-- treeSelect -->\r\n <p-treeSelect id={{item.id}} [ngClass]=\"{\r\n 'ng-invalid ng-dirty':\r\n validateForm && control.controls[item.formControl].errors\r\n }\" placeholder={{item.placeholder}} (onNodeSelect)=\"onChange(item.onChange)\"\r\n *ngIf=\"item.type === 'tree-select'\" containerStyleClass=\"w-full p-0\"\r\n formControlName={{item.formControl}} [options]=\"item.treeSelectOptions\" [filter]=\"true\"\r\n [filterInputAutoFocus]=\"true\" emptyMessage=\"Nenhum dado encontrado\" [showClear]=\"true\"\r\n (onClear)=\"clickCLear(item.onCLear)\"></p-treeSelect>\r\n\r\n <!-- autoComplete -->\r\n <p-autoComplete inputId={{item.id}} [ngClass]=\"{\r\n 'ng-invalid ng-dirty':\r\n validateForm && control.controls[item.formControl].errors\r\n }\" placeholder={{item.placeholder}} styleClass=\"w-full p-0\" [inputStyle]=\"{'width':'100%'}\"\r\n *ngIf=\"item.type === 'autocomplete'\" (onSelect)=\" onChange(item.onChange)\"\r\n formControlName={{item.formControl}} [suggestions]=\"filteredAutoComplete\"\r\n (completeMethod)=\"filterAutoComplete($event, item.options)\" [forceSelection]=\"false\"\r\n [showEmptyMessage]=\"true\" emptyMessage=\"Nenhum dado encontrado\" dataKey=\"code\"\r\n field=\"description\" showClear=true (onClear)=\"clickCLear(item.onCLear)\"></p-autoComplete>\r\n\r\n <!-- date -->\r\n <p-calendar id={{item.id}} view=\"{{item.viewDate}}\" *ngIf=\"item.type === 'date'\" [ngClass]=\"{\r\n 'ng-invalid ng-dirty':\r\n validateForm && control.controls[item.formControl].errors\r\n }\" formControlName={{item.formControl}} styleClass=\"w-full\"\r\n [numberOfMonths]=numberOfMonthsDate(item.numberOfMonthsDate)\r\n [selectionMode]=selectionMode(item.selectionMode) (onFocus)=\"onChange(item.onFocusDate)\"\r\n [maxDate]=\"item.maxDate\" [minDate]=\"item.minDate\" dateFormat=\"{{item.dateFormat}}\"\r\n (onSelect)=\"onChange(item.onChange)\" [iconDisplay]=\"'input'\" placeholder={{item.placeholder}}\r\n [showIcon]=\"true\" [showTime]=\"item.showTime\" [timeOnly]=\"item.timeOnly\"></p-calendar>\r\n\r\n <!-- textarea -->\r\n <div *ngIf=\"item.type === 'text-area'\" class=\"text-right\">\r\n <textarea id={{item.id}} [ngClass]=\"{\r\n 'ng-invalid ng-dirty':\r\n validateForm && control.controls[item.formControl].errors\r\n }\" placeholder={{item.placeholder}} class=\"w-full\" maxlength=\"{{item.maxlength}}\"\r\n counterTemplate=\"{1} of 50, {0} remaining\" counter=\"display\"\r\n (attr.change)=\"onChange(item.onChange)\" pInputTextarea formControlName={{item.formControl}}\r\n rows={{item.rowsTextArea}}></textarea>\r\n <small *ngIf=\"item.maxlength\" id=\"username-help\">\r\n {{control.controls[item.formControl].value.length}}/{{item.maxlength}}\r\n </small>\r\n </div>\r\n\r\n <!-- checkbox -->\r\n <div *ngIf=\"item.type == 'check-box'\">\r\n <p-checkbox id={{item.id}} [ngClass]=\"{\r\n 'ng-invalid ng-dirty':\r\n validateForm && control.controls[item.formControl].errors\r\n }\" (onChange)=\"onChange(item.onChange)\" binary=\"true\" formControlName={{item.formControl}}\r\n value={{item.formControl}} label={{item.label}}></p-checkbox>\r\n </div>\r\n\r\n <!-- checkbox multiple -->\r\n <div id={{item.id}} *ngIf=\"item.type === 'check-box-multi'\" class=\"flex gap-3\">\r\n <div formArrayName=\"{{item.formControl}}\" *ngFor=\"let list of item.options; let i = index\"\r\n class=\"flex align-items-center gap-2\">\r\n <div [formGroupName]=\"i\">\r\n <p-checkbox id={{item.id}} [ngClass]=\"{\r\n 'ng-invalid ng-dirty':\r\n validateForm && control.controls[item.formControl].errors\r\n }\" (onChange)=\"onChange(item.onChange)\" binary=\"true\" formControlName=\"{{list.code}}\"\r\n label={{list.description}}></p-checkbox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- button -->\r\n <p-button id={{item.id}} *ngIf=\"item.type == 'button'\" styleClass='{{item.buttonClass}} w-full mt-3'\r\n (click)=\"item.onCLick()\" [disabled]=item.disabled icon={{item.iconButton}}\r\n label={{item.label}}></p-button>\r\n\r\n <!-- can -->\r\n <div id={{item.id}} class=\"area\" *ngIf=\"item.type == 'can'\">\r\n <video autoplay=\"true\" id=\"webCamera\">\r\n </video>\r\n\r\n <input type=\"text\" id=\"base_img\" name=\"base_img\">\r\n <button type=\"button\" onclick=\"takeSnapShot()\">Tirar foto e salvar</button>\r\n\r\n <img id=\"imagemConvertida\">\r\n <p id=\"caminhoImagem\" class=\"caminho-imagem\"><a href=\"\" target=\"_blank\" rel=\"noopener\"></a></p>\r\n <script src=\"script.js\"></script>\r\n </div>\r\n\r\n <!-- upload files -->\r\n <div id={{item.id}} *ngIf=\"item.type === 'upload-files' && !item.disabled \" class=\"drag-image\"\r\n [style.border]=\"validateForm && control.controls[item.formControl].errors ? ' 1px dashed #f18282' : ' 1px dashed #d1d5db'\">\r\n <i *ngIf=\"filesView.length === 0\" class=\"pi pi-cloud-upload\"></i>\r\n <p *ngIf=\"filesView.length === 0\">Clique ou arraste e solte um arquivo para anexar</p>\r\n <span *ngIf=\"filesView.length === 0\">{{item.msgAcceptFiles}}</span>\r\n <input id=\"fileInput\" type=\"file\" [multiple]=item.multileFile [accept]=\"item.acceptFiles\"\r\n (change)=\"onSelectFile(item.formControl, $event, item.multileFile)\" />\r\n <div *ngFor=\"let f of filesView\">\r\n <div *ngIf=\"f.type && f.type.includes('image')\">\r\n <label class=\"preview-img\">\r\n <img *ngIf=\"!f.content\" src='{{getUrl(f)}}'>\r\n <img *ngIf=\"f.content\" src='{{f.content}}'>\r\n <span *ngIf=\"item.viewNameFile\">{{ f.name }}</span>\r\n <input type=\"file\" [multiple]=item.multileFile [accept]=\"item.acceptFiles\"\r\n (change)=\"onSelectFile(item.formControl, $event,item.multileFile)\" />\r\n <label> <i class=\"pi pi-times remove-file absolute\"\r\n (click)=\"onRemove(item.formControl, f)\"></i></label>\r\n </label>\r\n </div>\r\n <div *ngIf=\"f.type && !f.type.includes('image')\">\r\n <label class=\"preview-img h-0 max-w-0 mh-75 m-0\">\r\n <label class=\"mr-3\">{{ f.name }}</label>\r\n <input type=\"file\" [multiple]=item.multileFile [accept]=\"item.acceptFiles\"\r\n (change)=\"onSelectFile(item.formControl, $event,item.multileFile)\" />\r\n <label> <i class=\"pi pi-times remove-file absolute\"\r\n (click)=\"onRemove(f)\"></i></label>\r\n\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- upload files disabled -->\r\n <!-- <p-fileUpload mode=\"basic\" formControlName=\"{{item.formControl}}\" chooseLabel=\"Choose\"\r\n chooseIcon=\"pi pi-upload\" accept=\"image/*\" maxFileSize=\"1000000\" /> -->\r\n\r\n <div id={{item.id}} *ngIf=\"item.type === 'upload-files' && item.disabled \">\r\n <p-button (click)=\"op.toggle($event)\" icon=\"pi pi-paperclip\"\r\n label=\"Arquivos anexados\"></p-button>\r\n\r\n <p-overlayPanel #op [style]=\"{'width': '450px'}\" [showCloseIcon]=\"true\">\r\n <ng-template pTemplate=\"content\">\r\n <p-table *ngIf=\"files.length > 0\" [value]=\"files\" selectionMode=\"single\"\r\n [(selection)]=\"selectedProduct\" (onRowSelect)=\"onRowSelect($event, op)\"\r\n responsiveLayout=\"scroll\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th pSortableColumn=\"name\">Nome<p-sortIcon field=\"name\"></p-sortIcon></th>\r\n <th></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-file>\r\n <tr>\r\n <td *ngIf=\"item.viewNameFile\">{{file.name}}</td>\r\n <td> <p-button *ngIf=\"item.onCLick\" icon=\"pi pi-download\"\r\n (click)='item.onCLick(file)'></p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <div *ngIf=\"files.length === 0\" class=\"p-10\">\r\n <label>Nenhum arquivo anexado</label>\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n </div>\r\n\r\n <!-- list -->\r\n <ul id={{item.id}} *ngIf=\"item.type === 'list' && item.options\">\r\n <li *ngFor=\"let list of item.options\">{{list.description}}</li>\r\n </ul>\r\n\r\n <!-- multi -->\r\n <p-multiSelect id={{item.id}} [ngClass]=\"{\r\n 'ng-invalid ng-dirty':\r\n validateForm && control.controls[item.formControl].errors\r\n }\" placeholder={{item.placeholder}} *ngIf=\"item.type === 'multi'\" [options]=\"item.options\"\r\n formControlName={{item.formControl}} styleClass=\"p-0 w-full\" optionLabel=\"description\"\r\n (onChange)=\"onChange(item.onChange)\" maxSelectedLabels=\"100\"></p-multiSelect>\r\n\r\n <!-- radioButton -->\r\n <div id={{item.id}} *ngIf=\"item.type === 'radio-button'\" class=\"flex gap-3\">\r\n <div *ngFor=\"let listRadioButton of item.options\" class=\"flex align-items-center gap-2\">\r\n <p-radioButton [ngClass]=\"{\r\n 'ng-invalid ng-dirty':\r\n validateForm && control.controls[item.formControl].errors\r\n }\" [value]=\"listRadioButton.code\" formControlName={{item.formControl}}\r\n (onClick)=\"onChange(item.onChange)\"></p-radioButton>\r\n <label>{{listRadioButton.description}}</label>\r\n </div>\r\n @if(control.controls[item.formControl].value == 'other'){\r\n <input pInputText type=\"text\" formControlName={{item.formControlOther}} />\r\n }\r\n </div>\r\n\r\n <!-- selectButton -->\r\n <div class=\"d-flex\" *ngIf=\"item.type === 'select-button'\">\r\n <p-selectButton id={{item.id}} (onChange)=\"onChange(item.onChange)\" [options]=\"item.options\"\r\n formControlName={{item.formControl}} optionValue=\"code\">\r\n <ng-template let-item>\r\n <span>{{item.description}}</span>\r\n </ng-template>\r\n </p-selectButton>\r\n <!-- <input type=\"text\" pInputText [attr.disabled]=\"item.disabled\"\r\n formControlName={{item.formControlSecondary}}> -->\r\n </div>\r\n\r\n <!-- table -->\r\n <p-table id={{item.id}} *ngIf=\"item.type === 'table'\" [scrollable]=\"true\"\r\n scrollHeight={{item.scrollHeight}} [columns]=item.colsTable\r\n styleClass=\"p-datatable-striped p-datatable-sm\" [value]=item.rowsTable>\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\">\r\n <span *ngIf=\"col.filed !== 'action'\">{{ col.header }}</span>\r\n <span *ngIf=\"col.filed === 'action'\">Ação</span>\r\n </th>\r\n\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\">\r\n <tr>\r\n <td *ngFor=\"let col of columns\">\r\n <div *ngIf=\"col.field !== 'button'\">\r\n {{ rowData[col.field] }}\r\n </div>\r\n <div *ngIf=\"col.field === 'action'\">\r\n <p-button *ngFor=\"let action of item.buttonsTable\"\r\n styleClass={{action.styleClass}} label={{action.label}}\r\n (click)=\"action.onCLick(rowData)\" icon={{action.icon}}></p-button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"footer\" let-columns>\r\n <tr *ngFor=\"let footer of item.rowsFooter\">\r\n <td colspan=12><span class=\"font-normal\">{{footer.text}}:</span> {{footer.value}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n <!-- inputSwitch -->\r\n <div class=\"d-flex\" *ngIf=\"item.type === 'switch'\">\r\n <p-inputSwitch id={{item.id}} formControlName={{item.formControl}} class=\"mr-10\"\r\n (onChange)=\"onChange(item.onChange)\"></p-inputSwitch>\r\n <p translate={{item.label}}></p>\r\n </div>\r\n\r\n <!-- password -->\r\n <p-password id={{item.id}} [ngClass]=\"{\r\n 'ng-invalid ng-dirty':\r\n validateForm && control.controls[item.formControl].errors\r\n }\" placeholder={{item.placeholder}} *ngIf=\"item.type === 'password'\" [feedback]=\"false\"\r\n formControlName={{item.formControl}} (onChange)=\"onChange(item.onChange)\" styleClass=\"w-full\"\r\n [toggleMask]=\"true\"></p-password>\r\n\r\n <!-- photo -->\r\n <div id={{item.id}} class=\"camera\" *ngIf=\"item.type === 'photo'\">\r\n <video id=\"video\" class=\"foto\" autoplay>Vídeo não disponível.</video>\r\n <canvas id=\"canvas\" class=\"foto\" style=\"display: none;\"></canvas>\r\n <button pButton icon=\"pi pi-times\" class=\"remove-file\" id=\"icon-remove\" [rounded]=\"true\"\r\n style=\"visibility: collapse;\" (click)=\"removePhoto()\"></button>\r\n <button pButton icon=\"pi pi-camera\" [rounded]=\"true\" (click)=\"capturePhoto(item.formControl)\"\r\n id=\"button\"></button>\r\n </div>\r\n\r\n <!-- likert -->\r\n <p-table id={{item.id}} *ngIf=\"item.type === 'likert'\" [scrollable]=\"true\"\r\n scrollHeight={{item.scrollHeight}} [columns]=item.colsTable\r\n styleClass=\"p-datatable-striped p-datatable-sm\" [value]=item.rowsTable>\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th style=\"width: 4rem\"></th>\r\n <th *ngFor=\"let col of columns\">\r\n <span>{{ col.header }}</span>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row let-rowIndex=\"rowIndex\" let-columns=\"columns\"\r\n formArrayName=\"{{item.formControl}}\">\r\n <tr>\r\n <td>\r\n {{row}}\r\n </td>\r\n @for (control of columns; track item; let index = $index) {\r\n <td [formGroupName]=\"rowIndex\">\r\n <p-radioButton value=\"{{columns[index].field}}+{{row}}\"\r\n formControlName=\"question{{rowIndex}}\" />\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n <!-- editable table -->\r\n <p-table\r\n id=\"{{ item.id }}\"\r\n *ngIf=\"item.type === 'editable-table'\"\r\n [scrollable]=\"true\"\r\n scrollHeight=\"{{ item.scrollHeight }}\"\r\n [columns]=\"item.colsTable\"\r\n styleClass=\"p-datatable-striped p-datatable-sm\"\r\n [value]=\"item.rowsTable\"\r\n editMode=\"cell\">\r\n\r\n <!-- Cabeçalho da tabela -->\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th></th>\r\n <th *ngFor=\"let col of columns\">\r\n <span>{{ col.header }}</span>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- Corpo da tabela -->\r\n <ng-template pTemplate=\"body\" let-row let-rowIndex=\"rowIndex\" let-columns=\"columns\"\r\n formArrayName=\"{{ item.formControl }}\" let-editing=\"editing\">\r\n <tr>\r\n <td>{{ row }}</td>\r\n @for (control of columns; track item; let index = $index) {\r\n <td [formGroupName]=\"rowIndex\" [pEditableColumn]=\"row\" pEditableColumnField=\"row\">\r\n <p-cellEditor>\r\n <ng-template pTemplate=\"input\">\r\n <input class=\"w-full\" pInputText type=\"text\" formControlName=\"_{{control.field}}question{{ rowIndex }}\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"output\">\r\n <input class=\"w-full\" pInputText type=\"text\" formControlName=\"_{{control.field}}question{{ rowIndex }}\" />\r\n </ng-template>\r\n </p-cellEditor>\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n\r\n <!-- validação de item -->\r\n <div>\r\n <small class=\"danger-text\"\r\n *ngIf=\"validateForm && control.controls[item.formControl] && control.controls[item.formControl].errors?.['required']\">\r\n Campo obrigatório\r\n </small>\r\n <small class=\"danger-text\"\r\n *ngIf=\"validateForm && control.controls[item.formControl] && control.controls[item.formControl].errors?.['email']\">\r\n Email inválido\r\n </small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <p-divider\r\n *ngIf=\"(buttonsStandard && buttonsStandard.length > 0) || (buttonsOptional && buttonsOptional.length > 0)\"></p-divider>\r\n\r\n <div class=\"buttons-form\">\r\n <div *ngFor=\"let button of buttonsStandard\">\r\n <p-button *ngIf=\"button.type === 'clean'\" styleClass=\"p-button-warning {{button.styleClass}}\"\r\n label=\"Limpar\" (click)=\"button.onCLick()\" icon=\"pi pi-times\"></p-button>\r\n <p-button *ngIf=\"button.type === 'filter'\" styleClass=\"{{button.styleClass}}\" label=\"Filtrar\"\r\n (click)=\"button.onCLick()\" icon=\"pi pi-search\"></p-button>\r\n <p-button *ngIf=\"button.type === 'save'\" styleClass=\"p-button-success {{button.styleClass}}\"\r\n label=\"Salvar\" (click)=\"button.onCLick()\" icon=\"pi pi-save\"></p-button>\r\n <p-button *ngIf=\"button.type === 'cancel'\" styleClass=\"p-button-danger {{button.styleClass}}\"\r\n label=\"Cancelar\" (click)=\"button.onCLick()\" icon=\"pi pi-times\"></p-button>\r\n </div>\r\n <div *ngFor=\"let button of buttonsOptional\">\r\n <p-button styleClass={{button.styleClass}} label={{button.label}} (click)=\" button.onCLick()\"\r\n icon={{button.icon}}></p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { BrowserModule } from '@angular/platform-browser'\r\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\r\nimport { HttpClient, HttpClientModule } from '@angular/common/http';\r\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DividerModule } from 'primeng/divider';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { TreeSelectModule } from 'primeng/treeselect';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\nimport { AutoCompleteModule } from 'primeng/autocomplete';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { FormDynamicAngularComponent } from './form-dynamic-angular.component';\r\nimport { MessageService } from 'primeng/api';\r\nimport { InputTextareaModule } from 'primeng/inputtextarea';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { InputSwitchModule } from 'primeng/inputswitch';\r\nimport { SelectButtonModule } from 'primeng/selectbutton';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { FileUploadModule } from 'primeng/fileupload';\r\nimport { TableModule } from 'primeng/table';\r\nimport { PasswordModule } from 'primeng/password';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\nimport { InputMaskModule } from 'primeng/inputmask';\r\nimport { OverlayPanelModule } from 'primeng/overlaypanel';\r\n\r\nexport function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {\r\n return new TranslateHttpLoader(http);\r\n}\r\n@NgModule({\r\n declarations: [\r\n FormDynamicAngularComponent\r\n ],\r\n imports: [\r\n InputMaskModule,\r\n InputNumberModule,\r\n PasswordModule,\r\n ButtonModule,\r\n TableModule,\r\n FileUploadModule,\r\n MultiSelectModule,\r\n CommonModule,\r\n SelectButtonModule,\r\n InputSwitchModule,\r\n CheckboxModule,\r\n InputTextareaModule,\r\n InputTextModule,\r\n DividerModule,\r\n CalendarModule,\r\n DropdownModule,\r\n TreeSelectModule,\r\n RadioButtonModule,\r\n AutoCompleteModule,\r\n ReactiveFormsModule,\r\n HttpClientModule,\r\n OverlayPanelModule,\r\n TranslateModule.forRoot({\r\n loader: {\r\n provide: TranslateLoader,\r\n useFactory: HttpLoaderFactory,\r\n deps: [HttpClient]\r\n },\r\n })\r\n ],\r\n exports: [\r\n FormDynamicAngularComponent\r\n ]\r\n})\r\n\r\nexport class FormDynamicAngularModule { }\r\n","/*\r\n * Public API Surface of form-dynamic-angular\r\n */\r\n\r\nexport * from './lib/form-dynamic-angular.component';\r\nexport * from './lib/form-dynamic-angular.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="form-dynamic-ajax" />
5
+ export * from './public-api';
@@ -0,0 +1,111 @@
1
+ import { FormBuilder, FormGroup } from '@angular/forms';
2
+ import { TranslateService } from '@ngx-translate/core';
3
+ import { OnInit } from '@angular/core';
4
+ import * as i0 from "@angular/core";
5
+ export interface ITreeSelectOptions {
6
+ key: string;
7
+ label: string;
8
+ icon: string;
9
+ children?: ITreeSelectOptions[];
10
+ }
11
+ export interface IOptions {
12
+ description: string;
13
+ code: number | string;
14
+ }
15
+ export interface ICols {
16
+ field: string;
17
+ header: string;
18
+ }
19
+ export type TTypes = "autocomplete" | "button" | "check-box" | "currency" | "check-box-multi" | "date" | "switch" | "list" | "likert" | "mask" | "multi" | "number" | "password" | "photo" | "radio-button" | "select" | "select-button" | "table" | "text" | "text-area" | "tree-select" | "upload-files" | "editable-table";
20
+ export interface IForm {
21
+ id: number | string;
22
+ label?: string;
23
+ type: TTypes;
24
+ col?: string;
25
+ disabled?: boolean | null;
26
+ formControl?: string;
27
+ required?: boolean;
28
+ placeholder?: string;
29
+ numberOfMonthsDate?: number;
30
+ selectionMode?: "multiple" | "range" | "single";
31
+ minDate?: Date;
32
+ maxDate?: Date;
33
+ viewDate?: 'month' | 'date';
34
+ dateFormat?: string;
35
+ timeOnly?: boolean;
36
+ showTime?: boolean;
37
+ maxlength?: number;
38
+ rowsTextArea?: number;
39
+ mask?: string;
40
+ unmask?: boolean;
41
+ search?: boolean;
42
+ options?: IOptions[];
43
+ treeSelectOptions?: ITreeSelectOptions[];
44
+ buttonClass?: string;
45
+ iconButton?: string;
46
+ formControlOther?: string;
47
+ hideLabelTop?: boolean;
48
+ scrollHeight?: string;
49
+ colsTable?: ICols[];
50
+ rowsTable?: any[];
51
+ rowsFooter?: any[];
52
+ buttonsTable?: IButtonsTable[];
53
+ acceptFiles?: string;
54
+ msgAcceptFiles?: string;
55
+ viewNameFile?: boolean;
56
+ multileFile?: boolean;
57
+ onChange?: Function;
58
+ onCLick?: Function;
59
+ onCLear?: Function;
60
+ onFocusDate?: Function;
61
+ }
62
+ export interface IButtonsStandard {
63
+ type: 'clean' | 'filter' | 'save' | 'cancel';
64
+ onCLick: Function;
65
+ styleClass?: string;
66
+ }
67
+ export interface IButtonsOptional {
68
+ label: string;
69
+ onCLick: Function;
70
+ icon: string;
71
+ styleClass: string;
72
+ view?: Function;
73
+ }
74
+ export interface IButtonsTable {
75
+ styleClass: string;
76
+ label: string;
77
+ icon: string;
78
+ onCLick: Function;
79
+ }
80
+ export declare class FormDynamicAngularComponent implements OnInit {
81
+ translate: TranslateService;
82
+ private formBuilder;
83
+ title: string;
84
+ subTitle: string;
85
+ validateForm: boolean;
86
+ form: IForm[];
87
+ control: FormGroup;
88
+ buttonsStandard: IButtonsStandard[];
89
+ buttonsOptional: IButtonsOptional[];
90
+ files: any[];
91
+ filesView: any[];
92
+ filteredAutoComplete: any[];
93
+ constructor(translate: TranslateService, formBuilder: FormBuilder);
94
+ ngOnInit(): void;
95
+ numberOfMonthsDate(numberOfMonthsDate: number): number;
96
+ selectionMode(selectionMode: string): string;
97
+ capturePhoto(fileName: string): Promise<void>;
98
+ removePhoto(): void;
99
+ getUrl(file: File): string;
100
+ onSelectFile(fileName: string, event: any, multiple: boolean): Promise<void>;
101
+ onRemove(event: File, fileName: string): void;
102
+ filterAutoComplete(event: {
103
+ query: any;
104
+ }, suggestionsAutoComplete: any): void;
105
+ toBase64: (file: File) => Promise<unknown>;
106
+ onChange(change?: Function): void;
107
+ clickCLear(clear?: Function): void;
108
+ onBlur(blur?: Function): void;
109
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormDynamicAngularComponent, never>;
110
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormDynamicAngularComponent, "form-dynamic-angular", never, { "title": { "alias": "title"; "required": false; }; "subTitle": { "alias": "subTitle"; "required": false; }; "validateForm": { "alias": "validateForm"; "required": false; }; "form": { "alias": "form"; "required": false; }; "control": { "alias": "control"; "required": false; }; "buttonsStandard": { "alias": "buttonsStandard"; "required": false; }; "buttonsOptional": { "alias": "buttonsOptional"; "required": false; }; "files": { "alias": "files"; "required": false; }; }, {}, never, never, false, never>;
111
+ }
@@ -0,0 +1,33 @@
1
+ import { TranslateHttpLoader } from '@ngx-translate/http-loader';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./form-dynamic-angular.component";
5
+ import * as i2 from "primeng/inputmask";
6
+ import * as i3 from "primeng/inputnumber";
7
+ import * as i4 from "primeng/password";
8
+ import * as i5 from "primeng/button";
9
+ import * as i6 from "primeng/table";
10
+ import * as i7 from "primeng/fileupload";
11
+ import * as i8 from "primeng/multiselect";
12
+ import * as i9 from "@angular/common";
13
+ import * as i10 from "primeng/selectbutton";
14
+ import * as i11 from "primeng/inputswitch";
15
+ import * as i12 from "primeng/checkbox";
16
+ import * as i13 from "primeng/inputtextarea";
17
+ import * as i14 from "primeng/inputtext";
18
+ import * as i15 from "primeng/divider";
19
+ import * as i16 from "primeng/calendar";
20
+ import * as i17 from "primeng/dropdown";
21
+ import * as i18 from "primeng/treeselect";
22
+ import * as i19 from "primeng/radiobutton";
23
+ import * as i20 from "primeng/autocomplete";
24
+ import * as i21 from "@angular/forms";
25
+ import * as i22 from "@angular/common/http";
26
+ import * as i23 from "primeng/overlaypanel";
27
+ import * as i24 from "@ngx-translate/core";
28
+ export declare function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader;
29
+ export declare class FormDynamicAngularModule {
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormDynamicAngularModule, never>;
31
+ static ɵmod: i0.ɵɵNgModuleDeclaration<FormDynamicAngularModule, [typeof i1.FormDynamicAngularComponent], [typeof i2.InputMaskModule, typeof i3.InputNumberModule, typeof i4.PasswordModule, typeof i5.ButtonModule, typeof i6.TableModule, typeof i7.FileUploadModule, typeof i8.MultiSelectModule, typeof i9.CommonModule, typeof i10.SelectButtonModule, typeof i11.InputSwitchModule, typeof i12.CheckboxModule, typeof i13.InputTextareaModule, typeof i14.InputTextModule, typeof i15.DividerModule, typeof i16.CalendarModule, typeof i17.DropdownModule, typeof i18.TreeSelectModule, typeof i19.RadioButtonModule, typeof i20.AutoCompleteModule, typeof i21.ReactiveFormsModule, typeof i22.HttpClientModule, typeof i23.OverlayPanelModule, typeof i24.TranslateModule], [typeof i1.FormDynamicAngularComponent]>;
32
+ static ɵinj: i0.ɵɵInjectorDeclaration<FormDynamicAngularModule>;
33
+ }
package/package.json CHANGED
@@ -1,14 +1,27 @@
1
- {
2
- "name": "form-dynamic-ajax",
3
- "version": "7.0.3",
4
- "peerDependencies": {
5
- "@angular/common": "^17.0.0",
6
- "@angular/core": "^17.0.0",
7
- "moment": "^2.29.4"
8
- },
9
- "dependencies": {
10
- "moment": "^2.29.4",
11
- "tslib": "^2.3.0"
12
- },
13
- "sideEffects": false
14
- }
1
+ {
2
+ "name": "form-dynamic-ajax",
3
+ "version": "7.0.4",
4
+ "peerDependencies": {
5
+ "@angular/common": "^17.0.0",
6
+ "@angular/core": "^17.0.0",
7
+ "moment": "^2.29.4"
8
+ },
9
+ "dependencies": {
10
+ "moment": "^2.29.4",
11
+ "tslib": "^2.3.0"
12
+ },
13
+ "sideEffects": false,
14
+ "module": "fesm2022/form-dynamic-ajax.mjs",
15
+ "typings": "index.d.ts",
16
+ "exports": {
17
+ "./package.json": {
18
+ "default": "./package.json"
19
+ },
20
+ ".": {
21
+ "types": "./index.d.ts",
22
+ "esm2022": "./esm2022/form-dynamic-ajax.mjs",
23
+ "esm": "./esm2022/form-dynamic-ajax.mjs",
24
+ "default": "./fesm2022/form-dynamic-ajax.mjs"
25
+ }
26
+ }
27
+ }
@@ -1,6 +1,2 @@
1
- /*
2
- * Public API Surface of form-dynamic-angular
3
- */
4
-
5
- export * from './lib/form-dynamic-angular.component';
6
- export * from './lib/form-dynamic-angular.module';
1
+ export * from './lib/form-dynamic-angular.component';
2
+ export * from './lib/form-dynamic-angular.module';
package/ng-package.json DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3
- "dest": "../../dist/form-dynamic-ajax",
4
- "lib": {
5
- "entryFile": "src/public-api.ts"
6
- },
7
- "allowedNonPeerDependencies": [
8
- "moment"
9
- ]
10
- }
@@ -1,132 +0,0 @@
1
- .div-title span {
2
- font-size: 20px;
3
- font-weight: 500;
4
- }
5
-
6
- .buttons-form {
7
- display: flex;
8
- gap: 10px;
9
- justify-content: flex-end;
10
- }
11
-
12
- .danger-text {
13
- color: #f18282;
14
- }
15
-
16
- .drag-image {
17
- height: auto;
18
- width: 100%;
19
- border-radius: 10px;
20
- font-weight: 400;
21
- display: flex;
22
- align-items: center;
23
- flex-direction: column;
24
- padding-bottom: 20px;
25
- top: 20px;
26
- max-height: 250px;
27
- color: #000;
28
- padding: 20px;
29
- text-align: center;
30
- overflow: auto;
31
- }
32
-
33
- .drag-image h6 {
34
- font-size: 20px;
35
- }
36
-
37
- .drag-image .file-name {
38
- font-size: 14px;
39
- }
40
-
41
- .drag-image i {
42
- font-size: 3rem;
43
- }
44
-
45
- .subtitle span {
46
- font-size: 14px;
47
- margin-right: 5px;
48
- }
49
-
50
- .subtitle {
51
- align-items: baseline;
52
- }
53
-
54
- .mh-75 {
55
- min-height: 75px !important
56
- }
57
-
58
- input[type="file"] {
59
- position: absolute;
60
- width: 100%;
61
- height: 100%;
62
- top: 0;
63
- left: 0;
64
- right: 0;
65
- bottom: 0;
66
- opacity: 0;
67
- cursor: pointer;
68
- }
69
-
70
- .preview-img {
71
- align-items: center;
72
- border-radius: 5px;
73
- display: flex;
74
- height: 140px;
75
- justify-content: center;
76
- margin: 10px;
77
- max-width: 180px;
78
- min-height: 140px;
79
- min-width: 180px;
80
- padding: 0px 20px;
81
- position: relative;
82
- }
83
-
84
- .preview-img span {
85
- position: absolute;
86
- overflow-wrap: break-word;
87
- }
88
-
89
- .remove-file {
90
- display: flex;
91
- justify-content: center;
92
- align-items: center;
93
- height: 22px;
94
- width: 22px;
95
- top: 5px;
96
- right: 5px;
97
- border-radius: 50%;
98
- background: #bbb;
99
- color: #333;
100
- cursor: pointer;
101
- font-size: .8rem !important;
102
- }
103
-
104
- .preview-img img {
105
- max-width: 100%;
106
- opacity: .8;
107
- }
108
-
109
- .camera {
110
- display: flex;
111
- flex-direction: column;
112
- align-items: center;
113
- position: relative;
114
-
115
- }
116
-
117
- .foto {
118
- max-width: 186px;
119
- min-height: 140px;
120
- min-width: 180px;
121
- border: 1px dashed #000;
122
- border-radius: 5px;
123
- margin-bottom: 1em;
124
- }
125
-
126
- .preview-photo {
127
- position: relative;
128
- }
129
-
130
- .h-0 {
131
- height: 0;
132
- }