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.
- package/esm2022/form-dynamic-ajax.mjs +5 -0
- package/esm2022/lib/form-dynamic-angular.component.mjs +183 -0
- package/esm2022/lib/form-dynamic-angular.module.mjs +128 -0
- package/esm2022/public-api.mjs +6 -0
- package/fesm2022/form-dynamic-ajax.mjs +318 -0
- package/fesm2022/form-dynamic-ajax.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/form-dynamic-angular.component.d.ts +111 -0
- package/lib/form-dynamic-angular.module.d.ts +33 -0
- package/package.json +27 -14
- package/{src/public-api.ts → public-api.d.ts} +2 -6
- package/ng-package.json +0 -10
- package/src/lib/form-dynamic-angular.component.css +0 -132
- package/src/lib/form-dynamic-angular.component.html +0 -412
- package/src/lib/form-dynamic-angular.component.spec.ts +0 -23
- package/src/lib/form-dynamic-angular.component.ts +0 -288
- package/src/lib/form-dynamic-angular.module.ts +0 -73
- package/tsconfig.lib.json +0 -14
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
@@ -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,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.
|
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
|
-
*
|
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,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
|
-
}
|