@updevs/components 1.0.0-alpha.53 → 1.0.0-alpha.55

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.
Files changed (28) hide show
  1. package/esm2022/form/components/dynamic-field/dynamic-field.component.mjs +26 -16
  2. package/esm2022/form/form.component.mjs +61 -3
  3. package/esm2022/form/models/attachment-rule.model.mjs +2 -0
  4. package/esm2022/form/models/button-field.model.mjs +2 -0
  5. package/esm2022/form/models/button-group-field.model.mjs +2 -0
  6. package/esm2022/form/models/dynamic-field.model.mjs +1 -1
  7. package/esm2022/form/models/enums/attachment-type.enum.mjs +15 -0
  8. package/esm2022/form/models/enums/dynamic-field.type.mjs +3 -1
  9. package/esm2022/form/models/enums/public-api.mjs +2 -1
  10. package/esm2022/form/models/public-api.mjs +2 -1
  11. package/esm2022/form-controls/select/components/single/select.component.mjs +1 -2
  12. package/esm2022/form-controls/select/models/abstractions/base-select.component.mjs +18 -7
  13. package/fesm2022/updevs-components-form-controls-select.mjs +17 -7
  14. package/fesm2022/updevs-components-form-controls-select.mjs.map +1 -1
  15. package/fesm2022/updevs-components-form.mjs +102 -19
  16. package/fesm2022/updevs-components-form.mjs.map +1 -1
  17. package/form/components/dynamic-field/dynamic-field.component.d.ts +6 -2
  18. package/form/form.component.d.ts +4 -0
  19. package/form/models/attachment-rule.model.d.ts +35 -0
  20. package/form/models/button-field.model.d.ts +5 -0
  21. package/form/models/button-group-field.model.d.ts +5 -0
  22. package/form/models/dynamic-field.model.d.ts +16 -0
  23. package/form/models/enums/attachment-type.enum.d.ts +13 -0
  24. package/form/models/enums/dynamic-field.type.d.ts +3 -1
  25. package/form/models/enums/public-api.d.ts +1 -0
  26. package/form/models/public-api.d.ts +1 -0
  27. package/form-controls/select/models/abstractions/base-select.component.d.ts +23 -17
  28. package/package.json +25 -25
@@ -1 +1 @@
1
- {"version":3,"file":"updevs-components-form.mjs","sources":["../../../../libs/components/form/src/models/enums/dynamic-field.type.ts","../../../../libs/components/form/src/tools/errors-helper.ts","../../../../libs/components/form/src/components/dynamic-field/dynamic-field.component.ts","../../../../libs/components/form/src/components/dynamic-field/dynamic-field.component.html","../../../../libs/components/form/src/form.component.ts","../../../../libs/components/form/src/form.component.html","../../../../libs/components/form/src/upd-form.module.ts","../../../../libs/components/form/src/updevs-components-form.ts"],"sourcesContent":["export enum DynamicFieldType {\n Input = 1,\n Select = 2,\n SelectMultiple = 3,\n Label = 4,\n Checkbox = 5,\n CheckboxGroup = 6,\n Radio = 7,\n RadioGroup = 8,\n TextArea = 9,\n FileUpload = 10,\n MaskedInput = 11\n}\n","import { Injectable, inject } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { TextService } from '@updevs/sdk';\nimport { DictionaryType, OptionalType } from '@updevs/sdk/types';\nimport { HashMap } from '@jsverse/transloco';\n\nimport { ValidatorConfig } from '../models/validator-config';\n\n@Injectable()\nexport class ErrorsHelper {\n private errors: DictionaryType<ValidatorConfig> = {\n 'required': { text: 'UpDevs.Form.ErrorMessages.Required' },\n 'requiredTrue': { text: 'UpDevs.Form.ErrorMessages.RequiredTrue' },\n 'generic': { text: 'UpDevs.Form.ErrorMessages.Generic' },\n 'email': { text: 'UpDevs.Form.ErrorMessages.Email' },\n 'max': { text: 'UpDevs.Form.ErrorMessages.Max', defaultErrorParamToShow: 'max' },\n 'min': { text: 'UpDevs.Form.ErrorMessages.Min', defaultErrorParamToShow: 'min' },\n 'maxlength': { text: 'UpDevs.Form.ErrorMessages.MaxLength', defaultErrorParamToShow: 'requiredLength' },\n 'minlength': { text: 'UpDevs.Form.ErrorMessages.MinLength', defaultErrorParamToShow: 'requiredLength' }\n };\n private readonly textService = inject(TextService);\n\n getMessages(control: AbstractControl, customConfig?: DictionaryType<ValidatorConfig>): string[] {\n if (!control.errors) {\n return [];\n }\n\n const errorMessages: string[] = [];\n const genericText = this.textService.getText({ text: this.errors['generic']!.text, isTranslated: false });\n const combinedErrorMessagesList: DictionaryType<ValidatorConfig> = Object.assign({}, this.errors, customConfig || {});\n const controlErrorKeys = Object.keys(control.errors);\n\n controlErrorKeys.forEach(key => {\n const customError = !!control.errors ? control.errors[key] : undefined;\n\n if (!!customError?.errorText) {\n errorMessages.push(this.textService.getText(customError.errorText));\n } else if (key in combinedErrorMessagesList) {\n const config = combinedErrorMessagesList[key]!;\n let params: OptionalType<HashMap>;\n\n if (config.showLength) {\n params = { value: control.value?.length || 0 };\n }\n\n if (!!config.defaultErrorParamToShow) {\n params = { value: control.errors![key][config.defaultErrorParamToShow] };\n }\n\n errorMessages.push(this.textService.getText({ text: config.text, isTranslated: false }, params));\n }\n });\n\n if (controlErrorKeys.length > 0 && errorMessages.length < 1) {\n errorMessages.push(genericText);\n }\n\n return errorMessages;\n }\n}\n","import { Component, OnInit, HostBinding, inject, InputSignal, input, Output, EventEmitter } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { TextModel, TextService } from '@updevs/sdk';\nimport { OptionalType } from '@updevs/sdk/types';\nimport { BaseComponent } from '@updevs/sdk/layout';\nimport { ColumnSizeHelper, HorizontalVerticalType, ValidationStatusType } from '@updevs/components';\nimport { Defaults as SelectDefaults } from '@updevs/components/form-controls/select';\nimport { FileUploadChangedEvent } from '@updevs/components/form-controls/file-upload';\n\nimport { FileUploadFieldModel } from '../../models/file-upload-field.model';\nimport { InputFieldModel } from '../../models/input-field.model';\nimport { MaskedInputFieldModel } from '../../models/masked-input-field.model';\nimport { ErrorsHelper } from '../../tools/errors-helper';\nimport { DynamicFieldType } from '../../models/enums/dynamic-field.type';\nimport { DynamicFieldModel } from '../../models/dynamic-field.model';\nimport { CheckboxFieldModel } from '../../models/checkbox-field.model';\nimport { RadioFieldModel } from '../../models/radio-field.model';\nimport { SelectFieldModel } from '../../models/select-field.model';\nimport { SingleSelectFieldModel } from '../../models/single-select-field.model';\nimport { CheckboxGroupFieldModel } from '../../models/checkbox-group-field.model';\nimport { RadioGroupFieldModel } from '../../models/radio-group-field.model';\nimport { TextareaFieldModel } from '../../models/textarea-field.model';\n\n@Component({\n selector: 'upd-dynamic-field',\n templateUrl: './dynamic-field.component.html',\n styleUrl: './dynamic-field.component.scss'\n})\nexport class DynamicFieldComponent extends BaseComponent implements OnInit {\n @HostBinding('class') wrapperClasses = '';\n\n @Output() readonly submitForm = new EventEmitter<void>();\n\n DynamicFieldType = DynamicFieldType;\n SelectDefaults = SelectDefaults;\n\n formGroup: InputSignal<FormGroup> = input.required();\n field: InputSignal<DynamicFieldModel> = input.required();\n layout: InputSignal<HorizontalVerticalType> = input.required();\n validationStatus?: ValidationStatusType;\n validationStatusDescriptions: TextModel[] = [];\n get formControl(): FormControl {\n return this.formGroup().controls[this.field().name] as FormControl;\n }\n get inputField(): InputFieldModel {\n return this.field() as InputFieldModel;\n }\n get checkboxField(): CheckboxFieldModel {\n return this.field() as CheckboxFieldModel;\n }\n get checkboxGroupField(): CheckboxGroupFieldModel {\n return this.field() as CheckboxGroupFieldModel;\n }\n get radioField(): CheckboxFieldModel {\n return this.field() as RadioFieldModel;\n }\n get radioGroupField(): RadioGroupFieldModel {\n return this.field() as RadioGroupFieldModel;\n }\n get selectField(): SelectFieldModel {\n return this.field() as SelectFieldModel;\n }\n get singleSelectField(): SingleSelectFieldModel {\n return this.field() as SingleSelectFieldModel;\n }\n get textareaField(): TextareaFieldModel {\n return this.field() as TextareaFieldModel;\n }\n get fileUploadField(): FileUploadFieldModel {\n return this.field() as FileUploadFieldModel;\n }\n get maskedField(): MaskedInputFieldModel {\n return this.field() as MaskedInputFieldModel;\n }\n get checkboxGroupOptionsKeys(): string[] {\n return Object.keys(this.checkboxGroupField.options);\n }\n get radioGroupOptionsKeys(): string[] {\n return Object.keys(this.radioGroupField.options);\n }\n get fileNameControl(): OptionalType<FormControl> {\n return !!this.fileUploadField.fileNameFormProperty\n ? this.formGroup().controls[this.fileUploadField.fileNameFormProperty] as FormControl\n : undefined;\n }\n\n readonly textService = inject(TextService);\n\n private readonly errorsHelper = inject(ErrorsHelper);\n\n ngOnInit(): void {\n const statusSub = this.formControl.statusChanges.subscribe(status => {\n if (status === 'INVALID') {\n this.validationStatusDescriptions = this.errorsHelper.getMessages(this.formControl)\n .map(t => ({ text: t, isTranslated: true }));\n this.validationStatus = 'invalid';\n } else {\n this.validationStatusDescriptions = [];\n this.validationStatus = this.field().showValidStatus ? 'valid' : undefined;\n }\n });\n\n this.setupWrapperClasses();\n this.addSubscriptions(statusSub);\n }\n\n onBlur(): void {\n if (this.field().shouldValidateOnBlur) {\n this.formControl.updateValueAndValidity();\n }\n }\n\n setControlValue(value: any): void {\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n }\n\n getText(textModel?: TextModel): string {\n return this.textService.getText(textModel);\n }\n\n getOptionDescription(key: string, type: 'checkbox' | 'radio'): OptionalType<TextModel> {\n return type === 'checkbox' ? this.checkboxGroupField.options[key] : this.radioGroupField.options[key];\n }\n\n handleFileSelected(event?: FileUploadChangedEvent): void {\n this.formControl.setValue(!!this.fileUploadField.saveAsDataUrl ? event?.dataUrl : event?.file);\n this.formControl.markAsDirty();\n\n if (!!this.fileUploadField.fileNameFormProperty) {\n this.fileNameControl!.setValue(event?.file.name);\n }\n }\n\n onInputEnter(): void {\n if (!!this.inputField.shouldSubmitOnEnter) {\n this.submitForm.next();\n }\n }\n\n private setupWrapperClasses(): void {\n this.wrapperClasses = ColumnSizeHelper.getSizeClasses(this.field().colSize);\n }\n}\n","@switch (field().type) {\n @case (DynamicFieldType.Input) {\n <upd-input [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [layout]=\"layout()\" [isDisabled]=\"field().isDisabled || false\"\n [type]=\"inputField.inputType || 'text'\" [labelColSize]=\"field().labelColSize\" [value]=\"formControl.value\"\n (valueChange)=\"setControlValue($event)\" (blurred)=\"onBlur()\" (keyUpEnter)=\"onInputEnter()\">\n @if (!!inputField.prefix) {\n <ng-template updInputPrepend>\n {{ textService.getText(inputField.prefix) }}\n </ng-template>\n }\n\n @if (!!inputField.suffix) {\n <ng-template updInputAppend>\n {{ textService.getText(inputField.suffix) }}\n </ng-template>\n }\n </upd-input>\n }\n @case (DynamicFieldType.Checkbox) {\n <upd-checkbox [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"true\"\n [isDisabled]=\"field().isDisabled || false\" [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\"\n [isSwitch]=\"checkboxField.isSwitch || false\" (changed)=\"setControlValue($event)\"></upd-checkbox>\n }\n @case (DynamicFieldType.CheckboxGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n @for (option of checkboxGroupOptionsKeys; track option) {\n <upd-checkbox [name]=\"field().name\" [label]=\"getOptionDescription(option, 'checkbox')\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"option\" [isDisabled]=\"field().isDisabled || false\"\n [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\" [isSwitch]=\"checkboxField.isSwitch || false\"\n (changed)=\"setControlValue(option)\"></upd-checkbox>\n }\n }\n @case (DynamicFieldType.Radio) {\n <upd-radio [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"true\"\n [isChecked]=\"formControl.value\" [isDisabled]=\"field().isDisabled || false\" [isInline]=\"radioField.isInline || false\"\n (selected)=\"setControlValue($event)\">\n </upd-radio>\n }\n @case (DynamicFieldType.RadioGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n @for (option of radioGroupOptionsKeys; track option) {\n <upd-radio [name]=\"field().name\" [label]=\"getOptionDescription(option, 'radio')\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"option\" [isDisabled]=\"field().isDisabled || false\"\n [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\"\n (selected)=\"setControlValue(option)\"></upd-radio>\n }\n }\n @case (DynamicFieldType.Select) {\n <upd-select [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\"\n [useSystemStyle]=\"singleSelectField.useSystemStyle || false\" [isDisabled]=\"field().isDisabled || false\"\n [items]=\"selectField.items\" [layout]=\"layout()\" [labelColSize]=\"field().labelColSize\" [store]=\"selectField.store!\"\n [observable]=\"selectField.observable\" [itemKey]=\"selectField.itemKey\" [itemValue]=\"selectField.itemValue\"\n [dropdownMaxHeight]=\"selectField.dropdownMaxHeight || SelectDefaults.dropdownMaxHeight\"\n [typeaheadDebounce]=\"selectField.typeaheadDebounce || SelectDefaults.typeaheadDebounce\"\n [shouldAutoSearch]=\"selectField.shouldAutoSearch || SelectDefaults.shouldAutoSearch\"\n [shouldCloseOnOutsideClick]=\"selectField.shouldCloseOnOutsideClick || SelectDefaults.shouldCloseOnOutsideClick\"\n [shouldTruncateSelectedText]=\"selectField.shouldTruncateSelectedText\"\n (selectedItem)=\"setControlValue($event?.value)\"></upd-select>\n }\n @case (DynamicFieldType.SelectMultiple) {\n <upd-select-multiple [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [isDisabled]=\"field().isDisabled || false\"\n [items]=\"selectField.items\" [layout]=\"layout()\" [labelColSize]=\"field().labelColSize\" [store]=\"selectField.store!\"\n [observable]=\"selectField.observable\" [itemKey]=\"selectField.itemKey\" [itemValue]=\"selectField.itemValue\"\n [dropdownMaxHeight]=\"selectField.dropdownMaxHeight || SelectDefaults.dropdownMaxHeight\"\n [typeaheadDebounce]=\"selectField.typeaheadDebounce || SelectDefaults.typeaheadDebounce\"\n [shouldAutoSearch]=\"selectField.shouldAutoSearch || SelectDefaults.shouldAutoSearch\"\n [shouldCloseOnOutsideClick]=\"selectField.shouldCloseOnOutsideClick || SelectDefaults.shouldCloseOnOutsideClick\"\n (selectedIds)=\"setControlValue($event)\"></upd-select-multiple>\n }\n @case (DynamicFieldType.Label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n @case (DynamicFieldType.TextArea) {\n <upd-textarea [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [isDisabled]=\"field().isDisabled || false\"\n [value]=\"formControl.value\" [customClasses]=\"textareaField.customClasses\" [wrapperClasses]=\"textareaField.wrapperClasses\"\n [maxLength]=\"textareaField.maxLength\" [rows]=\"textareaField.rows\"\n [displayCharactersCount]=\"textareaField.displayCharactersCount || false\" (valueChange)=\"setControlValue($event)\">\n </upd-textarea>\n }\n @case (DynamicFieldType.FileUpload) {\n <upd-file-upload [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [isDisabled]=\"field().isDisabled || false\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\" [fileName]=\"fileNameControl?.value\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [allowFilesDrop]=\"fileUploadField.allowFilesDrop || false\"\n [title]=\"fileUploadField.title\" [labelColSize]=\"field().labelColSize\" [minFileSize]=\"fileUploadField.minFileSize\"\n [isMultiple]=\"fileUploadField.isMultiple || false\" [allowedExtensions]=\"fileUploadField.allowedExtensions || '*'\"\n [maxFileSize]=\"fileUploadField.maxFileSize\" [layout]=\"layout()\" (fileChanged)=\"handleFileSelected($event)\"></upd-file-upload>\n }\n @case (DynamicFieldType.MaskedInput) {\n <upd-input [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\" [mask]=\"maskedField.mask\"\n [maskConfig]=\"maskedField.maskConfig\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [layout]=\"layout()\"\n [isDisabled]=\"field().isDisabled || false\" [type]=\"inputField.inputType || 'text'\" [labelColSize]=\"field().labelColSize\"\n [value]=\"formControl.value\" (valueChange)=\"setControlValue($event)\" (blurred)=\"onBlur()\" (keyUpEnter)=\"onInputEnter()\">\n @if (!!inputField.prefix) {\n <ng-template updInputPrepend>\n {{ textService.getText(inputField.prefix) }}\n </ng-template>\n }\n\n @if (!!inputField.suffix) {\n <ng-template updInputAppend>\n {{ textService.getText(inputField.suffix) }}\n </ng-template>\n }\n </upd-input>\n }\n}\n","import { Component, effect, EventEmitter, inject, input, InputSignal, model, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';\nimport { HorizontalVerticalType } from '@updevs/components';\nimport { TextModel, TextService } from '@updevs/sdk';\nimport { BaseComponent } from '@updevs/sdk/layout';\nimport { OptionalType } from '@updevs/sdk/types';\n\nimport { DynamicFieldType } from './models/enums/dynamic-field.type';\nimport { FileUploadFieldModel } from './models/file-upload-field.model';\nimport { FormRowModel } from './models/form-row.model';\n\n@Component({\n selector: 'upd-form',\n templateUrl: './form.component.html',\n styleUrl: './form.component.scss'\n})\nexport class FormComponent<T> extends BaseComponent implements OnInit {\n @Output() readonly initialized = new EventEmitter<void>();\n @Output() readonly dataLoaded = new EventEmitter<T>(); // TODO: implementar\n @Output() readonly submitted = new EventEmitter<T>();\n\n /**\n * Rows to generate the form.\n */\n rows: InputSignal<FormRowModel[]> = input.required();\n /**\n * Form's layout.\n */\n layout: InputSignal<HorizontalVerticalType> = input<HorizontalVerticalType>('vertical');\n /**\n * Title of the form.\n * Optional.\n */\n title: InputSignal<OptionalType<TextModel>> = input<OptionalType<TextModel>>(undefined);\n /**\n * Whether the actions section will be displayed.\n */\n hasActionsSection = input(true);\n /**\n * Whether the form is contained in a card.\n * If true, it'll display a card as a form wrapper.\n */\n isCard = input(false);\n /**\n * Whether the form is in read only mode, which means no fields can be edited.\n */\n isDisabled = input(false, { transform: (val: boolean | string) => typeof val === 'string' ? val === '' : val });\n /**\n * Whether the form is loading.\n */\n isLoading = input(false); // TODO: implementar\n /**\n * Whether the form is saving.\n */\n isSaving = input(false); // TODO: implementar\n /**\n * Current form data.\n */\n formData = model({} as T);\n formGroup = model(new FormGroup({}));\n get titleText(): string {\n return this.textService.getText(this.title());\n }\n\n readonly textService = inject(TextService);\n\n constructor() {\n super();\n\n effect(() => {\n this.rows();\n this.setupFormGroup();\n });\n }\n\n ngOnInit(): void {\n this.setupFormGroup();\n this.initialized.emit();\n\n const valueChangesSub = this.formGroup().valueChanges.subscribe(() => this.formData.set(this.formGroup().getRawValue() as T));\n\n this.addSubscriptions(valueChangesSub);\n }\n\n submit(): void {\n this.formGroup().markAllAsTouched();\n this.formGroup().updateValueAndValidity();\n Object.values(this.formGroup().controls).forEach(control => (control as FormControl).updateValueAndValidity());\n\n if (this.formGroup().valid) {\n this.submitted.emit(this.formGroup().value as T);\n }\n }\n\n private setupFormGroup(): void {\n const allFields = this.rows().map(r => r.fields).reduce((acc, fields) => acc.concat(fields), []);\n\n allFields.forEach(field => {\n const validators: ValidatorFn[] = field.validators || [];\n\n if (field.isRequired && !validators.includes(Validators.required)) {\n validators.push(Validators.required);\n }\n\n // TODO: handle extra cases, when ready. DateRange, DateTimeRange, TimeRange, etc.\n switch (field.type) {\n case DynamicFieldType.FileUpload:\n this.formGroup().addControl(\n field.name,\n new FormControl({\n value: field.initValue,\n disabled: field.isDisabled || this.isDisabled()\n }, { validators: validators })\n );\n\n const fileNameFormProp = (field as FileUploadFieldModel).fileNameFormProperty;\n\n if (!!fileNameFormProp) {\n this.formGroup().addControl(\n fileNameFormProp,\n new FormControl({\n value: field.initValue,\n disabled: field.isDisabled || this.isDisabled()\n }, { validators: validators })\n );\n }\n\n break;\n default:\n this.formGroup().addControl(\n field.name,\n new FormControl({\n value: field.initValue,\n disabled: field.isDisabled || this.isDisabled()\n }, { validators: validators })\n );\n }\n });\n }\n}\n","<ng-container *transloco=\"let t; prefix: 'UpDevs.Form'\">\n <div [class.card]=\"isCard()\">\n @if (!!titleText) {\n <div [class.card-header]=\"isCard()\">\n <h3 [class.card-title]=\"isCard()\">{{ titleText }}</h3>\n </div>\n }\n <div [class.card-body]=\"isCard()\">\n @for (row of rows(); track row; let isFirst = $first) {\n <div class=\"row\" [class.mt-4]=\"!isFirst\">\n @if (!!row.title) {\n <div class=\"card-title col-12\">{{ textService.getText(row.title) }}</div>\n }\n\n @for (field of row.fields; track field.name) {\n <upd-dynamic-field [layout]=\"layout()\" [field]=\"field\" [formGroup]=\"formGroup()\" (submitForm)=\"submit()\">\n </upd-dynamic-field>\n }\n </div>\n }\n </div>\n\n @if (hasActionsSection()) {\n <div [class.card-footer]=\"isCard()\" [class.mt-4]=\"!isCard()\">\n <upd-button colorStyle=\"primary\" (clicked)=\"submit()\">\n {{ t('Submit') }}\n </upd-button>\n </div>\n }\n </div>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { UpdSdkModule } from '@updevs/sdk';\nimport { UpdButtonModule } from '@updevs/components/button';\nimport { UpdInputModule } from '@updevs/components/form-controls/input';\nimport { UpdCheckboxModule } from '@updevs/components/form-controls/checkbox';\nimport { UpdRadioModule } from '@updevs/components/form-controls/radio';\nimport { UpdDatePickerModule } from '@updevs/components/form-controls/date-picker';\nimport { UpdSelectModule } from '@updevs/components/form-controls/select';\nimport { UpdTextareaModule } from '@updevs/components/form-controls/textarea';\nimport { UpdFileUploadModule } from '@updevs/components/form-controls/file-upload';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\n\nimport * as en from './assets/i18n/en.json';\nimport * as pt from './assets/i18n/pt.json';\nimport { FormComponent } from './form.component';\nimport { DynamicFieldComponent } from './components/dynamic-field/dynamic-field.component';\nimport { ErrorsHelper } from './tools/errors-helper';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n UpdButtonModule,\n TranslocoDirective,\n UpdInputModule,\n UpdCheckboxModule,\n UpdRadioModule,\n UpdDatePickerModule,\n UpdSelectModule,\n UpdTextareaModule,\n UpdFileUploadModule,\n UpdSdkModule\n ],\n declarations: [\n FormComponent,\n DynamicFieldComponent\n ],\n exports: [\n FormComponent\n ],\n providers: [\n ErrorsHelper\n ]\n})\nexport class UpdFormModule {\n constructor(translocoService: TranslocoService) {\n translocoService.setFallbackLangForMissingTranslation({ fallbackLang: 'en' });\n translocoService.setTranslation(en, 'en');\n translocoService.setTranslation(pt, 'pt');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SelectDefaults","i1","i2","i3","i4.DynamicFieldComponent","en","pt"],"mappings":"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"}
1
+ {"version":3,"file":"updevs-components-form.mjs","sources":["../../../../libs/components/form/src/models/enums/attachment-type.enum.ts","../../../../libs/components/form/src/models/enums/dynamic-field.type.ts","../../../../libs/components/form/src/tools/errors-helper.ts","../../../../libs/components/form/src/components/dynamic-field/dynamic-field.component.ts","../../../../libs/components/form/src/components/dynamic-field/dynamic-field.component.html","../../../../libs/components/form/src/form.component.ts","../../../../libs/components/form/src/form.component.html","../../../../libs/components/form/src/upd-form.module.ts","../../../../libs/components/form/src/updevs-components-form.ts"],"sourcesContent":["/** \n * How a parent field influences its child.\n **/\nexport enum AttachmentTypeEnum {\n /** \n * Enable / disable behaviour (default).\n **/\n Disabled = 'disabled',\n\n /** \n * Child waits for the parent to have a value and (re)loads afterwards.\n **/\n ParentLoad = 'parentLoad'\n}","export enum DynamicFieldType {\n Input = 1,\n Select = 2,\n SelectMultiple = 3,\n Label = 4,\n Checkbox = 5,\n CheckboxGroup = 6,\n Radio = 7,\n RadioGroup = 8,\n TextArea = 9,\n FileUpload = 10,\n MaskedInput = 11,\n Button = 12,\n ButtonGroup = 13\n}\n","import { Injectable, inject } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { TextService } from '@updevs/sdk';\nimport { DictionaryType, OptionalType } from '@updevs/sdk/types';\nimport { HashMap } from '@jsverse/transloco';\n\nimport { ValidatorConfig } from '../models/validator-config';\n\n@Injectable()\nexport class ErrorsHelper {\n private errors: DictionaryType<ValidatorConfig> = {\n 'required': { text: 'UpDevs.Form.ErrorMessages.Required' },\n 'requiredTrue': { text: 'UpDevs.Form.ErrorMessages.RequiredTrue' },\n 'generic': { text: 'UpDevs.Form.ErrorMessages.Generic' },\n 'email': { text: 'UpDevs.Form.ErrorMessages.Email' },\n 'max': { text: 'UpDevs.Form.ErrorMessages.Max', defaultErrorParamToShow: 'max' },\n 'min': { text: 'UpDevs.Form.ErrorMessages.Min', defaultErrorParamToShow: 'min' },\n 'maxlength': { text: 'UpDevs.Form.ErrorMessages.MaxLength', defaultErrorParamToShow: 'requiredLength' },\n 'minlength': { text: 'UpDevs.Form.ErrorMessages.MinLength', defaultErrorParamToShow: 'requiredLength' }\n };\n private readonly textService = inject(TextService);\n\n getMessages(control: AbstractControl, customConfig?: DictionaryType<ValidatorConfig>): string[] {\n if (!control.errors) {\n return [];\n }\n\n const errorMessages: string[] = [];\n const genericText = this.textService.getText({ text: this.errors['generic']!.text, isTranslated: false });\n const combinedErrorMessagesList: DictionaryType<ValidatorConfig> = Object.assign({}, this.errors, customConfig || {});\n const controlErrorKeys = Object.keys(control.errors);\n\n controlErrorKeys.forEach(key => {\n const customError = !!control.errors ? control.errors[key] : undefined;\n\n if (!!customError?.errorText) {\n errorMessages.push(this.textService.getText(customError.errorText));\n } else if (key in combinedErrorMessagesList) {\n const config = combinedErrorMessagesList[key]!;\n let params: OptionalType<HashMap>;\n\n if (config.showLength) {\n params = { value: control.value?.length || 0 };\n }\n\n if (!!config.defaultErrorParamToShow) {\n params = { value: control.errors![key][config.defaultErrorParamToShow] };\n }\n\n errorMessages.push(this.textService.getText({ text: config.text, isTranslated: false }, params));\n }\n });\n\n if (controlErrorKeys.length > 0 && errorMessages.length < 1) {\n errorMessages.push(genericText);\n }\n\n return errorMessages;\n }\n}\n","import { Component, OnInit, HostBinding, inject, InputSignal, input, Output, EventEmitter, computed } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { TextModel, TextService } from '@updevs/sdk';\nimport { OptionalType } from '@updevs/sdk/types';\nimport { BaseComponent } from '@updevs/sdk/layout';\nimport { ColumnSizeHelper, HorizontalVerticalType, ValidationStatusType } from '@updevs/components';\nimport { Defaults as SelectDefaults } from '@updevs/components/form-controls/select';\nimport { FileUploadChangedEvent } from '@updevs/components/form-controls/file-upload';\n\nimport { FileUploadFieldModel } from '../../models/file-upload-field.model';\nimport { InputFieldModel } from '../../models/input-field.model';\nimport { MaskedInputFieldModel } from '../../models/masked-input-field.model';\nimport { ErrorsHelper } from '../../tools/errors-helper';\nimport { DynamicFieldType } from '../../models/enums/dynamic-field.type';\nimport { DynamicFieldModel } from '../../models/dynamic-field.model';\nimport { CheckboxFieldModel } from '../../models/checkbox-field.model';\nimport { RadioFieldModel } from '../../models/radio-field.model';\nimport { SelectFieldModel } from '../../models/select-field.model';\nimport { SingleSelectFieldModel } from '../../models/single-select-field.model';\nimport { CheckboxGroupFieldModel } from '../../models/checkbox-group-field.model';\nimport { RadioGroupFieldModel } from '../../models/radio-group-field.model';\nimport { TextareaFieldModel } from '../../models/textarea-field.model';\nimport { ButtonFieldModel } from '../../models/button-field.model';\nimport { ButtonGroupFieldModel } from '../../models/button-group-field.model';\n\n@Component({\n selector: 'upd-dynamic-field',\n templateUrl: './dynamic-field.component.html',\n styleUrl: './dynamic-field.component.scss'\n})\nexport class DynamicFieldComponent extends BaseComponent implements OnInit {\n @HostBinding('class') get hostClasses(): string {\n return this.wrapperClasses();\n }\n\n @Output() readonly submitForm = new EventEmitter<void>();\n\n DynamicFieldType = DynamicFieldType;\n SelectDefaults = SelectDefaults;\n\n formGroup: InputSignal<FormGroup> = input.required();\n field: InputSignal<DynamicFieldModel> = input.required();\n layout: InputSignal<HorizontalVerticalType> = input.required();\n validationStatus?: ValidationStatusType;\n validationStatusDescriptions: TextModel[] = [];\n get formControl(): FormControl {\n return this.formGroup().controls[this.field().name] as FormControl;\n }\n get inputField(): InputFieldModel {\n return this.field() as InputFieldModel;\n }\n get checkboxField(): CheckboxFieldModel {\n return this.field() as CheckboxFieldModel;\n }\n get checkboxGroupField(): CheckboxGroupFieldModel {\n return this.field() as CheckboxGroupFieldModel;\n }\n get radioField(): CheckboxFieldModel {\n return this.field() as RadioFieldModel;\n }\n get radioGroupField(): RadioGroupFieldModel {\n return this.field() as RadioGroupFieldModel;\n }\n get selectField(): SelectFieldModel {\n return this.field() as SelectFieldModel;\n }\n get singleSelectField(): SingleSelectFieldModel {\n return this.field() as SingleSelectFieldModel;\n }\n get textareaField(): TextareaFieldModel {\n return this.field() as TextareaFieldModel;\n }\n get fileUploadField(): FileUploadFieldModel {\n return this.field() as FileUploadFieldModel;\n }\n get maskedField(): MaskedInputFieldModel {\n return this.field() as MaskedInputFieldModel;\n }\n get buttonField(): ButtonFieldModel {\n return this.field() as ButtonFieldModel;\n }\n get buttonGroupField(): ButtonGroupFieldModel {\n return this.field() as ButtonGroupFieldModel;\n }\n get checkboxGroupOptionsKeys(): string[] {\n return Object.keys(this.checkboxGroupField.options);\n }\n get radioGroupOptionsKeys(): string[] {\n return Object.keys(this.radioGroupField.options);\n }\n get fileNameControl(): OptionalType<FormControl> {\n return !!this.fileUploadField.fileNameFormProperty\n ? this.formGroup().controls[this.fileUploadField.fileNameFormProperty] as FormControl\n : undefined;\n }\n\n readonly textService = inject(TextService);\n\n private readonly wrapperClasses = computed(() => {\n const isVisible = this.field().isVisible?.() ?? true;\n const columnClasses = ColumnSizeHelper.getSizeClasses(this.field().colSize);\n\n return `${columnClasses} ${isVisible ? '' : 'd-none'}`;\n });\n private readonly errorsHelper = inject(ErrorsHelper);\n\n ngOnInit(): void {\n const statusSub = this.formControl.statusChanges.subscribe(status => {\n if (status === 'INVALID') {\n this.validationStatusDescriptions = this.errorsHelper.getMessages(this.formControl)\n .map(t => ({ text: t, isTranslated: true }));\n this.validationStatus = 'invalid';\n } else {\n this.validationStatusDescriptions = [];\n this.validationStatus = this.field().showValidStatus ? 'valid' : undefined;\n }\n });\n\n this.addSubscriptions(statusSub);\n }\n\n onBlur(): void {\n if (this.field().shouldValidateOnBlur) {\n this.formControl.updateValueAndValidity();\n }\n }\n\n setControlValue(value: any): void {\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n }\n\n getText(textModel?: TextModel): string {\n return this.textService.getText(textModel);\n }\n\n getOptionDescription(key: string, type: 'checkbox' | 'radio'): OptionalType<TextModel> {\n return type === 'checkbox' ? this.checkboxGroupField.options[key] : this.radioGroupField.options[key];\n }\n\n handleFileSelected(event?: FileUploadChangedEvent): void {\n this.formControl.setValue(!!this.fileUploadField.saveAsDataUrl ? event?.dataUrl : event?.file);\n this.formControl.markAsDirty();\n\n if (!!this.fileUploadField.fileNameFormProperty) {\n this.fileNameControl!.setValue(event?.file.name);\n }\n }\n\n onInputEnter(): void {\n if (!!this.inputField.shouldSubmitOnEnter) {\n this.submitForm.next();\n }\n }\n}\n","@switch (field().type) {\n @case (DynamicFieldType.Input) {\n <upd-input [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [layout]=\"layout()\" [isDisabled]=\"field().isDisabled || false\"\n [type]=\"inputField.inputType || 'text'\" [labelColSize]=\"field().labelColSize\" [value]=\"formControl.value\"\n (valueChange)=\"setControlValue($event)\" (blurred)=\"onBlur()\" (keyUpEnter)=\"onInputEnter()\">\n @if (!!inputField.prefix) {\n <ng-template updInputPrepend>\n {{ textService.getText(inputField.prefix) }}\n </ng-template>\n }\n\n @if (!!inputField.suffix) {\n <ng-template updInputAppend>\n {{ textService.getText(inputField.suffix) }}\n </ng-template>\n }\n </upd-input>\n }\n @case (DynamicFieldType.Checkbox) {\n <upd-checkbox [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"true\"\n [isDisabled]=\"field().isDisabled || false\" [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\"\n [isSwitch]=\"checkboxField.isSwitch || false\" (changed)=\"setControlValue($event)\"></upd-checkbox>\n }\n @case (DynamicFieldType.CheckboxGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n @for (option of checkboxGroupOptionsKeys; track option) {\n <upd-checkbox [name]=\"field().name\" [label]=\"getOptionDescription(option, 'checkbox')\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"option\" [isDisabled]=\"field().isDisabled || false\"\n [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\" [isSwitch]=\"checkboxField.isSwitch || false\"\n (changed)=\"setControlValue(option)\"></upd-checkbox>\n }\n }\n @case (DynamicFieldType.Radio) {\n <upd-radio [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"true\"\n [isChecked]=\"formControl.value\" [isDisabled]=\"field().isDisabled || false\" [isInline]=\"radioField.isInline || false\"\n (selected)=\"setControlValue($event)\">\n </upd-radio>\n }\n @case (DynamicFieldType.RadioGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n @for (option of radioGroupOptionsKeys; track option) {\n <upd-radio [name]=\"field().name\" [label]=\"getOptionDescription(option, 'radio')\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"option\" [isDisabled]=\"field().isDisabled || false\"\n [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\"\n (selected)=\"setControlValue(option)\"></upd-radio>\n }\n }\n @case (DynamicFieldType.Select) {\n <upd-select [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\"\n [useSystemStyle]=\"singleSelectField.useSystemStyle || false\" [isDisabled]=\"field().isDisabled || false\"\n [items]=\"selectField.items\" [layout]=\"layout()\" [labelColSize]=\"field().labelColSize\" [store]=\"selectField.store!\"\n [observable]=\"selectField.observable\" [itemKey]=\"selectField.itemKey\" [itemValue]=\"selectField.itemValue\"\n [dropdownMaxHeight]=\"selectField.dropdownMaxHeight || SelectDefaults.dropdownMaxHeight\"\n [typeaheadDebounce]=\"selectField.typeaheadDebounce || SelectDefaults.typeaheadDebounce\"\n [shouldAutoSearch]=\"selectField.shouldAutoSearch || SelectDefaults.shouldAutoSearch\"\n [shouldCloseOnOutsideClick]=\"selectField.shouldCloseOnOutsideClick || SelectDefaults.shouldCloseOnOutsideClick\"\n [shouldTruncateSelectedText]=\"selectField.shouldTruncateSelectedText\" [parentValue]=\"selectField.parentValue\"\n (selectedItem)=\"setControlValue($event?.value)\"></upd-select>\n }\n @case (DynamicFieldType.SelectMultiple) {\n <upd-select-multiple [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [isDisabled]=\"field().isDisabled || false\"\n [items]=\"selectField.items\" [layout]=\"layout()\" [labelColSize]=\"field().labelColSize\" [store]=\"selectField.store!\"\n [observable]=\"selectField.observable\" [itemKey]=\"selectField.itemKey\" [itemValue]=\"selectField.itemValue\"\n [dropdownMaxHeight]=\"selectField.dropdownMaxHeight || SelectDefaults.dropdownMaxHeight\"\n [typeaheadDebounce]=\"selectField.typeaheadDebounce || SelectDefaults.typeaheadDebounce\"\n [shouldAutoSearch]=\"selectField.shouldAutoSearch || SelectDefaults.shouldAutoSearch\" [parentValue]=\"selectField.parentValue\"\n [shouldCloseOnOutsideClick]=\"selectField.shouldCloseOnOutsideClick || SelectDefaults.shouldCloseOnOutsideClick\"\n (selectedIds)=\"setControlValue($event)\"></upd-select-multiple>\n }\n @case (DynamicFieldType.Label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n @case (DynamicFieldType.TextArea) {\n <upd-textarea [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [isDisabled]=\"field().isDisabled || false\"\n [value]=\"formControl.value\" [customClasses]=\"textareaField.customClasses\" [wrapperClasses]=\"textareaField.wrapperClasses\"\n [maxLength]=\"textareaField.maxLength\" [rows]=\"textareaField.rows\"\n [displayCharactersCount]=\"textareaField.displayCharactersCount || false\" (valueChange)=\"setControlValue($event)\">\n </upd-textarea>\n }\n @case (DynamicFieldType.FileUpload) {\n <upd-file-upload [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [isDisabled]=\"field().isDisabled || false\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\" [fileName]=\"fileNameControl?.value\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [allowFilesDrop]=\"fileUploadField.allowFilesDrop || false\"\n [title]=\"fileUploadField.title\" [labelColSize]=\"field().labelColSize\" [minFileSize]=\"fileUploadField.minFileSize\"\n [isMultiple]=\"fileUploadField.isMultiple || false\" [allowedExtensions]=\"fileUploadField.allowedExtensions || '*'\"\n [maxFileSize]=\"fileUploadField.maxFileSize\" [layout]=\"layout()\" (fileChanged)=\"handleFileSelected($event)\"></upd-file-upload>\n }\n @case (DynamicFieldType.MaskedInput) {\n <upd-input [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\" [mask]=\"maskedField.mask\"\n [maskConfig]=\"maskedField.maskConfig\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [layout]=\"layout()\"\n [isDisabled]=\"field().isDisabled || false\" [type]=\"inputField.inputType || 'text'\" [labelColSize]=\"field().labelColSize\"\n [value]=\"formControl.value\" (valueChange)=\"setControlValue($event)\" (blurred)=\"onBlur()\" (keyUpEnter)=\"onInputEnter()\">\n @if (!!inputField.prefix) {\n <ng-template updInputPrepend>\n {{ textService.getText(inputField.prefix) }}\n </ng-template>\n }\n\n @if (!!inputField.suffix) {\n <ng-template updInputAppend>\n {{ textService.getText(inputField.suffix) }}\n </ng-template>\n }\n </upd-input>\n }\n @case(DynamicFieldType.Button) {\n <upd-button [text]=\"field().label\" [isDisabled]=\"field().isDisabled || false\" [model]=\"buttonField.model\" />\n }\n @case(DynamicFieldType.ButtonGroup) {\n <div class=\"btn-group\" role=\"group\">\n @for (btn of buttonGroupField.buttons; track btn) {\n <upd-button [model]=\"btn\" />\n }\n </div>\n }\n}","import { Component, effect, EventEmitter, inject, input, InputSignal, model, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';\nimport { HorizontalVerticalType } from '@updevs/components';\nimport { TextModel, TextService } from '@updevs/sdk';\nimport { BaseComponent } from '@updevs/sdk/layout';\nimport { OptionalType } from '@updevs/sdk/types';\nimport { startWith } from 'rxjs';\n\nimport { DynamicFieldType } from './models/enums/dynamic-field.type';\nimport { FileUploadFieldModel } from './models/file-upload-field.model';\nimport { FormRowModel } from './models/form-row.model';\nimport { AttachmentTypeEnum } from './models/enums/attachment-type.enum';\nimport { AttachmentRule } from './models/attachment-rule.model';\nimport { DynamicFieldModel } from './models/dynamic-field.model';\n\n@Component({\n selector: 'upd-form',\n templateUrl: './form.component.html',\n styleUrl: './form.component.scss'\n})\nexport class FormComponent<T> extends BaseComponent implements OnInit {\n @Output() readonly initialized = new EventEmitter<void>();\n @Output() readonly dataLoaded = new EventEmitter<T>(); // TODO: implementar\n @Output() readonly submitted = new EventEmitter<T>();\n\n /**\n * Rows to generate the form.\n */\n rows: InputSignal<FormRowModel[]> = input.required();\n /**\n * Form's layout.\n */\n layout: InputSignal<HorizontalVerticalType> = input<HorizontalVerticalType>('vertical');\n /**\n * Title of the form.\n * Optional.\n */\n title: InputSignal<OptionalType<TextModel>> = input<OptionalType<TextModel>>(undefined);\n /**\n * Whether the actions section will be displayed.\n */\n hasActionsSection = input(true);\n /**\n * Whether the form is contained in a card.\n * If true, it'll display a card as a form wrapper.\n */\n isCard = input(false);\n /**\n * Whether the form is in read only mode, which means no fields can be edited.\n */\n isDisabled = input(false, { transform: (val: boolean | string) => typeof val === 'string' ? val === '' : val });\n /**\n * Whether the form is loading.\n */\n isLoading = input(false); // TODO: implementar\n /**\n * Whether the form is saving.\n */\n isSaving = input(false); // TODO: implementar\n /**\n * Current form data.\n */\n formData = model({} as T);\n formGroup = model(new FormGroup({}));\n get titleText(): string {\n return this.textService.getText(this.title());\n }\n\n readonly textService = inject(TextService);\n\n constructor() {\n super();\n\n effect(() => {\n this.rows();\n this.setupFormGroup();\n });\n }\n\n ngOnInit(): void {\n this.setupFormGroup();\n this.initialized.emit();\n\n const valueChangesSub = this.formGroup().valueChanges.subscribe(() => this.formData.set(this.formGroup().getRawValue() as T));\n\n this.addSubscriptions(valueChangesSub);\n }\n\n submit(): void {\n this.formGroup().markAllAsTouched();\n this.formGroup().updateValueAndValidity();\n Object.values(this.formGroup().controls).forEach(control => (control as FormControl).updateValueAndValidity());\n\n if (this.formGroup().valid) {\n this.submitted.emit(this.formGroup().value as T);\n }\n }\n\n private setupFormGroup(): void {\n const allFields = this.rows().map(r => r.fields).reduce((acc, fields) => acc.concat(fields), []);\n\n allFields.forEach(field => {\n const validators: ValidatorFn[] = field.validators || [];\n\n if (field.isRequired && !validators.includes(Validators.required)) {\n validators.push(Validators.required);\n }\n\n // TODO: handle extra cases, when ready. DateRange, DateTimeRange, TimeRange, etc.\n switch (field.type) {\n case DynamicFieldType.FileUpload:\n this.formGroup().addControl(\n field.name,\n new FormControl({\n value: field.initValue,\n disabled: field.isDisabled || this.isDisabled()\n }, { validators: validators })\n );\n\n const fileNameFormProp = (field as FileUploadFieldModel).fileNameFormProperty;\n\n if (!!fileNameFormProp) {\n this.formGroup().addControl(\n fileNameFormProp,\n new FormControl({\n value: field.initValue,\n disabled: field.isDisabled || this.isDisabled()\n }, { validators: validators })\n );\n }\n\n break;\n // Buttons don't generate values, so they don't need to have a control.\n case DynamicFieldType.Button:\n case DynamicFieldType.ButtonGroup:\n break;\n default:\n this.formGroup().addControl(\n field.name,\n new FormControl({\n value: field.initValue,\n disabled: field.isDisabled || this.isDisabled()\n }, { validators: validators })\n );\n }\n });\n\n this.bindAttachments(allFields);\n }\n\n /** \n * Glue the declarative AttachmentRule array to actual FormControls.\n **/\n private bindAttachments(fields: DynamicFieldModel[]): void {\n fields.forEach(childField => {\n if (!childField.attachments?.length) {\n return;\n }\n\n const childCtrl = this.formGroup().get(childField.name) as FormControl;\n\n childField.attachments.forEach((rule: AttachmentRule) => {\n const parentCtrl = this.formGroup().get(rule.name);\n\n if (!parentCtrl) {\n console.warn(`[FormComponent] attachment parent '${rule.name}' not found`);\n return;\n }\n\n const sub = parentCtrl.valueChanges\n .pipe(startWith(parentCtrl.value))\n .subscribe(parentVal => {\n const childVal = childCtrl.value;\n let shouldDisable = false;\n\n if (rule.type === AttachmentTypeEnum.ParentLoad || rule.disableIfEmpty) {\n shouldDisable = parentVal === null || parentVal === undefined || parentVal === '';\n }\n\n if (!!rule.disableIf) {\n shouldDisable = rule.disableIf(childVal, parentVal);\n }\n\n if (shouldDisable) {\n if (rule.clearValueIfDisabled && childCtrl.enabled) {\n childCtrl.setValue(null, { emitEvent: false });\n }\n\n childField.parentValue = undefined;\n childCtrl.disable({ emitEvent: false });\n } else {\n childField.parentValue = parentVal;\n\n if (childCtrl.disabled) {\n childCtrl.enable({ emitEvent: false });\n }\n\n if (rule.clearValueIfEmpty && !parentVal) {\n childCtrl.setValue(null, { emitEvent: false });\n }\n }\n\n if (rule.visibleIf) {\n const visible = rule.visibleIf(childVal, parentVal);\n childField.isHidden = !visible;\n }\n });\n\n this.addSubscriptions(sub);\n });\n });\n }\n}\n","<ng-container *transloco=\"let t; prefix: 'UpDevs.Form'\">\n <div [class.card]=\"isCard()\">\n @if (!!titleText) {\n <div [class.card-header]=\"isCard()\">\n <h3 [class.card-title]=\"isCard()\">{{ titleText }}</h3>\n </div>\n }\n <div [class.card-body]=\"isCard()\">\n @for (row of rows(); track row; let isFirst = $first) {\n <div class=\"row\" [class.mt-4]=\"!isFirst\">\n @if (!!row.title) {\n <div class=\"card-title col-12\">{{ textService.getText(row.title) }}</div>\n }\n\n @for (field of row.fields; track field.name) {\n @if (!field.isHidden) {\n <upd-dynamic-field [layout]=\"layout()\" [field]=\"field\" [formGroup]=\"formGroup()\" (submitForm)=\"submit()\">\n </upd-dynamic-field>\n }\n }\n </div>\n }\n </div>\n\n @if (hasActionsSection()) {\n <div [class.card-footer]=\"isCard()\" [class.mt-4]=\"!isCard()\">\n <upd-button colorStyle=\"primary\" (clicked)=\"submit()\">\n {{ t('Submit') }}\n </upd-button>\n </div>\n }\n </div>\n</ng-container>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { UpdSdkModule } from '@updevs/sdk';\nimport { UpdButtonModule } from '@updevs/components/button';\nimport { UpdInputModule } from '@updevs/components/form-controls/input';\nimport { UpdCheckboxModule } from '@updevs/components/form-controls/checkbox';\nimport { UpdRadioModule } from '@updevs/components/form-controls/radio';\nimport { UpdDatePickerModule } from '@updevs/components/form-controls/date-picker';\nimport { UpdSelectModule } from '@updevs/components/form-controls/select';\nimport { UpdTextareaModule } from '@updevs/components/form-controls/textarea';\nimport { UpdFileUploadModule } from '@updevs/components/form-controls/file-upload';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\n\nimport * as en from './assets/i18n/en.json';\nimport * as pt from './assets/i18n/pt.json';\nimport { FormComponent } from './form.component';\nimport { DynamicFieldComponent } from './components/dynamic-field/dynamic-field.component';\nimport { ErrorsHelper } from './tools/errors-helper';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n UpdButtonModule,\n TranslocoDirective,\n UpdInputModule,\n UpdCheckboxModule,\n UpdRadioModule,\n UpdDatePickerModule,\n UpdSelectModule,\n UpdTextareaModule,\n UpdFileUploadModule,\n UpdSdkModule\n ],\n declarations: [\n FormComponent,\n DynamicFieldComponent\n ],\n exports: [\n FormComponent\n ],\n providers: [\n ErrorsHelper\n ]\n})\nexport class UpdFormModule {\n constructor(translocoService: TranslocoService) {\n translocoService.setFallbackLangForMissingTranslation({ fallbackLang: 'en' });\n translocoService.setTranslation(en, 'en');\n translocoService.setTranslation(pt, 'pt');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SelectDefaults","i1","i2","i3","i4.DynamicFieldComponent","en","pt"],"mappings":"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"}
@@ -17,9 +17,11 @@ import { SingleSelectFieldModel } from '../../models/single-select-field.model';
17
17
  import { CheckboxGroupFieldModel } from '../../models/checkbox-group-field.model';
18
18
  import { RadioGroupFieldModel } from '../../models/radio-group-field.model';
19
19
  import { TextareaFieldModel } from '../../models/textarea-field.model';
20
+ import { ButtonFieldModel } from '../../models/button-field.model';
21
+ import { ButtonGroupFieldModel } from '../../models/button-group-field.model';
20
22
  import * as i0 from "@angular/core";
21
23
  export declare class DynamicFieldComponent extends BaseComponent implements OnInit {
22
- wrapperClasses: string;
24
+ get hostClasses(): string;
23
25
  readonly submitForm: EventEmitter<void>;
24
26
  DynamicFieldType: typeof DynamicFieldType;
25
27
  SelectDefaults: typeof SelectDefaults;
@@ -39,10 +41,13 @@ export declare class DynamicFieldComponent extends BaseComponent implements OnIn
39
41
  get textareaField(): TextareaFieldModel;
40
42
  get fileUploadField(): FileUploadFieldModel;
41
43
  get maskedField(): MaskedInputFieldModel;
44
+ get buttonField(): ButtonFieldModel;
45
+ get buttonGroupField(): ButtonGroupFieldModel;
42
46
  get checkboxGroupOptionsKeys(): string[];
43
47
  get radioGroupOptionsKeys(): string[];
44
48
  get fileNameControl(): OptionalType<FormControl>;
45
49
  readonly textService: TextService;
50
+ private readonly wrapperClasses;
46
51
  private readonly errorsHelper;
47
52
  ngOnInit(): void;
48
53
  onBlur(): void;
@@ -51,7 +56,6 @@ export declare class DynamicFieldComponent extends BaseComponent implements OnIn
51
56
  getOptionDescription(key: string, type: 'checkbox' | 'radio'): OptionalType<TextModel>;
52
57
  handleFileSelected(event?: FileUploadChangedEvent): void;
53
58
  onInputEnter(): void;
54
- private setupWrapperClasses;
55
59
  static ɵfac: i0.ɵɵFactoryDeclaration<DynamicFieldComponent, never>;
56
60
  static ɵcmp: i0.ɵɵComponentDeclaration<DynamicFieldComponent, "upd-dynamic-field", never, { "formGroup": { "alias": "formGroup"; "required": true; "isSignal": true; }; "field": { "alias": "field"; "required": true; "isSignal": true; }; "layout": { "alias": "layout"; "required": true; "isSignal": true; }; }, { "submitForm": "submitForm"; }, never, never, false, never>;
57
61
  }
@@ -55,6 +55,10 @@ export declare class FormComponent<T> extends BaseComponent implements OnInit {
55
55
  ngOnInit(): void;
56
56
  submit(): void;
57
57
  private setupFormGroup;
58
+ /**
59
+ * Glue the declarative AttachmentRule array to actual FormControls.
60
+ **/
61
+ private bindAttachments;
58
62
  static ɵfac: i0.ɵɵFactoryDeclaration<FormComponent<any>, never>;
59
63
  static ɵcmp: i0.ɵɵComponentDeclaration<FormComponent<any>, "upd-form", never, { "rows": { "alias": "rows"; "required": true; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "hasActionsSection": { "alias": "hasActionsSection"; "required": false; "isSignal": true; }; "isCard": { "alias": "isCard"; "required": false; "isSignal": true; }; "isDisabled": { "alias": "isDisabled"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "isSaving": { "alias": "isSaving"; "required": false; "isSignal": true; }; "formData": { "alias": "formData"; "required": false; "isSignal": true; }; "formGroup": { "alias": "formGroup"; "required": false; "isSignal": true; }; }, { "initialized": "initialized"; "dataLoaded": "dataLoaded"; "submitted": "submitted"; "formData": "formDataChange"; "formGroup": "formGroupChange"; }, never, never, false, never>;
60
64
  }
@@ -0,0 +1,35 @@
1
+ import { AttachmentTypeEnum } from './enums/attachment-type.enum';
2
+ /**
3
+ * Declarative relationship between two dynamic fields.
4
+ * P = parent value type, C = child value type.
5
+ */
6
+ export interface AttachmentRule<P = any, C = any> {
7
+ /**
8
+ * Name of the *parent* control inside the same FormGroup.
9
+ **/
10
+ name: string;
11
+ /**
12
+ * Kind of interaction (default = Disabled).
13
+ **/
14
+ type?: AttachmentTypeEnum;
15
+ /**
16
+ * Returns true when the *child* must be disabled.
17
+ **/
18
+ disableIf?: (childValue: C, parentValue: P) => boolean;
19
+ /**
20
+ * Disable when the parent is empty/null/''.
21
+ **/
22
+ disableIfEmpty?: boolean;
23
+ /**
24
+ * Clear the child’s value the moment it becomes disabled.
25
+ **/
26
+ clearValueIfDisabled?: boolean;
27
+ /**
28
+ * Clear the child when the parent turns empty.
29
+ **/
30
+ clearValueIfEmpty?: boolean;
31
+ /**
32
+ * Return false to HIDE the child; true → show.
33
+ **/
34
+ visibleIf?: (childValue: C, parentValue: P) => boolean;
35
+ }
@@ -0,0 +1,5 @@
1
+ import { ButtonModel } from '@updevs/sdk/layout';
2
+ import { DynamicFieldModel } from './dynamic-field.model';
3
+ export interface ButtonFieldModel extends DynamicFieldModel {
4
+ model: ButtonModel;
5
+ }
@@ -0,0 +1,5 @@
1
+ import { ButtonModel } from '@updevs/sdk/layout';
2
+ import { DynamicFieldModel } from './dynamic-field.model';
3
+ export interface ButtonGroupFieldModel extends DynamicFieldModel {
4
+ buttons: ButtonModel[];
5
+ }
@@ -1,8 +1,10 @@
1
1
  import { ValidatorFn } from '@angular/forms';
2
+ import { Signal } from '@angular/core';
2
3
  import { TextModel } from '@updevs/sdk';
3
4
  import { RowColumnSize } from '@updevs/components';
4
5
  import { RequiredPermissionsModel } from '@updevs/sdk/security';
5
6
  import { DynamicFieldType } from './enums/dynamic-field.type';
7
+ import { AttachmentRule } from './attachment-rule.model';
6
8
  export interface DynamicFieldModel {
7
9
  type: DynamicFieldType;
8
10
  name: string;
@@ -25,4 +27,18 @@ export interface DynamicFieldModel {
25
27
  labelColSize?: RowColumnSize;
26
28
  validators?: ValidatorFn[];
27
29
  requiredPermissions?: RequiredPermissionsModel;
30
+ /**
31
+ * Cross-field dependencies (optional).
32
+ **/
33
+ attachments?: AttachmentRule[];
34
+ isHidden?: boolean;
35
+ /**
36
+ * Value coming from a parent field when the rule `AttachmentTypeEnum.ParentLoad` is active.
37
+ * `upd-select` can use it to fetch the dependent list.
38
+ */
39
+ parentValue?: any;
40
+ /**
41
+ * A signal to control the visibility of the field.
42
+ */
43
+ isVisible?: Signal<boolean>;
28
44
  }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * How a parent field influences its child.
3
+ **/
4
+ export declare enum AttachmentTypeEnum {
5
+ /**
6
+ * Enable / disable behaviour (default).
7
+ **/
8
+ Disabled = "disabled",
9
+ /**
10
+ * Child waits for the parent to have a value and (re)loads afterwards.
11
+ **/
12
+ ParentLoad = "parentLoad"
13
+ }
@@ -9,5 +9,7 @@ export declare enum DynamicFieldType {
9
9
  RadioGroup = 8,
10
10
  TextArea = 9,
11
11
  FileUpload = 10,
12
- MaskedInput = 11
12
+ MaskedInput = 11,
13
+ Button = 12,
14
+ ButtonGroup = 13
13
15
  }
@@ -1 +1,2 @@
1
+ export * from './attachment-type.enum';
1
2
  export * from './dynamic-field.type';
@@ -1,4 +1,5 @@
1
1
  export * from './enums/public-api';
2
+ export * from './attachment-rule.model';
2
3
  export * from './checkbox-field.model';
3
4
  export * from './checkbox-group-field.model';
4
5
  export * from './dynamic-field.model';
@@ -1,4 +1,4 @@
1
- import { ElementRef, OnInit, EventEmitter } from '@angular/core';
1
+ import { ElementRef, OnInit } from '@angular/core';
2
2
  import { BaseSearchStore, ObservableSearchType } from '@updevs/sdk/stores';
3
3
  import { HorizontalVerticalType } from '@updevs/components';
4
4
  import { ListItem } from '@updevs/components/list';
@@ -7,42 +7,47 @@ import { SelectItem } from '../select-item';
7
7
  import * as i0 from "@angular/core";
8
8
  export declare abstract class BaseSelectComponent extends BaseControl implements OnInit {
9
9
  get wrapperClasses(): "row" | "";
10
- readonly dropdownOpenStatusChange: EventEmitter<boolean>;
11
- componentBox: import("@angular/core").Signal<ElementRef<any> | undefined>;
12
- searchBox: import("@angular/core").Signal<ElementRef<any> | undefined>;
13
- searchBoxChild: import("@angular/core").Signal<ElementRef<any> | undefined>;
14
- list: import("@angular/core").Signal<ElementRef<any> | undefined>;
10
+ readonly componentBox: import("@angular/core").Signal<ElementRef<any> | undefined>;
11
+ readonly searchBox: import("@angular/core").Signal<ElementRef<any> | undefined>;
12
+ readonly searchBoxChild: import("@angular/core").Signal<ElementRef<any> | undefined>;
13
+ readonly list: import("@angular/core").Signal<ElementRef<any> | undefined>;
14
+ readonly dropdownOpenStatusChange: import("@angular/core").OutputEmitterRef<boolean>;
15
15
  /**
16
16
  * Select items.
17
17
  * If provided, the select will be considered static.
18
18
  */
19
- items: import("@angular/core").InputSignal<SelectItem[] | undefined>;
19
+ readonly items: import("@angular/core").InputSignal<SelectItem[] | undefined>;
20
20
  /**
21
21
  * Store used to load/filter the items.
22
22
  */
23
- store: import("@angular/core").InputSignal<BaseSearchStore<any> | undefined>;
23
+ readonly store: import("@angular/core").InputSignal<BaseSearchStore<any> | undefined>;
24
24
  /**
25
25
  * Observable used to load/filter the items.
26
26
  */
27
- observable: import("@angular/core").InputSignal<ObservableSearchType | undefined>;
27
+ readonly observable: import("@angular/core").InputSignal<ObservableSearchType | undefined>;
28
28
  /**
29
29
  * Name of the property in the object that represents the ID/key of the option.
30
30
  * **Note:** used only for remote data.
31
31
  */
32
- itemKey: import("@angular/core").InputSignal<string | undefined>;
32
+ readonly itemKey: import("@angular/core").InputSignal<string | undefined>;
33
33
  /**
34
34
  * Name of the property in the object that represents the value/description of the option.
35
35
  * **Note:** used only for remote data.
36
36
  */
37
- itemValue: import("@angular/core").InputSignal<string | undefined>;
37
+ readonly itemValue: import("@angular/core").InputSignal<string | undefined>;
38
38
  /**
39
39
  * Maximum height of the dropdown.
40
40
  */
41
- dropdownMaxHeight: import("@angular/core").InputSignal<number>;
42
- typeaheadDebounce: import("@angular/core").InputSignal<number>;
43
- shouldAutoSearch: import("@angular/core").InputSignal<boolean>;
44
- shouldCloseOnOutsideClick: import("@angular/core").InputSignal<boolean>;
45
- layout: import("@angular/core").InputSignal<HorizontalVerticalType>;
41
+ readonly dropdownMaxHeight: import("@angular/core").InputSignal<number>;
42
+ readonly typeaheadDebounce: import("@angular/core").InputSignal<number>;
43
+ readonly shouldAutoSearch: import("@angular/core").InputSignal<boolean>;
44
+ readonly shouldCloseOnOutsideClick: import("@angular/core").InputSignal<boolean>;
45
+ readonly layout: import("@angular/core").InputSignal<HorizontalVerticalType>;
46
+ /**
47
+ * Value coming from a parent field when the rule `AttachmentTypeEnum.ParentLoad` is active.
48
+ * `upd-select` can use it to fetch the dependent list.
49
+ */
50
+ readonly parentValue: import("@angular/core").InputSignal<unknown>;
46
51
  layoutClasses: import("@angular/core").Signal<string[]>;
47
52
  isLoading: boolean;
48
53
  localItems: SelectItem[];
@@ -56,6 +61,7 @@ export declare abstract class BaseSelectComponent extends BaseControl implements
56
61
  private hasExternalList;
57
62
  private _isDropdownOpen;
58
63
  private hostWrapperClasses;
64
+ private previousParentValue?;
59
65
  private readonly searchInputSubject;
60
66
  private readonly renderer;
61
67
  private readonly ngZone;
@@ -74,5 +80,5 @@ export declare abstract class BaseSelectComponent extends BaseControl implements
74
80
  abstract clearSelection(): void;
75
81
  abstract onSelectItem(item: ListItem): void;
76
82
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseSelectComponent, never>;
77
- static ɵdir: i0.ɵɵDirectiveDeclaration<BaseSelectComponent, never, never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "store": { "alias": "store"; "required": false; "isSignal": true; }; "observable": { "alias": "observable"; "required": false; "isSignal": true; }; "itemKey": { "alias": "itemKey"; "required": false; "isSignal": true; }; "itemValue": { "alias": "itemValue"; "required": false; "isSignal": true; }; "dropdownMaxHeight": { "alias": "dropdownMaxHeight"; "required": false; "isSignal": true; }; "typeaheadDebounce": { "alias": "typeaheadDebounce"; "required": false; "isSignal": true; }; "shouldAutoSearch": { "alias": "shouldAutoSearch"; "required": false; "isSignal": true; }; "shouldCloseOnOutsideClick": { "alias": "shouldCloseOnOutsideClick"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; }, { "dropdownOpenStatusChange": "dropdownOpenStatusChange"; }, never, never, false, never>;
83
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BaseSelectComponent, never, never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "store": { "alias": "store"; "required": false; "isSignal": true; }; "observable": { "alias": "observable"; "required": false; "isSignal": true; }; "itemKey": { "alias": "itemKey"; "required": false; "isSignal": true; }; "itemValue": { "alias": "itemValue"; "required": false; "isSignal": true; }; "dropdownMaxHeight": { "alias": "dropdownMaxHeight"; "required": false; "isSignal": true; }; "typeaheadDebounce": { "alias": "typeaheadDebounce"; "required": false; "isSignal": true; }; "shouldAutoSearch": { "alias": "shouldAutoSearch"; "required": false; "isSignal": true; }; "shouldCloseOnOutsideClick": { "alias": "shouldCloseOnOutsideClick"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "parentValue": { "alias": "parentValue"; "required": false; "isSignal": true; }; }, { "dropdownOpenStatusChange": "dropdownOpenStatusChange"; }, never, never, false, never>;
78
84
  }
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@updevs/components",
3
- "version": "1.0.0-alpha.53",
3
+ "version": "1.0.0-alpha.55",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.0.1 || ^19.0.0",
6
6
  "@angular/core": "^18.0.1 || ^19.0.0",
7
7
  "@jsverse/transloco": "^7.4.2",
8
8
  "@jsverse/transloco-messageformat": "^7.0.1",
9
9
  "@updevs/icons": "^1.0.9",
10
- "@updevs/sdk": "^1.0.0-alpha.43"
10
+ "@updevs/sdk": "^1.0.0-alpha.44"
11
11
  },
12
12
  "dependencies": {
13
13
  "tslib": "^2.3.0"
@@ -28,6 +28,12 @@
28
28
  "esm": "./esm2022/updevs-components.mjs",
29
29
  "default": "./fesm2022/updevs-components.mjs"
30
30
  },
31
+ "./badge": {
32
+ "types": "./badge/index.d.ts",
33
+ "esm2022": "./esm2022/badge/updevs-components-badge.mjs",
34
+ "esm": "./esm2022/badge/updevs-components-badge.mjs",
35
+ "default": "./fesm2022/updevs-components-badge.mjs"
36
+ },
31
37
  "./button": {
32
38
  "types": "./button/index.d.ts",
33
39
  "esm2022": "./esm2022/button/updevs-components-button.mjs",
@@ -40,11 +46,17 @@
40
46
  "esm": "./esm2022/card/updevs-components-card.mjs",
41
47
  "default": "./fesm2022/updevs-components-card.mjs"
42
48
  },
43
- "./badge": {
44
- "types": "./badge/index.d.ts",
45
- "esm2022": "./esm2022/badge/updevs-components-badge.mjs",
46
- "esm": "./esm2022/badge/updevs-components-badge.mjs",
47
- "default": "./fesm2022/updevs-components-badge.mjs"
49
+ "./calendar": {
50
+ "types": "./calendar/index.d.ts",
51
+ "esm2022": "./esm2022/calendar/updevs-components-calendar.mjs",
52
+ "esm": "./esm2022/calendar/updevs-components-calendar.mjs",
53
+ "default": "./fesm2022/updevs-components-calendar.mjs"
54
+ },
55
+ "./drag-and-drop": {
56
+ "types": "./drag-and-drop/index.d.ts",
57
+ "esm2022": "./esm2022/drag-and-drop/updevs-components-drag-and-drop.mjs",
58
+ "esm": "./esm2022/drag-and-drop/updevs-components-drag-and-drop.mjs",
59
+ "default": "./fesm2022/updevs-components-drag-and-drop.mjs"
48
60
  },
49
61
  "./dropdown": {
50
62
  "types": "./dropdown/index.d.ts",
@@ -58,18 +70,6 @@
58
70
  "esm": "./esm2022/form/updevs-components-form.mjs",
59
71
  "default": "./fesm2022/updevs-components-form.mjs"
60
72
  },
61
- "./calendar": {
62
- "types": "./calendar/index.d.ts",
63
- "esm2022": "./esm2022/calendar/updevs-components-calendar.mjs",
64
- "esm": "./esm2022/calendar/updevs-components-calendar.mjs",
65
- "default": "./fesm2022/updevs-components-calendar.mjs"
66
- },
67
- "./drag-and-drop": {
68
- "types": "./drag-and-drop/index.d.ts",
69
- "esm2022": "./esm2022/drag-and-drop/updevs-components-drag-and-drop.mjs",
70
- "esm": "./esm2022/drag-and-drop/updevs-components-drag-and-drop.mjs",
71
- "default": "./fesm2022/updevs-components-drag-and-drop.mjs"
72
- },
73
73
  "./layout": {
74
74
  "types": "./layout/index.d.ts",
75
75
  "esm2022": "./esm2022/layout/updevs-components-layout.mjs",
@@ -142,18 +142,18 @@
142
142
  "esm": "./esm2022/form-controls/file-upload/updevs-components-form-controls-file-upload.mjs",
143
143
  "default": "./fesm2022/updevs-components-form-controls-file-upload.mjs"
144
144
  },
145
- "./form-controls/input": {
146
- "types": "./form-controls/input/index.d.ts",
147
- "esm2022": "./esm2022/form-controls/input/updevs-components-form-controls-input.mjs",
148
- "esm": "./esm2022/form-controls/input/updevs-components-form-controls-input.mjs",
149
- "default": "./fesm2022/updevs-components-form-controls-input.mjs"
150
- },
151
145
  "./form-controls/radio": {
152
146
  "types": "./form-controls/radio/index.d.ts",
153
147
  "esm2022": "./esm2022/form-controls/radio/updevs-components-form-controls-radio.mjs",
154
148
  "esm": "./esm2022/form-controls/radio/updevs-components-form-controls-radio.mjs",
155
149
  "default": "./fesm2022/updevs-components-form-controls-radio.mjs"
156
150
  },
151
+ "./form-controls/input": {
152
+ "types": "./form-controls/input/index.d.ts",
153
+ "esm2022": "./esm2022/form-controls/input/updevs-components-form-controls-input.mjs",
154
+ "esm": "./esm2022/form-controls/input/updevs-components-form-controls-input.mjs",
155
+ "default": "./fesm2022/updevs-components-form-controls-input.mjs"
156
+ },
157
157
  "./form-controls/select": {
158
158
  "types": "./form-controls/select/index.d.ts",
159
159
  "esm2022": "./esm2022/form-controls/select/updevs-components-form-controls-select.mjs",