ui-core-abv 0.6.74 → 0.6.76
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/fesm2022/ui-core-abv.mjs +101 -7
- package/fesm2022/ui-core-abv.mjs.map +1 -1
- package/lib/components/dynamic-form/form/dynamic-form.component.d.ts +9 -2
- package/lib/components/dynamic-form/form.models.d.ts +1 -0
- package/lib/components/user-formbuilder/block-editor/field-editor/field-editor.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-core-abv.mjs","sources":["../../../projects/ui-core/src/lib/components/button/button.component.ts","../../../projects/ui-core/src/lib/components/button/button.component.html","../../../projects/ui-core/src/lib/components/dynamic-form/base-value-accessot.ts","../../../projects/ui-core/src/lib/components/inputs/input-wrapper/input-wrapper.component.ts","../../../projects/ui-core/src/lib/components/inputs/input-wrapper/input-wrapper.component.html","../../../projects/ui-core/src/lib/components/inputs/checkbox/checkbox.component.ts","../../../projects/ui-core/src/lib/components/inputs/checkbox/checkbox.component.html","../../../projects/ui-core/src/lib/components/inputs/toggle-button/toggle-button.component.ts","../../../projects/ui-core/src/lib/components/inputs/toggle-button/toggle-button.component.html","../../../projects/ui-core/src/lib/components/skeleton-loader/skeleton-loader.component.ts","../../../projects/ui-core/src/lib/components/skeleton-loader/skeleton-loader.component.html","../../../projects/ui-core/src/lib/translate/dictionary.en.ts","../../../projects/ui-core/src/lib/translate/dictionary.es.ts","../../../projects/ui-core/src/lib/services/translate.service.ts","../../../projects/ui-core/src/lib/pipes/translate.pipe.ts","../../../projects/ui-core/src/lib/components/inputs/date-picker/date-picker.component.ts","../../../projects/ui-core/src/lib/components/inputs/date-picker/date-picker.component.html","../../../projects/ui-core/src/lib/components/push-alerts/alert.helpers.ts","../../../projects/ui-core/src/lib/services/push-alert.service.ts","../../../projects/ui-core/src/lib/components/inputs/file-input/file-input.component.ts","../../../projects/ui-core/src/lib/components/inputs/file-input/file-input.component.html","../../../projects/ui-core/src/lib/components/inputs/input/input.component.ts","../../../projects/ui-core/src/lib/components/inputs/input/input.component.html","../../../projects/ui-core/src/lib/components/inputs/multy-select/multy-select.component.ts","../../../projects/ui-core/src/lib/components/inputs/multy-select/multy-select.component.html","../../../projects/ui-core/src/lib/components/inputs/phone-input/phone-countries.data.ts","../../../projects/ui-core/src/lib/components/inputs/phone-input/phone-input.component.ts","../../../projects/ui-core/src/lib/components/inputs/phone-input/phone-input.component.html","../../../projects/ui-core/src/lib/animations/fadeAndRise.animation.ts","../../../projects/ui-core/src/lib/components/tooltip/tooltip.component.ts","../../../projects/ui-core/src/lib/components/tooltip/tooltip.component.html","../../../projects/ui-core/src/lib/directives/tool-tip.directive.ts","../../../projects/ui-core/src/lib/components/inputs/uic-searcher/uic-searcher.component.ts","../../../projects/ui-core/src/lib/components/inputs/uic-searcher/uic-searcher.component.html","../../../projects/ui-core/src/lib/components/inputs/select/select.component.ts","../../../projects/ui-core/src/lib/components/inputs/select/select.component.html","../../../projects/ui-core/src/lib/components/inputs/ui-slider/ui-slider.component.ts","../../../projects/ui-core/src/lib/components/inputs/ui-slider/ui-slider.component.html","../../../projects/ui-core/src/lib/components/inputs/ui-radio/ui-radio.component.ts","../../../projects/ui-core/src/lib/components/inputs/ui-radio/ui-radio.component.html","../../../projects/ui-core/src/lib/components/inputs/time-picker/time-picker.component.ts","../../../projects/ui-core/src/lib/components/inputs/time-picker/time-picker.component.html","../../../projects/ui-core/src/lib/components/pool-options/pool-options.component.ts","../../../projects/ui-core/src/lib/components/pool-options/pool-options.component.html","../../../projects/ui-core/src/lib/directives/textarea-autoresize.directive.ts","../../../projects/ui-core/src/lib/directives/textarea-autoresize-max-rows.directive.ts","../../../projects/ui-core/src/lib/directives/textarea-autoresize-min-rows.directive.ts","../../../projects/ui-core/src/lib/components/dynamic-form/form-state.service.ts","../../../projects/ui-core/src/lib/components/dynamic-form/form/dynamic-form.component.ts","../../../projects/ui-core/src/lib/components/dynamic-form/form/dynamic-form.component.html","../../../projects/ui-core/src/lib/components/dynamic-form/form-wrapper/form-wrapper.component.ts","../../../projects/ui-core/src/lib/components/dynamic-form/form-wrapper/form-wrapper.component.html","../../../projects/ui-core/src/lib/components/dynamic-form/steps-form/step-tabs/step-tabs.component.ts","../../../projects/ui-core/src/lib/components/dynamic-form/steps-form/step-tabs/step-tabs.component.html","../../../projects/ui-core/src/lib/components/dynamic-form/steps-form/steps-form.component.ts","../../../projects/ui-core/src/lib/components/dynamic-form/steps-form/steps-form.component.html","../../../projects/ui-core/src/lib/components/inputs/multy-searcher/multy-searcher.component.ts","../../../projects/ui-core/src/lib/components/inputs/multy-searcher/multy-searcher.component.html","../../../projects/ui-core/src/lib/components/dropdown-container/dropdown-container.component.ts","../../../projects/ui-core/src/lib/components/dropdown-container/dropdown-container.component.html","../../../projects/ui-core/src/lib/components/dropdown-container/dropdown-close.directive.ts","../../../projects/ui-core/src/lib/components/table/table-searcher/table-searcher.component.ts","../../../projects/ui-core/src/lib/components/table/table-searcher/table-searcher.component.html","../../../projects/ui-core/src/lib/components/table/table-pagination/table-pagination.component.ts","../../../projects/ui-core/src/lib/components/table/table-pagination/table-pagination.component.html","../../../projects/ui-core/src/lib/animations/highlightRow.animation.ts","../../../projects/ui-core/src/lib/animations/animatedRow.animation.ts","../../../projects/ui-core/src/lib/components/uic-action-button/uic-action-button.component.ts","../../../projects/ui-core/src/lib/components/uic-action-button/uic-action-button.component.html","../../../projects/ui-core/src/lib/components/table/table-list/table-list.component.ts","../../../projects/ui-core/src/lib/components/table/table-list/table-list.component.html","../../../projects/ui-core/src/lib/pipes/name-inits.pipe.ts","../../../projects/ui-core/src/lib/components/table/table-user/table-user.component.ts","../../../projects/ui-core/src/lib/components/table/table-user/table-user.component.html","../../../projects/ui-core/src/lib/components/status-label/status-label.component.ts","../../../projects/ui-core/src/lib/components/status-label/status-label.component.html","../../../projects/ui-core/src/lib/services/modal.constant.ts","../../../projects/ui-core/src/lib/services/modaRef.ts","../../../projects/ui-core/src/lib/components/tiny-alert/tiny-alert.component.ts","../../../projects/ui-core/src/lib/components/tiny-alert/tiny-alert.component.html","../../../projects/ui-core/src/lib/animations/pushTop.animation.ts","../../../projects/ui-core/src/lib/components/modal/floating-modal/modal.component.ts","../../../projects/ui-core/src/lib/components/modal/floating-modal/modal.component.html","../../../projects/ui-core/src/lib/animations/sideModal.animation.ts","../../../projects/ui-core/src/lib/components/modal/side-modal/side-modal.component.ts","../../../projects/ui-core/src/lib/components/modal/side-modal/side-modal.component.html","../../../projects/ui-core/src/lib/services/modal.service.ts","../../../projects/ui-core/src/lib/components/push-alerts/tynyalert.helpers.ts","../../../projects/ui-core/src/lib/services/tiny-alert.service.ts","../../../projects/ui-core/src/lib/components/item-value/item-value.component.ts","../../../projects/ui-core/src/lib/components/item-value/item-value.component.html","../../../projects/ui-core/src/lib/components/uic-portlet-card/uic-portlet-card.component.ts","../../../projects/ui-core/src/lib/components/uic-portlet-card/uic-portlet-card.component.html","../../../projects/ui-core/src/lib/components/short-table/short-table.component.ts","../../../projects/ui-core/src/lib/components/short-table/short-table.component.html","../../../projects/ui-core/src/lib/helpers.ts","../../../projects/ui-core/src/lib/components/table/table.component.ts","../../../projects/ui-core/src/lib/components/table/table.component.html","../../../projects/ui-core/src/lib/components/table/table.models.ts","../../../projects/ui-core/src/lib/components/skeleton-cards/skeleton-cards.component.ts","../../../projects/ui-core/src/lib/components/skeleton-cards/skeleton-cards.component.html","../../../projects/ui-core/src/lib/components/push-alerts/alert/alert.component.ts","../../../projects/ui-core/src/lib/components/push-alerts/alert/alert.component.html","../../../projects/ui-core/src/lib/components/push-alerts/alert-container/alert-container.component.ts","../../../projects/ui-core/src/lib/components/push-alerts/alert-container/alert-container.component.html","../../../projects/ui-core/src/lib/components/signature-pad/signature-pad.component.ts","../../../projects/ui-core/src/lib/components/signature-pad/signature-pad.component.html","../../../projects/ui-core/src/lib/components/kpi-card/kpi-card.component.ts","../../../projects/ui-core/src/lib/components/kpi-card/kpi-card.component.html","../../../projects/ui-core/src/lib/components/tabs-button/tabs-button.component.ts","../../../projects/ui-core/src/lib/components/tabs-button/tabs-button.component.html","../../../projects/ui-core/src/lib/components/work-panel/work-panel.component.ts","../../../projects/ui-core/src/lib/components/work-panel/work-panel.component.html","../../../projects/ui-core/src/lib/components/overlay-card/overlay-card.component.ts","../../../projects/ui-core/src/lib/components/overlay-card/overlay-card.component.html","../../../projects/ui-core/src/lib/components/accordion/accordion.component.ts","../../../projects/ui-core/src/lib/components/accordion/accordion.component.html","../../../projects/ui-core/src/lib/components/tree-admin/tree-admin.component.ts","../../../projects/ui-core/src/lib/components/tree-admin/tree-admin.component.html","../../../projects/ui-core/src/lib/components/editable-table/editable-table.component.ts","../../../projects/ui-core/src/lib/components/editable-table/editable-table.component.html","../../../projects/ui-core/src/lib/components/excel-table/excel-table.component.ts","../../../projects/ui-core/src/lib/components/excel-table/excel-table.component.html","../../../projects/ui-core/src/lib/components/tag-selector/tag-selector.component.ts","../../../projects/ui-core/src/lib/components/tag-selector/tag-selector.component.html","../../../projects/ui-core/src/lib/components/progress-bar/progress-bar.component.ts","../../../projects/ui-core/src/lib/components/progress-bar/progress-bar.component.html","../../../projects/ui-core/src/lib/animations/simpleFade.animation.ts","../../../projects/ui-core/src/lib/components/dynamic-form/form.models.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/form-preview/form-preview.component.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/form-preview/form-preview.component.html","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/field-editor/field-options-editor/field-options-editor.component.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/field-editor/field-options-editor/field-options-editor.component.html","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/field-editor/field-editor.component.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/field-editor/field-editor.component.html","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/field-type-selector/field-type-selector.component.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/field-type-selector/field-type-selector.component.html","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/block-editor.component.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/block-editor.component.html","../../../projects/ui-core/src/lib/components/user-formbuilder/user-formbuilder.component.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/user-formbuilder.component.html","../../../projects/ui-core/src/lib/components/rule-builder/rule-definirion/rule-definirion.component.ts","../../../projects/ui-core/src/lib/components/rule-builder/rule-definirion/rule-definirion.component.html","../../../projects/ui-core/src/lib/components/rule-builder/rule-builder.component.ts","../../../projects/ui-core/src/lib/components/rule-builder/rule-builder.component.html","../../../projects/ui-core/src/lib/pipes/first-capital.pipe.ts","../../../projects/ui-core/src/public-api.ts","../../../projects/ui-core/src/ui-core-abv.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { Component, Input, SimpleChange, SimpleChanges } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ui-button',\r\n imports: [CommonModule],\r\n templateUrl: './button.component.html',\r\n styleUrl: './button.component.scss'\r\n})\r\nexport class UicButtonComponent {\r\n @Input() text='';\r\n @Input() icon='';\r\n @Input() rightIcon='';\r\n @Input() iconOnly=false;\r\n @Input() disabled=false;\r\n @Input() loading=false; \r\n @Input() size: ButtonSize = 'm';\r\n @Input() type: ButtonType = 'filled'; \r\n @Input() color:ButtonColor = 'primary';\r\n \r\n buttonTypeClass = \"\";\r\n \r\n ngOnInit(){\r\n this.buttonTypeClass = 'btn-' + this.type + ' btn-' + this.color + \"-\" + this.type;\r\n }\r\n\r\n ngOnChange(sc:SimpleChanges){\r\n if ( sc['type'] ){\r\n this.buttonTypeClass = 'btn-' + this.type + ' btn-' + this.color + \"-\" + this.type;\r\n }\r\n }\r\n}\r\nexport type ButtonColor = 'primary'|'secondary'|'red'|'green'|'blue'|'yellow' | 'black' | 'grey' | 'white';\r\nexport type ButtonSize = 't' | 's'|'m'|'l'| 'g';\r\nexport type ButtonType = 'filled' | 'bordered' | 'ghost';","<button\r\n type=\"button\"\r\n [class]=\"'main-btn ' + buttonTypeClass\"\r\n [disabled]=\"disabled\"\r\n [ngClass]=\"{\r\n 'btn-tiny' :size=='t',\r\n 'btn-small' :size=='s', \r\n 'btn-medium' :size=='m',\r\n 'btn-large' :size=='l', \r\n 'btn-gigant' :size=='g'\r\n }\" >\r\n \r\n @if (icon!='' && !loading ) {\r\n <i class=\"{{icon}}\"></i>\r\n }\r\n @if (loading) {\r\n <div class=\"uic-loader-container\"> <div class=\"uic-loader\"></div> </div>\r\n }\r\n @if (!iconOnly) {\r\n <div class=\"btn-text\" [class.norighticon]=\"rightIcon==''\" [class.noicon]=\"icon==''\">\r\n {{text}}\r\n <ng-content ></ng-content>\r\n </div>\r\n }\r\n @if (rightIcon!='' ) {\r\n <i class=\"{{rightIcon}}\"></i>\r\n }\r\n</button>","import { ControlValueAccessor } from '@angular/forms';\r\nimport { Directive, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nexport function createValueAccessor<T>() {\r\n @Directive()\r\n abstract class BaseValueAccessor implements ControlValueAccessor {\r\n @Input() value!: T;\r\n @Output() valueChange = new EventEmitter<T>();\r\n\r\n onChange: (value: T) => void = () => {};\r\n onTouched: () => void = () => {};\r\n\r\n writeValue(obj: T): void {\r\n this.value = obj;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n (this as any).disabled = isDisabled;\r\n }\r\n\r\n notifyChange(value: T) {\r\n this.value = value;\r\n this.valueChange.emit(value);\r\n this.onChange(value);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n return BaseValueAccessor;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { ButtonColor } from '../../button/button.component';\r\n\r\n@Component({\r\n selector: 'ui-input-wrapper',\r\n imports: [CommonModule],\r\n templateUrl: './input-wrapper.component.html',\r\n styleUrl: '../input.component.scss'\r\n})\r\nexport class InputWrapperComponent {\r\n @Input() icon = ''; \r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n @Input() disabled = false;\r\n}\r\n","<div class=\"input-wrapper\">\r\n @if (icon) {\r\n <i class=\"input-externalicon f-{{iconColor}} {{icon}}\"></i>\r\n }\r\n <div class=\"input-elements\" [style]=\"icon?'max-width: calc(100% - 34px);':''\">\r\n \r\n @if (label) {\r\n <div class=\"label inputlabel\" [class.font-error]=\"error\">\r\n {{label!='_'?label:''}} \r\n </div>\r\n }\r\n <ng-content></ng-content>\r\n @if (error) {\r\n <div class=\"fakeinput-alert f-red\">{{error}}</div>\r\n }\r\n @if (tip) {\r\n <div class=\"fakeinput-alert tip\">{{tip}}</div>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, forwardRef, Input } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { ButtonColor } from '../../button/button.component';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\n\r\nconst base = createValueAccessor<boolean>();\r\n\r\n@Component({\r\n selector: 'ui-checkbox',\r\n imports: [InputWrapperComponent],\r\n templateUrl: './checkbox.component.html',\r\n styleUrls: ['./checkbox.component.scss','../input.component.scss'],\r\n providers:[\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicCheckboxComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicCheckboxComponent extends base{\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() label = '';\r\n @Input() tip = '';\r\n @Input() type: 'checkbox'|'switch' = 'checkbox';\r\n @Input() placeholder = '';\r\n @Input() loading = false;\r\n @Input() noPadding = false;\r\n \r\n @Input() disabled = false;\r\n\r\n toggle() {\r\n if (!this.disabled && !this.loading){\r\n this.notifyChange(!this.value);\r\n }\r\n }\r\n \r\n}\r\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\"\r\n>\r\n <div [class.check-form-container]=\"!noPadding\">\r\n <div (click)=\"toggle()\" class=\"check-wrapper\">\r\n @if (type=='checkbox') {\r\n <button\r\n type=\"button\"\r\n class=\"checkbox\"\r\n [disabled]=\"disabled\"\r\n [class.checked]=\"value\"\r\n [class.placeholder-space]=\"placeholder!=''\"\r\n [disabled]=\"disabled\"\r\n (keydown.enter)=\"toggle()\"\r\n (keydown.space)=\"toggle()\"\r\n >\r\n <span class=\"icon\">\r\n @if (value) {\r\n ✔\r\n }@else {\r\n −\r\n }\r\n </span>\r\n </button>\r\n }@else{\r\n <button\r\n type=\"button\"\r\n class=\"toggle\"\r\n [class.checked]=\"value\"\r\n [disabled]=\"disabled\"\r\n >\r\n <span class=\"thumb\"></span>\r\n </button>\r\n }\r\n @if (placeholder) {\r\n <span class=\"check-placeholder\">{{placeholder}}</span>\r\n }\r\n \r\n <ng-content></ng-content> \r\n </div>\r\n </div>\r\n</ui-input-wrapper>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ui-switch',\r\n imports: [],\r\n templateUrl: './toggle-button.component.html',\r\n styleUrls: ['./toggle-button.component.scss','../input.component.scss']\r\n})\r\nexport class UicSwichComponent {\r\n @Input() checked = false;\r\n @Output() checkedChange = new EventEmitter<boolean>();\r\n @Input() disabled = false;\r\n @Input() placeholder = '';\r\n @Input() label = '';\r\n\r\n \r\n\r\n toggle() {\r\n if (this.disabled) return;\r\n this.checked = !this.checked;\r\n this.checkedChange.emit(this.checked);\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n class=\"toggle\"\r\n [class.checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n (click)=\"toggle()\"\r\n>\r\n <span class=\"thumb\"></span>\r\n</button>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ui-skeleton-loader',\r\n imports: [ CommonModule ],\r\n templateUrl: './skeleton-loader.component.html',\r\n styleUrl: './skeleton-loader.component.scss'\r\n})\r\nexport class UicSkeletonLoaderComponent {\r\n @Input() inputs: number = 3; \r\n @Input() cols: number = 3; \r\n\r\n get gridStyle() {\r\n return {\r\n 'grid-template-columns': `repeat(${this.cols}, 1fr)`\r\n };\r\n }\r\n}\r\n","<div class=\"skeleton-form\" [ngStyle]=\"gridStyle\">\r\n @for (r of [].constructor(inputs); track $index) {\r\n <div class=\"skeleton-input-container\">\r\n <div class=\"skeleton-gradient skeleton-label\"></div>\r\n <div class=\"skeleton-gradient skeleton-input\"></div>\r\n </div>\r\n }\r\n</div>","export const DICTIONARY_EN = {\n common: {\n open: 'Open',\n close: 'Close',\n save: 'Save',\n clear: 'Clear',\n cancel: 'Cancel',\n apply: 'Apply',\n continue: 'Continue',\n back: 'Back',\n next: 'Next',\n send: 'Send',\n today: 'Today',\n search: 'Search',\n search_ellipsis: 'Search...',\n all: 'All',\n select: 'Select',\n selected: 'Selected',\n detail: 'Detail',\n },\n table: {\n search_label: 'Search',\n search_placeholder: 'Search',\n empty: 'No items found',\n next_short: 'Next',\n previous_short: 'Prev',\n },\n select: {\n non_selected: '- Select -',\n multy_non_selected: '-- Select --',\n multy_all_selected: '-- All --',\n none: '- None -',\n empty: 'No items to show',\n without_options: 'No options available',\n pending_text: 'PENDING TEXT',\n search_placeholder: 'Search...',\n },\n tree: {\n search_label: 'Search subcategories:',\n search_placeholder: 'Search...',\n empty: 'No subcategories',\n duplicate_name: 'Subcategory already exists',\n without_children: 'No children',\n },\n tag_selector: {\n add_tag: 'Add tag',\n predefined_title: 'Predefined tags',\n new_tag_title: 'New tag',\n },\n phone_input: {\n placeholder: 'Enter a number',\n search_country: 'Search country or code',\n clear_search: 'Clear search',\n no_results: 'No results found',\n aria_country_code: '{{country}} code {{dialCode}}',\n },\n time_picker: {\n placeholder: 'hh:mm am/pm',\n },\n excel_table: {\n load_file: 'Upload excel',\n empty_message: 'No data to show',\n clear_file: 'Clear',\n see_more: 'See more',\n counter_text: 'Viewing {{shown}} items of {{total}} total',\n },\n editable_table: {\n add_row_above: 'Add row above',\n add_row_below: 'Add row below',\n delete_row: 'Delete row',\n add_column: 'Add column',\n delete_column: 'Delete column',\n delete_row_with_data_warning: 'This row has data. If you delete it, all values will be lost.',\n delete_column_with_data_warning: 'The column \"{{column_name}}\" has data. If you delete it, these values will be lost.',\n save_or_discard_column: 'Do you want to save this new column or delete it?',\n save_column: 'Save column',\n save: 'Save',\n delete: 'Delete',\n column_name_must_be_unique: 'Column name must be unique',\n },\n rule_builder: {\n title: 'Rule',\n add_rule: 'Condition',\n add_rule_tip: 'Add condition',\n add_group: 'Group',\n add_group_tip: 'Add group',\n reset: 'Reset',\n reset_tip: 'Discard unsaved changes',\n save: 'Save rule',\n save_tip: 'Save built rule',\n delete_rule_tip: 'Delete condition',\n delete_group_tip: 'Delete group',\n toggle_operator_tip: 'Click to change operator',\n no_rules: 'No conditions added',\n rules_management: 'Select condition',\n edit: 'Edit rule',\n edit_tip: 'Edit rule',\n edit_condition_tip: 'Click to edit condition',\n select_condition: '- select condition -',\n operators: {\n and: 'AND',\n or: 'OR',\n },\n validation: {\n single_condition_not_allowed: 'Rules cannot be created with a single condition',\n },\n definition: {\n cancel_and_back: 'Cancel and go back',\n create_and_select: 'Create and select condition',\n search_placeholder: 'Search condition',\n new_rule: 'New condition',\n no_results: 'No conditions found',\n previous: 'Previous',\n next: 'Next',\n form: {\n description: 'Description',\n field: 'Field',\n operator: 'Operator',\n value: 'Value',\n },\n },\n },\n step_form: {\n back: 'Back',\n next: 'Next',\n submit: 'Send',\n },\n work_panel: {\n minimize: 'Minimize',\n expand: 'Expand',\n reduce: 'Reduce',\n close: 'Close',\n },\n modal: {\n cancel: 'Cancel',\n next: 'Next',\n },\n searcher: {\n clear_tip: 'Clear',\n empty: 'No items to show',\n without_selected: 'No selected items',\n },\n alerts: {\n success_title: 'Operation successful',\n error_title: 'An error occurred',\n delete_title: 'Action confirmation',\n delete_confirm: 'Yes, delete',\n warning_title: 'Alert!',\n },\n voice: {\n browser_incompatibility_title: 'Browser incompatibility',\n browser_incompatibility_message: 'This browser does not support this feature.',\n voice_error: 'Error while starting voice dictation',\n },\n form_builder: {\n block_title: 'Title',\n add_new_field: 'Add new field',\n block_subtitle: 'Subtitle',\n add_block: 'Add block',\n delete_block: 'Delete block', \n preview_form: 'Preview',\n submit_form: 'Submit',\n select_field_to_edit: 'Select a field to edit its properties',\n no_fields: 'Add fields to your form',\n base: {\n name: 'Key',\n required: 'Required',\n icon: 'Icon',\n label: 'Label',\n tip: 'Hint',\n tip_tip: 'Shown below',\n new_line: 'New line',\n col_span: 'Column span',\n col_span_tip: 'How many columns the field occupies',\n },\n extra: {\n iconColor: 'Icon color',\n tooltip: 'Tooltip',\n internalIcon: 'Internal icon',\n internalIconColor: 'Internal icon color',\n internalColorScale: 'Internal color scale',\n internalColorScale_tip: 'Values for rendering the scale',\n internalColorScaleOrder: 'Color scale order',\n internalColorScaleOrder_tip: 'Ascending or descending',\n placeholder: 'Placeholder',\n placeholder_tip: 'Default field text',\n minLength: 'Minimum length',\n minLength_tip: 'Least allowed chars',\n maxLength: 'Maximum length',\n maxLength_tip: 'Most allowed chars',\n showCounter: 'Show counter',\n showCounter_tip: 'Show typed character count',\n voiceToTextEnabled: 'Enable voice to text',\n voiceToTextEnabled_tip: 'Enable speech input',\n textareaResize: 'Autosize textarea',\n textareaResize_tip: 'Grow or shrink by content',\n resizeMinRows: 'Minimum rows',\n resizeMinRows_tip: 'Initial minimum rows',\n resizeMaxRows: 'Maximum rows',\n resizeMaxRows_tip: 'Initial maximum rows',\n min: 'Minimum',\n min_tip: 'Smallest accepted value',\n max: 'Maximum',\n max_tip: 'Largest accepted value',\n step: 'Step',\n step_tip: 'Increment between values',\n sliderInterval: 'Slider interval',\n sliderInterval_tip: 'Spacing between marks',\n sliderMarks: 'Slider marks',\n sliderMarks_tip: 'Number of scale marks',\n monthMode: 'Month mode',\n monthMode_tip: 'Select a month date',\n monthDay: 'Month day',\n monthDay_tip: 'Pick first or last day',\n minDate: 'Minimum date',\n minDate_tip: 'Earliest allowed date',\n maxDate: 'Maximum date',\n maxDate_tip: 'Latest allowed date',\n timeInterval: 'Time interval',\n timeInterval_tip: 'Minute step',\n fileTypes: 'File types',\n fileTypes_tip: 'Comma-separated extensions',\n poolEnabledListView: 'Enable list view',\n poolEnabledListView_tip: 'Show pool in list mode',\n poolTitle: 'List title',\n poolTitle_tip: 'Title for list header',\n options: 'Options',\n options_tip: 'JSON list: [{id:1,text:\"A\"}]',\n multyEnabled: 'Multiple',\n multyEnabled_tip: 'Allow multi-select',\n searchFn: 'Search function',\n searchFn_tip: 'Function called to search',\n searchDisplayFn: 'Display function',\n searchDisplayFn_tip: 'Function to render option text',\n searchIsEnabledFn: 'Enabled function',\n searchIsEnabledFn_tip: 'Function to enable or disable option',\n pattern: 'Pattern',\n pattern_tip: 'Regular expression in text',\n iaValidation: 'IA Validation',\n iaValidationPrompt: 'IA Validation Prompt',\n searchApi: 'Search API',\n searchApi_tip: 'URL to fetch search options',\n optionsSourceKey: 'Options source',\n optionsSourceKey_tip: 'Logical key registered by the consuming application',\n optionsSourceIdField: 'Option ID field',\n optionsSourceIdField_tip: 'Path used as the option id. Example: id',\n optionsSourceTextField: 'Option text field',\n optionsSourceTextField_tip: 'Path used as the option text. Example: name',\n optionsSourceTextTemplate: 'Text template',\n optionsSourceTextTemplate_tip: 'Example: {{name}} ({{id}})',\n optionsSourceDependsOn: 'Depends on',\n optionsSourceDependsOn_tip: 'Parent field identifier that triggers reloads',\n optionsSourceParamName: 'Parameter name',\n optionsSourceParamName_tip: 'Name used to send the dependent value',\n selectNullable_tip: 'Allows selecting an empty option',\n selectSearchEnabled_tip: 'Enables search among options',\n selectNullable: 'Allow empty option',\n selectSearchEnabled: 'Enable search',\n },\n options_editor: {\n title: 'Options',\n code_label: 'Code',\n name_label: 'Label',\n code_placeholder: 'ID',\n display_name_placeholder: 'Display name',\n add_option: 'Add option',\n },\n field_editor: {\n dependency_title: 'Dependency',\n dependency_description: 'This field is shown only if the rule is met:',\n add_relation: 'Add relation',\n remove_relation: 'Remove relation',\n basic: 'Basic',\n parent: 'Parent',\n operator: 'Operator',\n value: 'Value',\n expected_value: 'Expected value',\n style: 'Style',\n advanced: 'Advanced',\n duplicate: 'Duplicate',\n delete: 'Delete',\n show_advanced: 'Show advanced',\n hide_advanced: 'Hide advanced',\n },\n validation: {\n duplicate_identifier: 'The identifier \"{{identifier}}\" is used more than once.',\n duplicate_identifier_title: 'Validation error',\n }\n },\n validation: {\n invalid: '{{field}} is invalid.',\n required: '{{field}} is required.',\n min: '{{field}} must be greater than or equal to {{min}}.',\n max: '{{field}} must be less than or equal to {{max}}.',\n minlength: '{{field}} must have at least {{requiredLength}} characters.',\n maxlength: '{{field}} cannot exceed {{requiredLength}} characters.',\n pattern: '{{field}} has an invalid format.',\n },\n clipboard: {\n copy_error: 'Could not copy:',\n },\n} as const;\n","export const DICTIONARY_ES = {\n common: {\n open: 'Abrir',\n close: 'Cerrar',\n save: 'Guardar',\n clear: 'Limpiar',\n cancel: 'Cancelar',\n apply: 'Aplicar',\n continue: 'Continuar',\n back: 'Volver',\n next: 'Siguiente',\n send: 'Enviar',\n today: 'Hoy',\n search: 'Buscar',\n search_ellipsis: 'Buscar...',\n all: 'Todos',\n select: 'Seleccionar',\n selected: 'Seleccionados',\n detail: 'Detalle',\n },\n table: {\n search_label: 'Buscar',\n search_placeholder: 'Buscar',\n empty: 'No hay elementos',\n next_short: 'Sig.',\n previous_short: 'Ant.',\n },\n select: {\n non_selected: '- Seleccionar -',\n multy_non_selected: '-- Seleccionar --',\n multy_all_selected: '-- Todos --',\n none: '- Ninguno -',\n empty: 'No hay elementos para mostrar',\n without_options: 'Sin opciones disponibles',\n pending_text: 'TEXTO PENDIENTE',\n search_placeholder: 'Buscar...',\n },\n tree: {\n search_label: 'Buscar subcategorias:',\n search_placeholder: 'Buscar...',\n empty: 'Sin subcategorias',\n duplicate_name: 'La subcategoria ya existe',\n without_children: 'Sin hijos',\n },\n tag_selector: {\n add_tag: 'Agregar tag',\n predefined_title: 'Tags predefinidos',\n new_tag_title: 'Nuevo tag',\n },\n phone_input: {\n placeholder: 'Ingresa un numero',\n search_country: 'Buscar pais o codigo',\n clear_search: 'Limpiar busqueda',\n no_results: 'No se encontraron resultados',\n aria_country_code: '{{country}} codigo {{dialCode}}',\n },\n time_picker: {\n placeholder: 'hh:mm am/pm',\n },\n excel_table: {\n load_file: 'Cargar excel',\n clear_file: 'Limpiar',\n empty_message: 'No hay datos para mostrar',\n see_more: 'Ver mas',\n counter_text: 'Viendo {{shown}} elementos de {{total}} totales',\n },\n editable_table: {\n add_row_above: 'Agregar arriba',\n add_row_below: 'Agregar abajo',\n delete_row: 'Eliminar fila',\n add_column: 'Agregar columna',\n delete_column: 'Eliminar columna',\n delete_row_with_data_warning: 'Esta fila tiene datos. Si la eliminas, se perderán todos sus valores.',\n delete_column_with_data_warning: 'La columna \"{{column_name}}\" tiene datos. Si la eliminas, perderás esos valores.',\n save_or_discard_column: '¿Deseas guardar esta nueva columna o eliminarla?',\n save_column: 'Guardar columna',\n save: 'Guardar',\n delete: 'Eliminar',\n column_name_must_be_unique: 'El nombre de la columna debe ser único',\n },\n rule_builder: {\n title: 'Regla',\n add_rule: 'Condición',\n add_rule_tip: 'Agregar condición',\n add_group: 'Grupo',\n add_group_tip: 'Agregar grupo',\n reset: 'Descartar',\n reset_tip: 'Descartar cambios no guardados',\n save: 'Guardar regla',\n save_tip: 'Guardar regla construida',\n delete_rule_tip: 'Eliminar condición',\n delete_group_tip: 'Eliminar grupo',\n toggle_operator_tip: 'Click para cambiar de operador',\n no_rules: 'No hay condiciones agregadas',\n rules_management: 'Seleccionar condición',\n edit: 'Editar regla',\n edit_tip: 'Editar regla',\n edit_condition_tip: 'Click para editar la condición',\n select_condition: '- seleccionar condición -',\n operators: {\n and: 'Y',\n or: 'O',\n },\n validation: {\n single_condition_not_allowed: 'No se pueden crear reglas con una sola condición',\n },\n definition: {\n cancel_and_back: 'Cancelar y volver',\n create_and_select: 'Crear y seleccionar condición',\n search_placeholder: 'Buscar condición',\n new_rule: 'Nueva condición',\n no_results: 'No se encontraron condiciones',\n previous: 'Anterior',\n next: 'Siguiente',\n form: {\n description: 'Descripción',\n field: 'Campo',\n operator: 'Operador',\n value: 'Valor',\n },\n },\n },\n step_form: {\n back: 'Volver',\n next: 'Siguiente',\n submit: 'Enviar',\n },\n work_panel: {\n minimize: 'Minimizar',\n expand: 'Agrandar',\n reduce: 'Reducir',\n close: 'Cerrar',\n },\n modal: {\n cancel: 'Cancelar',\n next: 'Siguiente',\n },\n searcher: {\n clear_tip: 'Limpiar',\n empty: 'No hay elementos para mostrar',\n without_selected: 'Sin elementos seleccionados',\n },\n alerts: {\n success_title: 'Operacion exitosa',\n error_title: 'Se produjo un error',\n delete_title: 'Confirmacion de accion',\n delete_confirm: 'Si, eliminar',\n warning_title: '!Alerta!',\n },\n voice: {\n browser_incompatibility_title: 'Incompatibilidad de navegador',\n browser_incompatibility_message: 'Este navegador no sorporta esta caracteristica.',\n voice_error: 'Error al intentar dictado por voz',\n },\n form_builder: {\n block_title: 'Título',\n add_new_field: 'Agregar nuevo campo',\n block_subtitle: 'Subtítulo',\n add_block: 'Agregar bloque',\n delete_block: 'Eliminar bloque',\n preview_form: 'Vista previa',\n submit_form: 'Guardar',\n select_field_to_edit: 'Selecciona un campo para editar sus propiedades',\n no_fields: 'Añade campos a tu formulario',\n base: {\n name: 'Identificador',\n required: 'Obligatorio',\n icon: 'Ícono externo',\n label: 'Etiqueta de campo',\n tip: 'Sugerencia',\n tip_tip: 'Se muestra debajo',\n new_line: 'Saltar línea',\n col_span: 'Ancho',\n col_span_tip: 'Cuantas columnas ocupa el campo',\n },\n extra: {\n iconColor: 'Color de ícono externo',\n tooltip: 'Información adicional',\n internalIcon: 'Ícono interno',\n internalIconColor: 'Color del ícono interno',\n internalColorScale: 'Escala de color interna',\n internalColorScale_tip: 'Valores para dibujar la escala',\n internalColorScaleOrder: 'Orden de escala de color',\n internalColorScaleOrder_tip: 'Ascendente o descendente',\n placeholder: 'Placeholder',\n placeholder_tip: 'Texto inicial del campo',\n minLength: 'Largo mínimo',\n minLength_tip: 'Cantidad mínima de caracteres',\n maxLength: 'Largo máximo',\n maxLength_tip: 'Cantidad máxima de caracteres',\n showCounter: 'Mostrar contador',\n showCounter_tip: 'Cuenta caracteres ingresados',\n voiceToTextEnabled: 'Habilitar voz a texto',\n voiceToTextEnabled_tip: 'Permite dictado por voz',\n textareaResize: 'Auto ajuste de altura',\n textareaResize_tip: 'Ajusta la altura según contenido',\n resizeMinRows: 'Filas mínimas',\n resizeMinRows_tip: 'Filas mínimas iniciales',\n resizeMaxRows: 'Filas máximas',\n resizeMaxRows_tip: 'Filas máximas iniciales',\n min: 'Mínimo',\n min_tip: 'Valor mínimo permitido',\n max: 'Máximo',\n max_tip: 'Valor máximo permitido',\n step: 'Paso',\n step_tip: 'Incremento entre valores',\n sliderInterval: 'Intervalo del deslizador',\n sliderInterval_tip: 'Espacio entre marcas',\n sliderMarks: 'Marcas del deslizador',\n sliderMarks_tip: 'Cantidad de marcas',\n monthMode: 'Modo mes',\n monthMode_tip: 'Seleccionar fecha por mes',\n monthDay: 'Día del mes',\n monthDay_tip: 'Elegir primer o último día',\n minDate: 'Fecha mínima',\n minDate_tip: 'Fecha mínima permitida',\n maxDate: 'Fecha máxima',\n maxDate_tip: 'Fecha máxima permitida',\n timeInterval: 'Intervalo de hora',\n timeInterval_tip: 'Paso en minutos',\n fileTypes: 'Tipos de archivo',\n fileTypes_tip: 'Extensiones separadas por coma',\n poolEnabledListView: 'Ver lista habilitada',\n poolEnabledListView_tip: 'Mostrar opciones en lista',\n poolTitle: 'Título del listado',\n poolTitle_tip: 'Título del encabezado',\n options: 'Opciones',\n options_tip: 'Formato JSON: [{id:1,text:\"A\"}]',\n multyEnabled: 'Múltiple',\n multyEnabled_tip: 'Permite seleccionar varios ítems',\n searchFn: 'Función de búsqueda',\n searchFn_tip: 'Función para buscar',\n searchDisplayFn: 'Función de texto de opción',\n searchDisplayFn_tip: 'Función para mostrar etiqueta',\n searchIsEnabledFn: 'Función de habilitación',\n searchIsEnabledFn_tip: 'Función para habilitar o deshabilitar opción',\n pattern: 'Patrón',\n pattern_tip: 'Expresión regular en texto',\n searchApi: 'API de búsqueda',\n iaValidation: 'Validación IA',\n iaValidationPrompt: 'Prompt de validación IA',\n searchApi_tip: 'URL para obtener opciones de búsqueda',\n optionsSourceKey: 'Fuente de opciones',\n optionsSourceKey_tip: 'Clave lógica registrada por la aplicación consumidora',\n optionsSourceIdField: 'Campo ID de opción',\n optionsSourceIdField_tip: 'Ruta del valor usado como id. Ejemplo: id',\n optionsSourceTextField: 'Campo texto de opción',\n optionsSourceTextField_tip: 'Ruta del valor usado como texto. Ejemplo: name',\n optionsSourceTextTemplate: 'Plantilla de texto',\n optionsSourceTextTemplate_tip: 'Ejemplo: {{name}} ({{id}})',\n optionsSourceDependsOn: 'Depende de',\n optionsSourceDependsOn_tip: 'Identificador del campo padre que dispara la recarga',\n optionsSourceParamName: 'Nombre del parámetro',\n optionsSourceParamName_tip: 'Nombre con el que se envía el valor dependiente',\n selectNullable_tip: 'Permite seleccionar una opción vacía',\n selectSearchEnabled_tip: 'Habilita búsqueda entre opciones',\n selectNullable: 'Permitir opción vacía',\n selectSearchEnabled: 'Habilitar búsqueda',\n },\n options_editor: {\n title: 'Opciones',\n code_label: 'Código',\n name_label: 'Etiqueta',\n code_placeholder: 'ID',\n display_name_placeholder: 'Nombre para mostrar',\n add_option: 'Nueva opción',\n },\n field_editor: {\n dependency_title: 'Dependencia',\n dependency_description: 'Este campo solo se muestra si se cumple la regla:',\n add_relation: 'Agregar relación',\n remove_relation: 'Eliminar relación',\n basic: 'Básico',\n parent: 'Padre',\n operator: 'Operador',\n value: 'Valor',\n expected_value: 'Valor esperado',\n style: 'Estilo',\n advanced: 'Avanzado',\n duplicate: 'Duplicar',\n delete: 'Eliminar',\n show_advanced: 'Mostrar avanzado',\n hide_advanced: 'Ocultar avanzado',\n },\n validation: {\n duplicate_identifier: 'El identificador \"{{identifier}}\" se está usando más de una vez.',\n duplicate_identifier_title: 'Error de validación',\n }\n },\n validation: {\n invalid: '{{field}} es invalido.',\n required: '{{field}} es obligatorio.',\n min: '{{field}} debe ser mayor o igual a {{min}}.',\n max: '{{field}} debe ser menor o igual a {{max}}.',\n minlength: '{{field}} debe tener al menos {{requiredLength}} caracteres.',\n maxlength: '{{field}} no puede superar {{requiredLength}} caracteres.',\n pattern: '{{field}} no tiene el formato correcto.',\n },\n clipboard: {\n copy_error: 'No se pudo copiar:',\n },\n} as const;\n","import { Inject, Injectable, InjectionToken, Optional, Provider } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { DICTIONARY_EN } from '../translate/dictionary.en';\r\nimport { DICTIONARY_ES } from '../translate/dictionary.es';\r\n\r\nexport type UicLanguage = 'es' | 'en';\r\ntype DictionaryNode = Record<string, unknown>;\r\n\r\nexport interface UicTranslateConfig {\r\n defaultLanguage?: UicLanguage;\r\n}\r\n\r\nexport const UIC_TRANSLATE_CONFIG = new InjectionToken<UicTranslateConfig>('UIC_TRANSLATE_CONFIG');\r\n\r\nexport function provideUicTranslateConfig(config: UicTranslateConfig): Provider {\r\n return {\r\n provide: UIC_TRANSLATE_CONFIG,\r\n useValue: config,\r\n };\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UicTranslateService {\r\n private readonly languageState: BehaviorSubject<UicLanguage>;\r\n private readonly dictionaries: Record<UicLanguage, DictionaryNode> = {\r\n es: DICTIONARY_ES as unknown as DictionaryNode,\r\n en: DICTIONARY_EN as unknown as DictionaryNode,\r\n };\r\n\r\n constructor(\r\n @Optional() @Inject(UIC_TRANSLATE_CONFIG) config?: UicTranslateConfig\r\n ) {\r\n const initialLanguage = config?.defaultLanguage ?? 'es';\r\n this.languageState = new BehaviorSubject<UicLanguage>(initialLanguage);\r\n }\r\n\r\n get language$(): Observable<UicLanguage> {\r\n return this.languageState.asObservable();\r\n }\r\n\r\n get language(): UicLanguage {\r\n return this.languageState.value;\r\n }\r\n\r\n setLanguage(language: UicLanguage): void {\r\n if (this.languageState.value !== language) {\r\n this.languageState.next(language);\r\n }\r\n }\r\n\r\n translate(\r\n keyOrText: string | null | undefined,\r\n params?: Record<string, string | number | null | undefined>\r\n ): string {\r\n if (!keyOrText) return '';\r\n const rawValue =\r\n this.resolve(this.dictionaries[this.language], keyOrText) ??\r\n this.resolve(this.dictionaries.es, keyOrText) ??\r\n keyOrText;\r\n return this.interpolate(rawValue, params);\r\n }\r\n\r\n private resolve(dictionary: DictionaryNode, key: string): string | null {\r\n const parts = key.split('.');\r\n let current: unknown = dictionary;\r\n for (const part of parts) {\r\n if (!current || typeof current !== 'object') {\r\n return null;\r\n }\r\n current = (current as DictionaryNode)[part];\r\n }\r\n return typeof current === 'string' ? current : null;\r\n }\r\n\r\n private interpolate(\r\n value: string,\r\n params?: Record<string, string | number | null | undefined>\r\n ): string {\r\n if (!params) return value;\r\n return value.replace(/\\{\\{\\s*([\\w.-]+)\\s*\\}\\}/g, (_match, token) => {\r\n const replacement = params[token];\r\n return replacement == null ? '' : String(replacement);\r\n });\r\n }\r\n}\r\n","import { ChangeDetectorRef, OnDestroy, Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { UicTranslateService } from '../services/translate.service';\r\n\r\n@Pipe({\r\n name: 'uicTranslate',\r\n standalone: true,\r\n pure: false,\r\n})\r\nexport class UicTranslatePipe implements PipeTransform, OnDestroy {\r\n private readonly translateService = inject(UicTranslateService);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n private readonly subscription: Subscription = this.translateService.language$.subscribe(() =>\r\n this.cdr.markForCheck()\r\n );\r\n\r\n transform(\r\n keyOrText: string | null | undefined,\r\n params?: Record<string, string | number | null | undefined>\r\n ): string {\r\n return this.translateService.translate(keyOrText, params);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, forwardRef, inject, Input, OnChanges, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport {\r\n Overlay,\r\n OverlayRef,\r\n FlexibleConnectedPositionStrategy,\r\n ConnectedPosition,\r\n} from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { ButtonColor, UicButtonComponent } from '../../button/button.component';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\ntype CalendarView = 'days' | 'months' | 'years';\r\nconst base = createValueAccessor<string>();\r\n\r\n@Component({\r\n selector: 'ui-date-picker',\r\n imports: [CommonModule, UicButtonComponent, InputWrapperComponent, UicTranslatePipe],\r\n templateUrl: './date-picker.component.html',\r\n styleUrls: ['./date-picker.component.scss','../input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicDatePickerComponent),\r\n multi: true\r\n }\r\n ],\r\n})\r\nexport class UicDatePickerComponent extends base implements OnChanges {\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() internalIcon = ''; //Icono interno\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() disabled = false;\r\n // TEXTO\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n // FUNCTIONS\r\n @Input() max = '';\r\n @Input() min = '';\r\n @Input() justMonth = false;\r\n @Input() monthDay: 'last' | 'first' = 'first';\r\n\r\n @ViewChild('calendarTemplate') calendarTemplate!: TemplateRef<any>;\r\n private overlayRef!: OverlayRef;\r\n\r\n // Fijos\r\n months:string[] = Array.from({ length: 12 }, (_, i) => new Date(2000, i, 1).toLocaleString('default', { month: 'short' }));\r\n today: Date = new Date();\r\n currentYear = +this.today.getFullYear();\r\n maxDate:Date|null= null;\r\n minDate:Date|null=null;\r\n\r\n // Dinámicos\r\n view: CalendarView = 'days';\r\n paintedDate:Date|null = null;\r\n selectedDate = new Date();\r\n selectedYear = this.currentYear;\r\n selectedMonth = null;\r\n monthWeeks:(Date|null)[][] = []; // Arreglo de fechas\r\n decadeRange:number[]=[];\r\n displayValue = '';\r\n\r\n get inputPlaceholder(): string {\r\n return this.justMonth ? 'mm/yyyy' : 'dd/mm/yyyy';\r\n }\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n ngOnInit(){\r\n this.monthWeeks = this.getWeeks();\r\n this.minDate = this.parseDateLimits(this.min);\r\n this.maxDate = this.parseDateLimits(this.max);\r\n this.applyValue(this.value);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['min'] || changes['max']) {\r\n this.minDate = this.parseDateLimits(this.min);\r\n this.maxDate = this.parseDateLimits(this.max);\r\n\r\n if (this.paintedDate && !this.isWithinLimits(this.paintedDate)) {\r\n this.clearValue(true);\r\n } else if (this.value) {\r\n this.applyValue(this.value);\r\n }\r\n }\r\n }\r\n\r\n // --- Overlay ---\r\n overlayPositions: ConnectedPosition[] =[\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]\r\n\r\n openCalendar() {\r\n if ( this.disabled ) return;\r\n\r\n if (this.overlayRef) {\r\n this.closeCalendar();\r\n }\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy =\r\n this.overlay.position()\r\n .flexibleConnectedTo(this.host.nativeElement.querySelector('.fakeinput'))\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(false)\r\n .withPush(false);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n });\r\n\r\n const portal = new TemplatePortal(this.calendarTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.closeCalendar());\r\n\r\n this.view = this.justMonth ? 'months' : 'days';\r\n if (this.justMonth) {\r\n this.decadeRange = this.getDecadeRange();\r\n }\r\n this.setCurrentViewDate(this.getInitialViewDate());\r\n }\r\n\r\n closeCalendar() {\r\n if (this.overlayRef) {\r\n this.onTouched();\r\n this.overlayRef.dispose();\r\n this.overlayRef = null!;\r\n }\r\n }\r\n\r\n get monthName(): string {\r\n return this.selectedDate.toLocaleString('default', { month: 'long' });\r\n }\r\n \r\n getDecadeRange(): number[] {\r\n const start = Math.floor(this.selectedYear / 20) * 20;\r\n return Array.from({ length: 20 }, (_, i) => start + i);\r\n }\r\n\r\n getWeeks(): (Date | null)[][] {\r\n const weeks: (Date | null)[][] = [];\r\n const firstDay = new Date(this.selectedYear, this.selectedDate.getMonth(), 1);\r\n const lastDay = new Date(this.selectedYear, this.selectedDate.getMonth() + 1, 0);\r\n\r\n let current = new Date(firstDay);\r\n current.setDate(current.getDate() - current.getDay());\r\n\r\n while (current <= lastDay || current.getDay() !== 0) {\r\n const week: (Date | null)[] = [];\r\n for (let i = 0; i < 7; i++) {\r\n week.push(\r\n current.getMonth() === this.selectedDate.getMonth()\r\n ? new Date(current)\r\n : null\r\n );\r\n current.setDate(current.getDate() + 1);\r\n }\r\n weeks.push(week);\r\n }\r\n return weeks;\r\n }\r\n\r\n // --- Navegación ---\r\n prev() {\r\n if (this.view === 'days') {\r\n const isJan = this.selectedDate.getMonth() == 0;\r\n const offsetMonth = isJan? -11 : 1;\r\n if ( isJan){\r\n this.selectedYear--;\r\n }\r\n this.selectedDate = new Date(this.selectedYear, this.selectedDate.getMonth() - offsetMonth, 1);\r\n this.monthWeeks = this.getWeeks();\r\n } else if (this.view === 'months') {\r\n this.selectedYear--;\r\n this.selectedDate = new Date(this.selectedYear, this.selectedDate.getMonth(), 1);\r\n } else {\r\n this.selectedYear-=20\r\n this.selectedDate = new Date(this.selectedYear, this.selectedDate.getMonth(), 1);\r\n this.decadeRange = this.getDecadeRange();\r\n }\r\n }\r\n\r\n next() {\r\n if (this.view === 'days') {\r\n const isDec = this.selectedDate.getMonth() == 11;\r\n const offsetMonth = isDec? -11 : 1;\r\n if ( isDec){\r\n this.selectedYear++;\r\n }\r\n this.selectedDate = new Date(this.selectedYear, this.selectedDate.getMonth() + offsetMonth, 1);\r\n this.monthWeeks = this.getWeeks();\r\n } else if (this.view === 'months') {\r\n this.selectedYear++;\r\n this.selectedDate = new Date(this.selectedYear, this.selectedDate.getMonth(), 1);\r\n } else {\r\n this.selectedYear+=20;\r\n this.selectedDate = new Date(this.selectedYear, this.selectedDate.getMonth(), 1);\r\n this.decadeRange = this.getDecadeRange();\r\n }\r\n }\r\n\r\n // --- Cambio de vistas ---\r\n changeView() {\r\n if (this.view === 'days') {\r\n if (!this.justMonth) {\r\n this.view = 'months';\r\n }\r\n } else if (this.view === 'months') {\r\n this.view = 'years';\r\n this.decadeRange = this.getDecadeRange();\r\n }\r\n }\r\n selectYear(year: number) {\r\n this.selectedYear = year;\r\n this.selectedDate = new Date(year, this.selectedDate.getMonth(), 1);\r\n this.view = 'months';\r\n }\r\n selectMonth(monthIndex: number) {\r\n if (this.justMonth) {\r\n const monthDate = this.buildMonthDate(this.selectedYear, monthIndex);\r\n if (!this.isWithinLimits(monthDate)) {\r\n return;\r\n }\r\n this.selectedDate = new Date(this.selectedYear, monthIndex, 1);\r\n this.value = this.toIsoString(monthDate);\r\n this.displayValue = this.formatDisplay(monthDate);\r\n this.paintedDate = monthDate;\r\n this.setCurrentViewDate(monthDate);\r\n this.notifyChange(this.value);\r\n this.closeCalendar();\r\n return;\r\n }\r\n this.selectedDate = new Date(this.selectedYear, monthIndex, 1);\r\n this.monthWeeks = this.getWeeks();\r\n this.view = 'days';\r\n }\r\n\r\n selectDate(date: Date) {\r\n if (this.justMonth) {\r\n return;\r\n }\r\n const normalized = this.normalizeDate(date);\r\n this.value = this.toIsoString(normalized);\r\n this.displayValue = this.formatDisplay(normalized);\r\n this.notifyChange(this.value);\r\n this.paintedDate = normalized;\r\n this.setCurrentViewDate(normalized);\r\n this.closeCalendar();\r\n }\r\n\r\n isToday(day:Date|null){\r\n if ( day ){\r\n const dayStr = day?.toISOString().split(\"T\")[0];\r\n const today =(new Date()).toISOString().split(\"T\")[0];\r\n return dayStr == today;\r\n }else{\r\n return false;\r\n }\r\n }\r\n\r\n isPainted(day:Date|null){\r\n if ( day && this.paintedDate){\r\n const dayStr = day?.toISOString().split(\"T\")[0];\r\n const today = this.paintedDate.toISOString().split(\"T\")[0];\r\n return dayStr == today;\r\n }else{\r\n return false;\r\n }\r\n }\r\n\r\n isThisMonth(m:string){\r\n const monthId = this.months.findIndex(f=>f===m) + 1;\r\n const dayStr = this.selectedYear + \"-\" + monthId;\r\n const thisMonth =(new Date()).toISOString().split(\"T\")[0].substring(0,7).replace(\"-0\",\"-\");\r\n return dayStr == thisMonth;\r\n }\r\n\r\n // MÍNIMO Y MÁXIMO\r\n parseDateLimits(date: string | Date | null | undefined) {\r\n if (!date) {\r\n return null;\r\n }\r\n\r\n if (date instanceof Date) {\r\n return isNaN(date.getTime()) ? null : this.normalizeDate(date);\r\n }\r\n\r\n const trimmed = date.trim();\r\n if (!trimmed) {\r\n return null;\r\n }\r\n\r\n const isoMatch = trimmed.match(/^(\\d{4})-(\\d{1,2})-(\\d{1,2})(?:$|[T\\s])/);\r\n if (isoMatch) {\r\n const [, year, month, day] = isoMatch;\r\n const parsed = new Date(+year, +month - 1, +day);\r\n return isNaN(parsed.getTime()) ? null : this.normalizeDate(parsed);\r\n }\r\n\r\n const isoMonthMatch = trimmed.match(/^(\\d{4})-(\\d{1,2})(?:$|[T\\s])/);\r\n if (isoMonthMatch) {\r\n const [, year, month] = isoMonthMatch;\r\n const baseDay =\r\n this.monthDay === 'last'\r\n ? new Date(+year, +month, 0).getDate()\r\n : 1;\r\n const parsed = new Date(+year, +month - 1, baseDay);\r\n return isNaN(parsed.getTime()) ? null : this.normalizeDate(parsed);\r\n }\r\n\r\n const parsed = new Date(trimmed);\r\n return isNaN(parsed.getTime()) ? null : this.normalizeDate(parsed);\r\n }\r\n\r\n cleanInput(){\r\n this.clearValue(true);\r\n this.closeCalendar();\r\n }\r\n pickToday(){\r\n const today = this.normalizeDate(new Date());\r\n const target = this.justMonth ? this.buildMonthDate(today.getFullYear(), today.getMonth()) : today;\r\n this.value = this.toIsoString(target);\r\n this.displayValue = this.formatDisplay(target);\r\n this.notifyChange(this.value);\r\n this.paintedDate = target;\r\n this.setCurrentViewDate(target);\r\n this.closeCalendar();\r\n }\r\n\r\n onInputChange(event: Event) {\r\n this.displayValue = (event.target as HTMLInputElement).value;\r\n }\r\n\r\n onInputBlur() {\r\n this.onTouched();\r\n const trimmed = this.displayValue.trim();\r\n if (!trimmed) {\r\n this.clearValue(true);\r\n return;\r\n }\r\n\r\n const parsed = this.parseDisplay(trimmed);\r\n if (!parsed || !this.isWithinLimits(parsed)) {\r\n this.clearValue(true);\r\n return;\r\n }\r\n\r\n const normalized = this.normalizeDate(parsed);\r\n this.displayValue = this.formatDisplay(normalized);\r\n this.value = this.toIsoString(normalized);\r\n this.paintedDate = normalized;\r\n this.setCurrentViewDate(normalized);\r\n this.notifyChange(this.value);\r\n }\r\n\r\n onInputKeydown(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n (event.target as HTMLInputElement).blur();\r\n }\r\n }\r\n\r\n override writeValue(value: string | null): void {\r\n super.writeValue(value as any);\r\n this.applyValue(value);\r\n }\r\n\r\n private applyValue(value: string | null | undefined) {\r\n const parsed = this.parseDateLimits(value ?? '');\r\n if (parsed) {\r\n const effective = this.justMonth\r\n ? this.buildMonthDate(parsed.getFullYear(), parsed.getMonth())\r\n : parsed;\r\n if (this.justMonth && value) {\r\n this.value = this.toIsoString(effective);\r\n }\r\n this.displayValue = this.formatDisplay(effective);\r\n this.paintedDate = effective;\r\n this.setCurrentViewDate(effective);\r\n } else {\r\n this.clearValue(false, false);\r\n }\r\n }\r\n\r\n private getInitialViewDate(): Date {\r\n if (this.paintedDate) {\r\n return this.paintedDate;\r\n }\r\n const today = this.normalizeDate(new Date());\r\n if (this.minDate) {\r\n const minMonthStart = new Date(this.minDate.getFullYear(), this.minDate.getMonth(), 1);\r\n const currentMonthStart = new Date(today.getFullYear(), today.getMonth(), 1);\r\n if (minMonthStart > currentMonthStart) {\r\n return minMonthStart;\r\n }\r\n }\r\n return today;\r\n }\r\n\r\n isTodayAvailable(): boolean {\r\n const today = this.normalizeDate(new Date());\r\n const target = this.justMonth\r\n ? this.buildMonthDate(today.getFullYear(), today.getMonth())\r\n : today;\r\n return this.isWithinLimits(target);\r\n }\r\n\r\n private clearValue(emit = false, resetValue = true) {\r\n this.displayValue = '';\r\n this.paintedDate = null;\r\n if (resetValue) {\r\n this.value = '';\r\n }\r\n if (emit) {\r\n this.notifyChange(this.value);\r\n }\r\n }\r\n\r\n private setCurrentViewDate(date: Date) {\r\n this.selectedYear = date.getFullYear();\r\n this.selectedDate = new Date(date.getFullYear(), date.getMonth(), 1);\r\n this.monthWeeks = this.getWeeks();\r\n this.decadeRange = this.getDecadeRange();\r\n }\r\n\r\n private formatDisplay(date: Date): string {\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const year = date.getFullYear();\r\n if (this.justMonth) {\r\n return `${month}/${year}`;\r\n }\r\n const day = String(date.getDate()).padStart(2, '0');\r\n return `${day}/${month}/${year}`;\r\n }\r\n\r\n private parseDisplay(text: string): Date | null {\r\n const normalized = text.trim();\r\n if (this.justMonth) {\r\n const matchMonth = normalized.match(/^(\\d{1,2})[\\/\\-.](\\d{4})$/);\r\n if (!matchMonth) {\r\n return null;\r\n }\r\n const month = parseInt(matchMonth[1], 10);\r\n const year = parseInt(matchMonth[2], 10);\r\n if (month < 1 || month > 12) return null;\r\n return this.buildMonthDate(year, month - 1);\r\n }\r\n\r\n const match = normalized.match(/^(\\d{1,2})[\\/\\-.](\\d{1,2})[\\/\\-.](\\d{4})$/);\r\n if (!match) {\r\n return null;\r\n }\r\n\r\n const day = parseInt(match[1], 10);\r\n const month = parseInt(match[2], 10);\r\n const year = parseInt(match[3], 10);\r\n\r\n if (month < 1 || month > 12) return null;\r\n if (day < 1 || day > 31) return null;\r\n\r\n const candidate = new Date(year, month - 1, day);\r\n if (\r\n candidate.getFullYear() !== year ||\r\n candidate.getMonth() !== month - 1 ||\r\n candidate.getDate() !== day\r\n ) {\r\n return null;\r\n }\r\n\r\n return candidate;\r\n }\r\n\r\n private isWithinLimits(date: Date): boolean {\r\n const normalized = this.normalizeDate(date);\r\n if (this.minDate && normalized < this.minDate) {\r\n return false;\r\n }\r\n if (this.maxDate && normalized > this.maxDate) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n private normalizeDate(date: Date): Date {\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n }\r\n\r\n private toIsoString(date: Date): string {\r\n return date.toISOString().split('T')[0];\r\n }\r\n\r\n private buildMonthDate(year: number, monthIndex: number): Date {\r\n const day =\r\n this.monthDay === 'last'\r\n ? new Date(year, monthIndex + 1, 0).getDate()\r\n : 1;\r\n return this.normalizeDate(new Date(year, monthIndex, day));\r\n }\r\n\r\n isMonthDisabled(monthIndex: number): boolean {\r\n if (!this.justMonth) {\r\n return false;\r\n }\r\n const candidate = this.buildMonthDate(this.selectedYear, monthIndex);\r\n return !this.isWithinLimits(candidate);\r\n }\r\n\r\n isSelectedMonth(monthIndex: number): boolean {\r\n if (!this.paintedDate) {\r\n return false;\r\n }\r\n return (\r\n this.paintedDate.getFullYear() === this.selectedYear &&\r\n this.paintedDate.getMonth() === monthIndex\r\n );\r\n }\r\n}\r\n","<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div class=\"fakeinput-wrapp \" >\r\n <div class=\"fakeinput \" \r\n [ngClass]=\"{ 'errorinput': error, 'disabledinput': disabled }\">\r\n @if (internalIcon) {\r\n <i class=\"input-internalicon-m {{ internalIcon }}\"></i>\r\n }\r\n <input\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"inputPlaceholder\"\r\n [value]=\"displayValue\"\r\n inputmode=\"numeric\"\r\n autocomplete=\"off\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur()\"\r\n (keydown)=\"onInputKeydown($event)\"\r\n (click)=\"openCalendar()\"\r\n />\r\n </div>\r\n <!-- Overlay Template -->\r\n <ng-template #calendarTemplate>\r\n <div class=\"calendar\">\r\n <div class=\"calendar-header\">\r\n <span (click)=\"changeView()\">\r\n @if (view === 'days') {\r\n {{ monthName }} de {{ selectedYear }}\r\n } @else if (view === 'months') {\r\n {{ selectedYear }}\r\n } @else {\r\n {{ decadeRange[0] }} - {{ decadeRange[decadeRange.length - 1] }}\r\n }\r\n </span>\r\n <ui-button\r\n size=\"s\"\r\n type=\"ghost\"\r\n [iconOnly]=\"true\"\r\n icon=\"ri-arrow-drop-up-line\"\r\n (click)=\"prev()\"\r\n ><</ui-button\r\n >\r\n <ui-button\r\n size=\"s\"\r\n type=\"ghost\"\r\n [iconOnly]=\"true\"\r\n icon=\"ri-arrow-drop-down-line\"\r\n (click)=\"next()\"\r\n >></ui-button\r\n >\r\n </div>\r\n <!-- Vista Days -->\r\n @if (view === 'days') {\r\n <div class=\"calendar-grid\">\r\n @for (d of ['DO','LU','MA','MI','JU','VI','SA']; track $index) {\r\n <div class=\"weekday\">{{ d }}</div>\r\n } @for (week of monthWeeks; track $index) { @for (day of week;\r\n track $index) {\r\n <button\r\n class=\"day\"\r\n [disabled]=\"\r\n (minDate && day ? day < minDate : false) ||\r\n (maxDate && day ? day > maxDate : false)\r\n \"\r\n [class.today]=\"isToday(day)\"\r\n [class.day-selected]=\"isPainted(day)\"\r\n [class.empty]=\"!day\"\r\n (click)=\"day && selectDate(day)\"\r\n >\r\n {{ day?.getDate() }}\r\n </button>\r\n } }\r\n </div>\r\n }\r\n <!-- Vista Months -->\r\n @if (view === 'months') {\r\n <div class=\"calendar-grid months\">\r\n @for (m of months; let i = $index; track i) {\r\n <button\r\n class=\"day\"\r\n [class.today]=\"isThisMonth(m)\"\r\n [class.day-selected]=\"isSelectedMonth(i)\"\r\n [disabled]=\"isMonthDisabled(i)\"\r\n (click)=\"selectMonth(i)\"\r\n >\r\n {{ m }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n <!-- Vista Years -->\r\n @if (view === 'years') {\r\n <div class=\"calendar-grid years\">\r\n @for (y of decadeRange; track $index) {\r\n <button\r\n class=\"day\"\r\n [class.today]=\"y == currentYear\"\r\n (click)=\"selectYear(y)\"\r\n >\r\n {{ y }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n <div class=\"calendar-footer\">\r\n <ui-button\r\n color=\"red\"\r\n size=\"s\"\r\n type=\"ghost\"\r\n (click)=\"cleanInput()\"\r\n >{{'common.clear' | uicTranslate}}</ui-button\r\n >\r\n @if (isTodayAvailable()) {\r\n <ui-button\r\n color=\"blue\"\r\n size=\"s\"\r\n type=\"ghost\"\r\n (click)=\"pickToday()\"\r\n >{{'common.today' | uicTranslate}}</ui-button\r\n >\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ui-input-wrapper>\r\n","import { Alert } from './alert.model';\r\n\r\nlet nextId = 1;\r\n\r\nexport function createSuccessAlert(\r\n message: string,\r\n options?: Partial<Alert>\r\n): Alert {\r\n return {\r\n id: nextId++,\r\n message,\r\n icon:'ri-check-line',\r\n showProgressBar:true,\r\n type: 'success',\r\n duration: 3000,\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createErrorAlert(\r\n message: string,\r\n options?: Partial<Alert>\r\n): Alert {\r\n return {\r\n id: nextId++,\r\n message,\r\n showProgressBar:true,\r\n type: 'error',\r\n icon:'ri-error-warning-line',\r\n duration: 5000,\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createWarningAlert(\r\n message: string,\r\n options?: Partial<Alert>\r\n): Alert {\r\n return {\r\n id: nextId++,\r\n message,\r\n showProgressBar:true,\r\n type: 'warning',\r\n icon:'ri-alarm-warning-line',\r\n duration: 4000,\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createInfoAlert(\r\n message: string,\r\n options?: Partial<Alert>\r\n): Alert {\r\n return {\r\n id: nextId++,\r\n showProgressBar:true,\r\n message,\r\n icon:'ri-information-2-line',\r\n type: 'info',\r\n duration: 3000,\r\n ...options,\r\n };\r\n}","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { Alert, AlertConfigParams } from '../components/push-alerts/alert.model';\r\nimport { createErrorAlert, createSuccessAlert, createWarningAlert } from '../components/push-alerts/alert.helpers';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UicPushAlertService {\r\n\r\n autoIncId = 0;\r\n private readonly alerts$ = new Subject<Alert>();\r\n\r\n get stream() {\r\n return this.alerts$.asObservable();\r\n }\r\n\r\n show(alertData:AlertConfigParams) {\r\n this.autoIncId++;\r\n const alert: Alert = {...alertData,id:this.autoIncId};\r\n this.alerts$.next( alert );\r\n }\r\n\r\n success(message: string, options?: Partial<Alert>) {\r\n this.show(createSuccessAlert(message, options));\r\n }\r\n\r\n error(message: string, options?: Partial<Alert>) {\r\n this.show(createErrorAlert(message, options));\r\n }\r\n\r\n warning(message: string, options?: Partial<Alert>) {\r\n this.show(createWarningAlert(message, options));\r\n }\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, forwardRef, inject, Input, ViewChild } from '@angular/core';\r\nimport { ButtonColor, UicButtonComponent } from '../../button/button.component';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { UicPushAlertService } from '../../../services/push-alert.service';\r\n\r\nexport type UicFileInputValue = { name: string; blob?: Blob; path?: string; fileUid?: string };\r\n\r\nconst base = createValueAccessor<UicFileInputValue[]>();\r\n\r\n@Component({\r\n selector: 'ui-file-input',\r\n imports: [CommonModule,UicButtonComponent, InputWrapperComponent],\r\n templateUrl: './file-input.component.html',\r\n styleUrls: ['../input.component.scss','./file-input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicFileInputComponent),\r\n multi: true\r\n }\r\n ],\r\n})\r\nexport class UicFileInputComponent extends base {\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() internalIcon = ''; //Icono interno\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() size: 's' | 'm' | 'l' = 'm'; // tamaño general del input\r\n // TEXTO\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n // FUNCTIONS\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n @Input() multy = false;\r\n @Input() fileTypes: string[] | string | null = null;\r\n @Input() fileUidResolverFn?: (fileUid: string) => void;\r\n\r\n @ViewChild('fileInput') private fileInput?: ElementRef<HTMLInputElement>;\r\n private readonly push = inject(UicPushAlertService);\r\n\r\n override value: UicFileInputValue[] = [];\r\n files: UicFileInputValue[] = [];\r\n isDragging = false;\r\n\r\n get acceptAttribute(): string | null {\r\n if (!this.fileTypes || this.allFilesAllowed) {\r\n return null;\r\n }\r\n return Array.isArray(this.fileTypes) ? this.fileTypes.join(',') : this.fileTypes;\r\n }\r\n\r\n private get allFilesAllowed(): boolean {\r\n const fileTypes = Array.isArray(this.fileTypes) ? this.fileTypes : [this.fileTypes];\r\n return fileTypes.some((type) => typeof type === 'string' && type.trim().toUpperCase() === 'ALL');\r\n }\r\n\r\n openFileBrowser(): void {\r\n if (this.disabled || this.loading) {\r\n return;\r\n }\r\n this.fileInput?.nativeElement.click();\r\n }\r\n\r\n onNativeInputChange(event: Event): void {\r\n const input = event.target as HTMLInputElement | null;\r\n if (!input || !input.files || this.disabled || this.loading) {\r\n return;\r\n }\r\n\r\n const selectedFiles = Array.from(input.files);\r\n this.processIncomingFiles(selectedFiles);\r\n\r\n input.value = '';\r\n }\r\n\r\n removeFile(index: number): void {\r\n if (this.disabled || this.loading) {\r\n return;\r\n }\r\n const updated = this.files.filter((_, i) => i !== index);\r\n this.applyFiles(updated);\r\n }\r\n\r\n onDragOver(event: DragEvent): void {\r\n if (this.disabled || this.loading) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (event.dataTransfer) {\r\n event.dataTransfer.dropEffect = 'copy';\r\n }\r\n this.isDragging = true;\r\n }\r\n\r\n onDragLeave(event: DragEvent): void {\r\n if (this.disabled || this.loading) {\r\n return;\r\n }\r\n if (event.target === event.currentTarget) {\r\n this.isDragging = false;\r\n }\r\n }\r\n\r\n getIcon(file: UicFileInputValue): string {\r\n const mime = file.blob?.type?.toLowerCase() ?? '';\r\n const extension = file.name.split('.').pop()?.toLowerCase() ?? '';\r\n\r\n if (mime.startsWith('image/') || ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'webp', 'svg'].includes(extension)) {\r\n return 'ri-file-image-line';\r\n }\r\n\r\n if (this.isExcelType(mime, extension)) {\r\n return 'ri-file-excel-line';\r\n }\r\n\r\n if (this.isWordType(mime, extension)) {\r\n return 'ri-file-word-line';\r\n }\r\n\r\n return 'ri-file-line';\r\n }\r\n\r\n onDrop(event: DragEvent): void {\r\n if (this.disabled || this.loading) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging = false;\r\n\r\n const files = event.dataTransfer?.files;\r\n if (!files || files.length === 0) {\r\n return;\r\n }\r\n\r\n this.processIncomingFiles(Array.from(files));\r\n }\r\n\r\n override writeValue(value: UicFileInputValue[] | null): void {\r\n const normalized = Array.isArray(value)\r\n ? value\r\n .filter((item): item is UicFileInputValue => !!item && (!!item.blob || !!item.path || !!item.fileUid))\r\n .map((item) => ({\r\n name:\r\n item.name?.trim() ||\r\n item.path?.split('/').pop()?.split('\\\\').pop() ||\r\n item.fileUid ||\r\n 'file',\r\n blob: item.blob,\r\n path: item.path,\r\n fileUid: item.fileUid,\r\n }))\r\n : [];\r\n this.files = normalized;\r\n super.writeValue(normalized as UicFileInputValue[]);\r\n }\r\n\r\n private processIncomingFiles(fileList: File[]): void {\r\n if (!fileList.length) {\r\n return;\r\n }\r\n\r\n const allowedFiles = this.filterAllowedFiles(fileList);\r\n if (!allowedFiles.length) {\r\n return;\r\n }\r\n\r\n const mapped = allowedFiles.map<UicFileInputValue>((file) => ({\r\n name: file.name,\r\n blob: file,\r\n }));\r\n\r\n const updated = this.multy ? this.mergeFiles(mapped) : mapped.slice(0, 1);\r\n this.applyFiles(updated);\r\n }\r\n\r\n private mergeFiles(newFiles: UicFileInputValue[]): UicFileInputValue[] {\r\n return [...this.files, ...newFiles];\r\n }\r\n\r\n private applyFiles(files: UicFileInputValue[], emit = true): void {\r\n this.files = files;\r\n if (emit) {\r\n const payload = files.map((file) => ({\r\n name: file.name,\r\n blob: file.blob,\r\n path: file.path,\r\n fileUid: file.fileUid,\r\n }));\r\n this.notifyChange(payload);\r\n }\r\n }\r\n\r\n private filterAllowedFiles(files: File[]): File[] {\r\n if (this.allFilesAllowed || !this.acceptAttribute) {\r\n return files;\r\n }\r\n\r\n const acceptTokens = this.acceptAttribute\r\n .split(',')\r\n .map((token) => token.trim().toLowerCase())\r\n .filter(Boolean);\r\n\r\n if (!acceptTokens.length) {\r\n return files;\r\n }\r\n\r\n return files.filter((file) => this.matchesAcceptTokens(file, acceptTokens));\r\n }\r\n\r\n private matchesAcceptTokens(file: File, tokens: string[]): boolean {\r\n const mime = file.type.toLowerCase();\r\n const extension = file.name.includes('.') ? `.${file.name.split('.').pop()!.toLowerCase()}` : '';\r\n\r\n return tokens.some((token) => {\r\n if (!token) {\r\n return false;\r\n }\r\n\r\n if (token.endsWith('/*')) {\r\n const prefix = token.slice(0, -1);\r\n return mime.startsWith(prefix);\r\n }\r\n\r\n if (token.startsWith('.')) {\r\n return token === extension;\r\n }\r\n\r\n return token === mime;\r\n });\r\n }\r\n\r\n private isExcelType(mime: string, extension: string): boolean {\r\n const normalizedExtensionMatches = ['xls', 'xlsx', 'xlsm', 'xlsb'].includes(extension);\r\n return (\r\n mime === 'application/vnd.ms-excel' ||\r\n mime === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||\r\n mime === 'application/vnd.ms-excel.sheet.macroenabled.12' ||\r\n mime === 'application/vnd.ms-excel.sheet.binary.macroenabled.12' ||\r\n mime.includes('spreadsheetml') ||\r\n normalizedExtensionMatches\r\n );\r\n }\r\n\r\n private isWordType(mime: string, extension: string): boolean {\r\n const normalizedExtensionMatches = ['doc', 'docx', 'docm', 'dot', 'dotx'].includes(extension);\r\n return (\r\n mime === 'application/msword' ||\r\n mime === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||\r\n mime === 'application/vnd.ms-word.document.macroenabled.12' ||\r\n mime.includes('wordprocessingml') ||\r\n normalizedExtensionMatches\r\n );\r\n }\r\n\r\n downloadFile(item: UicFileInputValue) {\r\n // Allow downloads in read-only/disabled mode.\r\n // Mutating actions are already blocked in the other handlers.\r\n if (this.loading) {\r\n return;\r\n }\r\n\r\n // Priority: blob > path > fileUid\r\n if (item.blob) {\r\n const url = URL.createObjectURL(item.blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = item.name || 'file';\r\n link.rel = 'noopener';\r\n document.body.appendChild(link);\r\n link.click();\r\n link.remove();\r\n setTimeout(() => URL.revokeObjectURL(url), 0);\r\n return;\r\n }\r\n\r\n if (item.path) {\r\n const link = document.createElement('a');\r\n link.href = item.path;\r\n link.target = '_blank';\r\n link.rel = 'noopener';\r\n link.download = item.name || 'file';\r\n document.body.appendChild(link);\r\n link.click();\r\n link.remove();\r\n return;\r\n }\r\n\r\n if (item.fileUid && this.fileUidResolverFn) {\r\n this.fileUidResolverFn(item.fileUid);\r\n this.push.success('Preparando...');\r\n }\r\n }\r\n}\r\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div class=\"fileinput\" [ngClass]=\"{'errorinput':error, 'disabledinput':disabled, 'dragging':isDragging}\">\r\n <input\n #fileInput\n class=\"fileinput-native\"\n type=\"file\"\n (change)=\"onNativeInputChange($event)\"\n [attr.multiple]=\"multy ? '' : null\"\n [attr.accept]=\"acceptAttribute\"\n [disabled]=\"disabled || loading\"\n />\n @if (internalIcon) {\r\n <i class=\"input-internalicon {{internalIcon}}\" ></i>\r\n }\r\n <div class=\"fileinput-content\" >\r\n @if (!disabled && !loading) {\r\n <ui-button\r\n type=\"bordered\"\r\n color=\"black\"\r\n size=\"s\"\r\n (click)=\"openFileBrowser()\"\r\n >Seleccionar</ui-button>\r\n }\r\n <div\r\n class=\"fileinput-reel\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n @if (!files.length) {\r\n <div class=\"fileinput-empty\">\r\n Aun no hay archivos\r\n </div>\r\n } @else {\r\n @for (item of files; track $index) {\r\n <div class=\"fileinput-item\">\r\n <i class=\"fileinput-item__icon ri {{ getIcon(item) }}\" aria-hidden=\"true\"></i>\r\n <span (click)=\"downloadFile(item)\" class=\"fileinput-item__name\">{{item.name}}</span>\r\n <ui-button\r\n size=\"s\"\r\n [iconOnly]=\"true\"\r\n type=\"ghost\"\r\n icon=\"ri-close-line\"\r\n (click)=\"removeFile($index)\"\r\n [disabled]=\"disabled || loading\"\r\n ></ui-button>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ui-input-wrapper>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonColor } from '../../button/button.component';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\n\r\n@Component({\r\n selector: 'ui-input',\r\n imports: [ CommonModule, InputWrapperComponent],\r\n templateUrl: './input.component.html',\r\n styleUrl: '../input.component.scss'\r\n})\r\nexport class UicInputComponent {\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() internalIcon = ''; //Icono interno\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() size: 's' | 'm' | 'l' = 'm'; // tamaño general del input\r\n // TEXTO\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n // FUNCTIONS\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n @Output() clickButton = new EventEmitter<boolean>();\r\n\r\n\r\n disableBtn = false;\r\n disableButton(){\r\n this.clickButton.emit();\r\n this.disableBtn = true;\r\n setTimeout(() => {\r\n this.disableBtn = false;\r\n }, 200);\r\n }\r\n\r\n \r\n}\r\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\"> \r\n <div class=\"fakeinput\" [ngClass]=\"{'errorinput':error, 'disabledinput':disabled,'loading-input':loading}\">\r\n @if (internalIcon) {\r\n <i class=\"input-internalicon {{internalIcon}} f-{{internalIconColor}}\" ></i>\r\n }\r\n <div class=\"input-container\" >\r\n <ng-content></ng-content>\r\n </div> \r\n </div>\r\n <span class=\"char-counter\" style=\"padding-top: 1px;\" >\r\n <ng-content select=\"[counter]\"></ng-content>\r\n </span>\r\n</ui-input-wrapper>","import { Component, ElementRef, forwardRef, inject, Input, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { AppSelectOption } from '../select/select.component';\r\nimport { UicCheckboxComponent } from '../checkbox/checkbox.component';\r\nimport { ButtonColor } from '../../button/button.component';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\ntype selectId = (number|string)[];\r\nconst base = createValueAccessor<selectId>();\r\n\r\n@Component({\r\n selector: 'ui-multy-select',\r\n imports: [CommonModule, UicCheckboxComponent, FormsModule, InputWrapperComponent, UicTranslatePipe],\r\n templateUrl: './multy-select.component.html',\r\n styleUrls: ['../input.component.scss','./multy-select.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicMultySelectComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicMultySelectComponent extends base{\n\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: 'primary'|'secondary' = 'primary'; //color de ícono externo\r\n @Input() internalIcon = ''; //Icono interno\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() size: 's' | 'm' | 'l' = 'm'; // tamaño general del input\r\n // TEXT\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\n @Input() showSubtitle = false;\n @Input() disabled = false;\n @Input() nonSelectedText = 'select.multy_non_selected';\n @Input() allSelectedText = 'select.multy_all_selected';\n emptyText = 'select.non_selected'\n // FUNCTIONS\n @Input() loading = false;\n @Input() options:AppSelectOption[] = []; \n // MULTY\n allSelected=false;\n selectedSet = new Set<string | number>();\n\n toggleAll(checked: boolean) {\n this.allSelected = checked;\n this.selectedSet.clear();\n if (checked) {\n this.options.forEach(o => {\n const key = o.id??o.text;\n this.selectedSet.add(key);\n });\n }\n this.emitSelection();\n }\n\n toggleOption(id:number|string){\n if (this.selectedSet.has(id)) {\n this.selectedSet.delete(id);\n } else {\n this.selectedSet.add(id);\n }\n this.updateAllSelected();\n this.emitSelection();\n }\n\n updateAllSelected() {\n this.allSelected = this.isAllSelected;\n }\n\n applySelection() {\n this.emitSelection();\n this.closeList();\n }\n\n get selectedLabels(): string[] {\n if (this.selectedSet.size === 0) return [];\n\n const labelsByKey = new Map<string | number, string>(\n this.options.map(option => [option.id ?? option.text, option.text])\n );\n\n return [...this.selectedSet].map(key => labelsByKey.get(key) ?? String(key));\n }\n\n get isAllSelected(): boolean {\n return this.options.length > 0 && this.options.every(option => this.selectedSet.has(option.id ?? option.text));\n }\n\n get hasSelection(): boolean {\n return this.selectedSet.size > 0;\n }\n\n get selectedSummaryText(): string {\n if (!this.hasSelection) return this.nonSelectedText;\n if (this.isAllSelected) return this.allSelectedText;\n return this.selectedLabels.join(', ');\n }\n\n\n\n @ViewChild('dropdownTemplate') dropdownTemplate!: TemplateRef<any>;\n private overlayRef!: OverlayRef;\r\n overlayPositions: ConnectedPosition[] =[\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]\r\n \r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n \r\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['options'] && this.value != null) {\n this.syncSelectionFromValue(this.value);\n }\n }\n\r\n // --- Overlay ---\r\n openList(){\r\n if (this.disabled || this.loading) return;\r\n\r\n if (this.overlayRef) {\r\n this.closeList();\r\n }\r\n\r\n const input = this.host.nativeElement.querySelector('.fakeinput');\r\n const width = input.offsetWidth;\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy =\r\n this.overlay.position()\r\n .flexibleConnectedTo(input)\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(true)\r\n .withPush(false);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n width,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n });\r\n\r\n const portal = new TemplatePortal(this.dropdownTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.closeList());\r\n }\r\n\r\n \r\n closeList() {\n if (this.overlayRef) {\n this.onTouched();\n this.overlayRef.dispose();\n this.overlayRef = null!;\n }\n }\n\n override writeValue(value: (string| number)[] | null): void {\n super.writeValue(value ?? []); \n this.syncSelectionFromValue(value ?? []);\n }\n\n private emitSelection() {\n const result:(string|number)[] = [...this.selectedSet];\n this.notifyChange(result);\n }\n\n private syncSelectionFromValue(value: (string | number)[]) {\n this.selectedSet = new Set(value ?? []);\n this.updateAllSelected();\n }\n}\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div class=\"fakeinput-wrapp\" > \r\n <!-- INPUT -->\r\n <div (click)=\"openList()\" class=\"fakeinput\" #fakeinput \r\n [ngClass]=\"{'errorinput':error, 'disabledinput':disabled, 'loading-input':loading}\" style=\"cursor: pointer;\">\r\n @if (internalIcon) {\r\n <i class=\"input-internalicon {{internalIcon}}\" ></i>\r\n }\r\n <div\n class=\"fakeinput-emptytext multy-summary\"\n [class.disabled-placeholder]=\"disabled && !hasSelection\"\n [class.multy-summary-placeholder]=\"!hasSelection\"\n [class.multy-summary-disabled]=\"disabled\">\n @if (!hasSelection || isAllSelected) {\n {{selectedSummaryText | uicTranslate}}\n } @else {\n {{selectedSummaryText}}\n }\n </div>\n @if (!disabled && !loading) {\n <i class=\"ri-arrow-down-s-line\"></i>\n }\n </div> \r\n <!-- DESPLEGABLE -->\r\n <ng-template #dropdownTemplate >\r\n <div class=\"input-options\">\r\n <div class=\"multyoptions-header\">\r\n <ui-checkbox [noPadding]=\"true\"\r\n [ngModel]=\"allSelected\" \r\n (ngModelChange)=\"toggleAll($event)\"\r\n [placeholder]=\"'common.all' | uicTranslate\"></ui-checkbox>\r\n </div>\r\n <!-- OPCIONES -->\r\n <div class=\"input-option-scroll\"> \r\n @for (option of options; track $index) {\r\n <div (click)=\"toggleOption(option.id??option.text)\" class=\"input-multyoption\">\r\n <ui-checkbox \r\n [ngModel]=\"selectedSet.has(option.id??option.text)\"\r\n [noPadding]=\"true\" \r\n [placeholder]=\"option.text\"></ui-checkbox>\r\n </div> \r\n }\r\n @if (options.length == 0) {\r\n <div class=\"fakeinput-alert t-disabled\">{{'select.empty' | uicTranslate}}</div>\r\n }\r\n </div>\r\n <!-- <div class=\"multyoptions-footer\">\r\n <ui-button (click)=\"closeList()\" color=\"black\" type=\"bordered\" size=\"s\">Cancelar</ui-button>\r\n <ui-button (click)=\"applySelection()\" color=\"black\" size=\"s\">Aplicar</ui-button>\r\n </div> -->\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ui-input-wrapper>\r\n","export interface PhoneCountry {\n name: string;\n iso2: string;\n dialCode: string;\n priority?: number;\n areaCodes?: string[];\n}\n\nexport const PHONE_COUNTRIES: PhoneCountry[] = [\n { name: 'Argentina', iso2: 'ar', dialCode: '54' },\n { name: 'Australia', iso2: 'au', dialCode: '61' },\n { name: 'Bolivia', iso2: 'bo', dialCode: '591' },\n { name: 'Brazil', iso2: 'br', dialCode: '55' },\n { name: 'Canada', iso2: 'ca', dialCode: '1' },\n { name: 'Chile', iso2: 'cl', dialCode: '56' },\n { name: 'China', iso2: 'cn', dialCode: '86' },\n { name: 'Colombia', iso2: 'co', dialCode: '57' },\n { name: 'Costa Rica', iso2: 'cr', dialCode: '506' },\n { name: 'Dominican Republic', iso2: 'do', dialCode: '1', areaCodes: ['809', '829', '849'] },\n { name: 'Ecuador', iso2: 'ec', dialCode: '593' },\n { name: 'El Salvador', iso2: 'sv', dialCode: '503' },\n { name: 'France', iso2: 'fr', dialCode: '33' },\n { name: 'Germany', iso2: 'de', dialCode: '49' },\n { name: 'Guatemala', iso2: 'gt', dialCode: '502' },\n { name: 'Honduras', iso2: 'hn', dialCode: '504' },\n { name: 'Italy', iso2: 'it', dialCode: '39' },\n { name: 'Japan', iso2: 'jp', dialCode: '81' },\n { name: 'Mexico', iso2: 'mx', dialCode: '52' },\n { name: 'Netherlands', iso2: 'nl', dialCode: '31' },\n { name: 'New Zealand', iso2: 'nz', dialCode: '64' },\n { name: 'Panama', iso2: 'pa', dialCode: '507' },\n { name: 'Paraguay', iso2: 'py', dialCode: '595' },\n { name: 'Peru', iso2: 'pe', dialCode: '51' },\n { name: 'Portugal', iso2: 'pt', dialCode: '351' },\n { name: 'Spain', iso2: 'es', dialCode: '34' },\n { name: 'United Kingdom', iso2: 'gb', dialCode: '44' },\n { name: 'United States', iso2: 'us', dialCode: '1' },\n { name: 'Uruguay', iso2: 'uy', dialCode: '598' },\n { name: 'Venezuela', iso2: 've', dialCode: '58' }\n];\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, Input, OnChanges, OnDestroy, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef, forwardRef, inject } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { ButtonColor } from '../../button/button.component';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { PhoneCountry, PHONE_COUNTRIES } from './phone-countries.data';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\nexport interface UicPhoneInputValue {\r\n countryIso2: string;\r\n dialCode: string;\r\n nationalNumber: string;\r\n internationalNumber: string;\r\n}\r\n\r\ntype PhoneInputModel = UicPhoneInputValue | null;\r\nconst base = createValueAccessor<PhoneInputModel>();\r\n\r\n@Component({\r\n selector: 'ui-phone-input',\r\n imports: [CommonModule, InputWrapperComponent, UicTranslatePipe],\r\n templateUrl: './phone-input.component.html',\r\n styleUrls: ['../input.component.scss', './phone-input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicPhoneInputComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicPhoneInputComponent extends base implements OnChanges, OnDestroy {\r\n @Input() icon = '';\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() internalIcon = '';\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() size: 's' | 'm' | 'l' = 'm';\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n @Input() placeholder = 'phone_input.placeholder';\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n @Input() preferredCountries: string[] = ['pe', 'es', 'us'];\r\n @Input() flagPath = 'https://flagcdn.com/{{code}}.svg';\r\n @Input() set countries(value: PhoneCountry[]) {\r\n this._countries = value?.length ? value : PHONE_COUNTRIES;\r\n this.resetCountryLists();\r\n }\r\n get countries(): PhoneCountry[] {\r\n return this._countries;\r\n }\r\n\r\n @ViewChild('searchInput') private readonly searchInput?: ElementRef<HTMLInputElement>;\r\n @ViewChild('dropdownTemplate') private readonly dropdownTemplate?: TemplateRef<any>;\r\n\r\n dropdownOpen = false;\r\n searchTerm = '';\r\n phoneNumber = '';\r\n selectedCountry!: PhoneCountry;\r\n filteredCountries: PhoneCountry[] = [];\r\n readonly dropdownId = `phone-dropdown-${Math.random().toString(36).slice(2, 8)}`;\r\n private pendingNormalizedValue: UicPhoneInputValue | null = null;\r\n private changeRegistered = false;\r\n\r\n private _countries: PhoneCountry[] = PHONE_COUNTRIES;\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private overlayRef?: OverlayRef;\r\n private readonly overlayPositions: ConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' }\r\n ];\r\n\r\n constructor() {\r\n super();\r\n this.resetCountryLists();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['preferredCountries'] && !changes['preferredCountries'].firstChange) {\r\n this.selectedCountry = this.getDefaultCountry();\r\n this.emitValue();\r\n }\r\n\r\n if (changes['disabled'] && this.disabled && this.dropdownOpen) {\r\n this.closeDropdown();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.closeDropdown();\r\n }\r\n\r\n override writeValue(value: PhoneInputModel | string): void {\r\n const normalizedValue: PhoneInputModel = typeof value === 'string' ? this.parseStringValue(value) : value;\r\n this.pendingNormalizedValue = typeof value === 'string' ? normalizedValue : null;\r\n super.writeValue(normalizedValue);\r\n\r\n if (!normalizedValue) {\r\n this.phoneNumber = '';\r\n this.selectedCountry = this.getDefaultCountry();\r\n return;\r\n }\r\n\r\n const matchedCountry =\r\n this.countries.find(country => country.iso2 === normalizedValue.countryIso2) ??\r\n this.countries.find(country => country.dialCode === normalizedValue.dialCode);\r\n\r\n this.selectedCountry = matchedCountry ?? this.getDefaultCountry();\r\n this.phoneNumber = (normalizedValue.nationalNumber ?? '').replace(/\\D/g, '');\r\n\r\n if (typeof value === 'string') {\r\n this.propagateNormalizedValue(normalizedValue);\r\n }\r\n }\r\n\r\n override registerOnChange(fn: any): void {\r\n super.registerOnChange(fn);\r\n this.changeRegistered = true;\r\n if (this.pendingNormalizedValue) {\r\n this.onChange(this.pendingNormalizedValue);\r\n this.pendingNormalizedValue = null;\r\n }\r\n }\r\n\r\n toggleDropdown(): void {\r\n if (this.disabled || this.loading) return;\r\n\r\n if (this.dropdownOpen) {\r\n this.closeDropdown();\r\n } else {\r\n this.openDropdown();\r\n }\r\n }\r\n\r\n selectCountry(country: PhoneCountry): void {\r\n this.selectedCountry = country;\r\n this.closeDropdown();\r\n this.emitValue();\r\n }\r\n\r\n onNumberInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const digits = input.value.replace(/\\D/g, '');\r\n this.phoneNumber = digits;\r\n input.value = digits;\r\n this.emitValue();\r\n }\r\n\r\n onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n onSearchChange(event: Event): void {\r\n const term = (event.target as HTMLInputElement).value.trim().toLowerCase();\r\n this.searchTerm = term;\r\n if (!term) {\r\n this.filteredCountries = [...this.countries];\r\n return;\r\n }\r\n this.filteredCountries = this.countries.filter(country => {\r\n const matchesName = country.name.toLowerCase().includes(term);\r\n const matchesIso = country.iso2.toLowerCase().includes(term);\r\n const matchesDial = country.dialCode.startsWith(term.replace('+', ''));\r\n return matchesName || matchesIso || matchesDial;\r\n });\r\n }\r\n\r\n clearSearch(): void {\r\n this.searchTerm = '';\r\n this.filteredCountries = [...this.countries];\r\n if (this.dropdownOpen) {\r\n this.searchInput?.nativeElement.focus();\r\n }\r\n }\r\n\r\n getFlagUrl(iso: string): string {\r\n const code = iso.toLowerCase();\r\n if (this.flagPath.includes('{{code}}')) {\r\n return this.flagPath.replace('{{code}}', code);\r\n }\r\n const safeBase = this.flagPath.replace(/\\/$/, '');\r\n return `${safeBase}/${code}.svg`;\r\n }\r\n\r\n private emitValue(): void {\r\n if (!this.phoneNumber) {\r\n this.notifyChange(null);\r\n return;\r\n }\r\n\r\n const value: UicPhoneInputValue = {\r\n countryIso2: this.selectedCountry.iso2,\r\n dialCode: this.selectedCountry.dialCode,\r\n nationalNumber: this.phoneNumber,\r\n internationalNumber: `+${this.selectedCountry.dialCode}${this.phoneNumber}`\r\n };\r\n this.notifyChange(value);\r\n }\r\n\r\n private openDropdown(): void {\r\n if (!this.dropdownTemplate) {\r\n return;\r\n }\r\n\r\n const trigger = this.host.nativeElement.querySelector('.fakeinput') as HTMLElement | null;\r\n const width = trigger?.getBoundingClientRect().width ?? undefined;\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy = this.overlay\r\n .position()\r\n .flexibleConnectedTo(trigger ?? this.host.nativeElement)\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(false)\r\n .withPush(false);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n width,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition()\r\n });\r\n\r\n const portal = new TemplatePortal(this.dropdownTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.filteredCountries = [...this.countries];\r\n this.dropdownOpen = true;\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.closeDropdown());\r\n this.overlayRef.keydownEvents().subscribe(event => {\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.closeDropdown();\r\n }\r\n });\r\n\r\n setTimeout(() => this.searchInput?.nativeElement.focus());\r\n }\r\n\r\n private closeDropdown(): void {\r\n this.dropdownOpen = false;\r\n this.resetSearch();\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n this.overlayRef = undefined;\r\n }\r\n }\r\n\r\n private resetSearch(): void {\r\n this.searchTerm = '';\r\n this.filteredCountries = [...this.countries];\r\n }\r\n\r\n private resetCountryLists(): void {\r\n this.filteredCountries = [...this.countries];\r\n this.selectedCountry = this.getDefaultCountry();\r\n }\r\n\r\n private getDefaultCountry(): PhoneCountry {\r\n const preferred = this.preferredCountries\r\n .map(code => this.countries.find(country => country.iso2 === code))\r\n .find((country): country is PhoneCountry => !!country);\r\n\r\n return preferred ?? this.countries[0];\r\n }\r\n\r\n private parseStringValue(value: string): UicPhoneInputValue | null {\r\n const digits = value.replace(/\\D/g, '');\r\n if (!digits) return null;\r\n\r\n const matchedCountry = this.findCountryByPrefix(digits) ?? this.getDefaultCountry();\r\n const nationalNumber = digits.startsWith(matchedCountry.dialCode)\r\n ? digits.slice(matchedCountry.dialCode.length)\r\n : digits;\r\n\r\n return {\r\n countryIso2: matchedCountry.iso2,\r\n dialCode: matchedCountry.dialCode,\r\n nationalNumber,\r\n internationalNumber: `+${matchedCountry.dialCode}${nationalNumber}`\r\n };\r\n }\r\n\r\n private findCountryByPrefix(number: string): PhoneCountry | undefined {\r\n return this.countries.reduce<PhoneCountry | undefined>((best, country) => {\r\n if (!number.startsWith(country.dialCode)) return best;\r\n if (!best || country.dialCode.length > best.dialCode.length) {\r\n return country;\r\n }\r\n return best;\r\n }, undefined);\r\n }\r\n\r\n private propagateNormalizedValue(value: PhoneInputModel): void {\r\n if (typeof value === 'string') return;\r\n\r\n this.value = value;\r\n this.valueChange.emit(value);\r\n\r\n if (this.changeRegistered) {\r\n this.onChange(value);\r\n this.pendingNormalizedValue = null;\r\n } else {\r\n this.pendingNormalizedValue = value;\r\n }\r\n }\r\n}\r\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div\r\n class=\"fakeinput phone-input\"\r\n [ngClass]=\"{\r\n errorinput: error,\r\n disabledinput: disabled,\r\n 'loading-input': loading,\r\n open: dropdownOpen\r\n }\"\r\n >\r\n @if (internalIcon) {\r\n <i class=\"input-internalicon {{ internalIcon }}\"></i>\r\n }\r\n \r\n <button\r\n type=\"button\"\r\n class=\"phone-input__selector\"\r\n (click)=\"toggleDropdown()\"\r\n [disabled]=\"disabled || loading\"\r\n aria-haspopup=\"listbox\"\r\n [attr.aria-expanded]=\"dropdownOpen\"\r\n [attr.aria-controls]=\"dropdownOpen ? dropdownId : null\"\r\n [attr.aria-label]=\"'phone_input.aria_country_code' | uicTranslate:{country: selectedCountry.name, dialCode: selectedCountry.dialCode}\"\r\n >\r\n <img\r\n class=\"phone-input__flag\"\r\n [src]=\"getFlagUrl(selectedCountry.iso2)\"\r\n [alt]=\"selectedCountry.name\"\r\n />\r\n <i class=\"ri-arrow-down-s-line phone-input__chevron\" aria-hidden=\"true\"></i>\r\n </button>\r\n <div class=\"phone-input__divider\" aria-hidden=\"true\"></div>\r\n <div class=\"phone-input__dial\">+{{ selectedCountry.dialCode }}</div>\r\n \r\n \r\n <input\r\n type=\"tel\"\r\n class=\"phone-input__field\"\r\n [attr.placeholder]=\"placeholder | uicTranslate\"\r\n [disabled]=\"disabled || loading\"\r\n inputmode=\"tel\"\r\n [value]=\"phoneNumber\"\r\n (input)=\"onNumberInput($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n </div>\r\n</ui-input-wrapper>\r\n\r\n<ng-template #dropdownTemplate>\r\n <datalist class=\"phone-input__dropdown\" [attr.id]=\"dropdownId\">\r\n <div class=\"phone-input__search\">\r\n <i class=\"ri-search-line\"></i>\r\n <input\r\n #searchInput\r\n type=\"text\"\r\n [value]=\"searchTerm\"\r\n (input)=\"onSearchChange($event)\"\r\n [placeholder]=\"'phone_input.search_country' | uicTranslate\"\r\n autocomplete=\"off\"\r\n />\r\n @if (searchTerm) {\r\n <button type=\"button\" class=\"phone-input__clear\" (click)=\"clearSearch()\" [attr.aria-label]=\"'phone_input.clear_search' | uicTranslate\">\r\n <i class=\"ri-close-line\"></i>\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"phone-input__list\">\r\n @for (country of filteredCountries; track country.iso2) {\r\n <button\r\n type=\"button\"\r\n class=\"phone-input__option\"\r\n (click)=\"selectCountry(country)\"\r\n [attr.aria-selected]=\"country.iso2 === selectedCountry.iso2\"\r\n [attr.data-iso]=\"country.iso2\"\r\n [attr.title]=\"country.name + ' +' + country.dialCode\"\r\n [attr.aria-label]=\"country.name + ' +' + country.dialCode\"\r\n >\r\n <img\r\n class=\"phone-input__flag\"\r\n [src]=\"getFlagUrl(country.iso2)\"\r\n [alt]=\"country.name\"\r\n />\r\n {{country.name}}\r\n <span class=\"phone-input__dial\">(+{{ country.dialCode }})</span>\r\n </button>\r\n }\r\n\r\n @if (filteredCountries.length === 0) {\r\n <div class=\"phone-input__empty\">{{'phone_input.no_results' | uicTranslate}}</div>\r\n }\r\n </div>\r\n </datalist>\r\n</ng-template>\r\n","import { animate, style, transition, trigger } from \"@angular/animations\";\r\nexport const fadeAndRise = trigger('fadeAndRise', [\r\n transition(':enter',[style({opacity:0, maxHeight: '0px'}), animate('.3s ease', style({opacity:1,maxHeight: '200px'}))]),\r\n transition(':leave', [animate('.3s ease', style({opacity:0}))])\r\n ]);","import { Component } from '@angular/core';\r\nimport { fadeAndRise } from '../../animations/fadeAndRise.animation';\r\n\r\n@Component({\r\n selector: 'ui-tooltip',\r\n imports: [],\r\n templateUrl: './tooltip.component.html',\r\n styleUrl: './tooltip.component.scss',\r\n animations: [ fadeAndRise ]\r\n})\r\nexport class UicTooltipComponent {\r\n tooltip: string = '';\r\n left: number = 0;\r\n top: number = 0;\r\n placement: 'top' | 'bottom' = 'bottom';\r\n}\r\n","<div @fadeAndRise class=\"tooltip\" \r\n [class.tooltip--top]=\"placement === 'top'\"\r\n [class.tooltip--bottom]=\"placement === 'bottom'\"\r\n [style.left]=\"left + 'px'\" [style.top]=\"top + 'px'\" [innerHTML]=\"tooltip\">\r\n</div>\r\n","import { ApplicationRef, ComponentRef, createComponent, \r\n Directive, ElementRef, EmbeddedViewRef, EnvironmentInjector, HostListener, Input } from '@angular/core';\r\nimport { UicTooltipComponent } from '../components/tooltip/tooltip.component';\r\n\r\n\r\n@Directive({\n selector: '[uiTooltip]'\n})\nexport class UicToolTipDirective {\n\n\n @Input('uiTooltip') tip = '';\n\r\n private componentRef: ComponentRef<any> | null = null;\r\n\r\n constructor(\r\n private readonly elementRef: ElementRef,\r\n private readonly appRef: ApplicationRef, \r\n private readonly injector: EnvironmentInjector) {\r\n }\r\n\r\n @HostListener('mouseenter')\r\n onMouseEnter(): void {\r\n if (!this.canShowTooltipOnHover()) {\r\n return;\r\n }\r\n if (this.componentRef === null && this.tip!='' && this.tip!=null) {\r\n this.componentRef = createComponent(UicTooltipComponent, {\r\n environmentInjector: this.injector\r\n });\r\n\r\n this.appRef.attachView(this.componentRef.hostView);\r\n const domElem = \r\n (this.componentRef.hostView as EmbeddedViewRef<any>)\r\n .rootNodes[0] as HTMLElement; \r\n document.body.appendChild(domElem);\r\n this.setTooltipComponentProperties();\r\n }\r\n }\r\n\r\n private canShowTooltipOnHover(): boolean {\r\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\r\n return true;\r\n }\r\n\r\n const canHoverWithAnyPointer = window.matchMedia('(any-hover: hover)').matches;\r\n const hasAnyFinePointer = window.matchMedia('(any-pointer: fine)').matches;\r\n if (canHoverWithAnyPointer && hasAnyFinePointer) {\r\n return true;\r\n }\r\n\r\n // Fallback for browsers with limited support for \"any-*\" media queries.\r\n return window.matchMedia('(hover: hover)').matches\r\n && window.matchMedia('(pointer: fine)').matches;\r\n }\r\n\r\n private setTooltipComponentProperties() {\r\n if (this.componentRef !== null) {\r\n this.componentRef.instance.tooltip = this.tip;\r\n this.componentRef.changeDetectorRef.detectChanges();\r\n requestAnimationFrame(() => {\r\n if (!this.componentRef) {\r\n return;\r\n }\r\n\r\n const tooltipElement = (this.componentRef.hostView as EmbeddedViewRef<any>)\r\n .rootNodes[0] as HTMLElement;\r\n const targetRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n const tooltipRect = tooltipElement.getBoundingClientRect();\r\n const spacing = 8;\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n const availableAbove = targetRect.top;\r\n const availableBelow = viewportHeight - targetRect.bottom;\r\n\r\n let placement: 'top' | 'bottom' = 'bottom';\r\n let top = targetRect.bottom + spacing;\r\n\r\n if (availableBelow < tooltipRect.height + spacing && availableAbove > availableBelow) {\r\n placement = 'top';\r\n top = Math.max(spacing, targetRect.top - tooltipRect.height - spacing);\r\n } else {\r\n top = Math.min(top, viewportHeight - tooltipRect.height - spacing);\r\n }\r\n\r\n const centerX = targetRect.left + (targetRect.width / 2);\r\n const maxLeft = viewportWidth - (tooltipRect.width / 2) - spacing;\r\n const minLeft = (tooltipRect.width / 2) + spacing;\r\n const left = Math.min(Math.max(centerX, minLeft), maxLeft);\r\n\r\n this.componentRef.instance.left = left;\r\n this.componentRef.instance.top = top;\r\n this.componentRef.instance.placement = placement;\r\n this.componentRef.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n }\r\n\r\n @HostListener('mouseleave')\r\n onMouseLeave(): void {\r\n this.destroy();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n destroy(): void {\r\n if (this.componentRef !== null) {\r\n this.appRef.detachView(this.componentRef.hostView);\r\n this.componentRef.destroy();\r\n this.componentRef = null;\r\n }\r\n }\r\n}\r\n","import { Component, ElementRef, EventEmitter, forwardRef, inject, Input, Output, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { debounceTime, distinctUntilChanged, finalize, min, Observable, of, Subject, switchMap, tap } from 'rxjs';\r\nimport { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { CommonModule } from '@angular/common';\nimport { UicButtonComponent } from '../../button/button.component';\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\nimport { UicToolTipDirective } from '../../../directives/tool-tip.directive';\n\r\nconst base = createValueAccessor< Record<string,any>|null>();\r\n\r\n@Component({\r\n selector: 'ui-searcher',\r\n imports: [CommonModule, FormsModule, UicButtonComponent, InputWrapperComponent, UicTranslatePipe, UicToolTipDirective],\n templateUrl: './uic-searcher.component.html',\r\n styleUrls: ['./uic-searcher.component.scss', '../input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicSearcherComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicSearcherComponent extends base {\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: 'primary'|'secondary' = 'primary'; //color de ícono externo\r\n @Input() internalIcon = 'ri-search-2-line'; //Icono interno\r\n @Input() size: 's' | 'm' | 'l' = 'm'; // tamaño general del input\r\n // TEXTO\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = ''; \r\n \r\n @Input() showSubtitle = false;\r\n // FUNCTIONS\r\n @Input() disabled = false; \r\n @Input() loading = false;\r\n @Input() minimumSearchLength = 3;\r\n @Input() showSelected = true;\r\n @Input() placeholder = 'common.search_ellipsis';\r\n \r\n @Input() searchFn?: (query: string) => Observable<any[]>;\r\n @Input() itemDisplayFn?: (item: any) => string = item => String(item);\r\n @Input() itemIsEnabledFn?: (item: any) => boolean = () => true;\r\n \r\n @Input() manualSearch: boolean = false;\r\n @Input() stateless: boolean = false;\r\n @Output() pickedItem = new EventEmitter<Record<string,any>>();\r\n\r\n private readonly searchSubject = new Subject<string>();\r\n results$: Observable<any[]> = this.searchSubject.pipe(\r\n debounceTime(300),\r\n distinctUntilChanged(),\r\n tap(() => this.watingApi = true),\r\n switchMap( v => {\r\n if (v.length < this.minimumSearchLength) {\r\n this.watingApi = false;\r\n return of([]);\r\n }\r\n if ( !this.searchFn ) return of([]);\r\n return this.searchFn(v).pipe( finalize(()=>this.watingApi=false) )}\r\n )\r\n );;\r\n selectedOption:Record<string,any>|null = null;\r\n searchText: string = '';\r\n watingApi = false;\r\n\r\n \r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n private resizeObserver?: ResizeObserver;\r\n \r\n onSearchChange(value: string) {\r\n this.searchText = value; \r\n if (!this.manualSearch) {\r\n this.searchSubject.next(value);\r\n }\r\n }\r\n\r\n triggerSearch() {\r\n this.searchSubject.next(this.searchText);\r\n }\r\n\r\n selectItem(item: Record<string,any>) {\r\n if (!this.itemIsEnabledFn ||this.itemIsEnabledFn(item)) {\r\n this.clearSearch();\r\n this.closeList();\r\n if ( this.stateless ){\r\n this.pickedItem.emit(item)\r\n }else{\r\n if (this.showSelected) this.selectedOption = item;\r\n this.notifyChange(item);\r\n }\r\n }\r\n }\r\n\r\n clearSearch() {\r\n this.searchText = '';\r\n this.searchSubject.next('');\r\n }\r\n\r\n unselect(){\r\n this.selectedOption = null;\r\n this.notifyChange(null);\r\n }\r\n\r\n // --- Overlay ---\r\n @ViewChild('dropdownTemplate') dropdownTemplate!: TemplateRef<any>;\r\n private overlayRef!: OverlayRef;\r\n overlayPositions: ConnectedPosition[] =[\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]\r\n openList(){\r\n if (this.disabled || this.loading) return;\r\n\r\n if (this.overlayRef) {\r\n this.closeList();\r\n }\r\n\r\n const input = this.host.nativeElement.querySelector('.fakeinput') as HTMLElement | null;\r\n if (!input) return;\r\n const width = input.offsetWidth;\r\n const preferredPositions = this.getPreferredPositions(input);\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy =\r\n this.overlay.position()\r\n .flexibleConnectedTo(input)\r\n .withPositions(preferredPositions)\r\n .withFlexibleDimensions(true)\r\n .withPush(false);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n width,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n });\r\n\r\n const portal = new TemplatePortal(this.dropdownTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.observeOverlaySizeChanges();\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.closeList());\r\n }\r\n closeList() {\r\n if (this.overlayRef) {\r\n this.resizeObserver?.disconnect();\r\n this.resizeObserver = undefined;\r\n this.overlayRef.dispose();\r\n this.overlayRef = null!;\r\n }\r\n }\r\n\r\n private observeOverlaySizeChanges() {\r\n if (!this.overlayRef || typeof ResizeObserver === 'undefined') return;\r\n\r\n this.resizeObserver?.disconnect();\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.overlayRef?.updatePosition();\r\n });\r\n this.resizeObserver.observe(this.overlayRef.overlayElement);\r\n }\r\n\r\n private getPreferredPositions(origin: HTMLElement): ConnectedPosition[] {\r\n if (typeof window === 'undefined') return this.overlayPositions;\r\n const rect = origin.getBoundingClientRect();\r\n const spaceBelow = window.innerHeight - rect.bottom;\r\n const spaceAbove = rect.top;\r\n return spaceBelow >= spaceAbove ? this.overlayPositions : [...this.overlayPositions].reverse();\r\n }\r\n\r\n override writeValue(value: Record<string,any>): void {\r\n super.writeValue(value); \r\n this.selectedOption = value; \r\n }\r\n}\r\n","<ui-input-wrapper\r\n[icon]=\"icon\"\r\n[iconColor]=\"iconColor\"\r\n[label]=\"label\"\r\n[error]=\"error\"\r\n[tip]=\"tip\"\r\n[disabled]=\"disabled\">\r\n@if ( !stateless || (!disabled && stateless)) {\r\n <div class=\"fakeinput-wrapp\" >\r\n <!-- INPUT -->\r\n <div class=\"fakeinput\" #fakeinput \r\n [ngClass]=\"{'errorinput':error, 'disabledinput':disabled, 'loading-input':watingApi||loading}\" style=\"cursor: pointer;\">\r\n @if (selectedOption == null) { \r\n @if (internalIcon) {\r\n <i [class]=\"'input-internalicon f-'+ internalIcon\" ></i>\r\n }\r\n <div class=\"input-container\" >\r\n <input\r\n [disabled]=\"disabled\"\r\n (focus)=\"openList()\"\r\n type=\"text\"\r\n (keydown.enter)=\"triggerSearch()\"\r\n (keydown.escape)=\"clearSearch()\"\r\n [(ngModel)]=\"searchText\"\r\n (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"placeholder | uicTranslate\"\r\n />\r\n </div> \r\n @if (!disabled) {\r\n @if (manualSearch) {\r\n <ui-button [uiTooltip]=\"'searcher.clear_tip' | uicTranslate\" (click)=\"triggerSearch()\" size=\"t\" ></ui-button>\n }\r\n <ui-button [iconOnly]=\"true\" size=\"s\" type=\"ghost\" icon=\"ri-eraser-line\" (click)=\"clearSearch()\"></ui-button>\r\n }\r\n }@else {\r\n <div class=\"input-container\" >\r\n <div class=\"selected-item\" >\r\n <div class=\"selected-item-text\" [innerHTML]=\"itemDisplayFn?itemDisplayFn(selectedOption):''\"></div> \r\n <ui-button [iconOnly]=\"true\" (click)=\"unselect()\" type=\"ghost\" size=\"t\" icon=\"ri-close-large-line\" color=\"red\"></ui-button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </ui-input-wrapper>\r\n \r\n<ng-template #dropdownTemplate>\r\n @if (results$ | async; as items){\r\n <div class=\"input-options\">\r\n <div class=\"input-option-scroll\">\r\n @for (item of items; track $index) {\r\n <div class=\"input-option\" [class.item-disabled]=\"itemIsEnabledFn?!itemIsEnabledFn(item):false\"\r\n (click)=\"selectItem(item)\" \r\n [innerHTML]=\"itemDisplayFn?itemDisplayFn(item):''\">\r\n </div>\r\n }@empty {\r\n <div class=\"t-disabled\">{{'searcher.empty' | uicTranslate}}</div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, forwardRef, inject, Input, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { ButtonColor, UicButtonComponent } from '../../button/button.component';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\ntype selectId = number|string|null;\r\nconst base = createValueAccessor<selectId>();\r\n\r\n@Component({\r\n selector: 'ui-select',\r\n imports: [InputWrapperComponent, CommonModule, UicTranslatePipe, UicButtonComponent],\r\n templateUrl: './select.component.html',\r\n styleUrl: '../input.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicSelectComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicSelectComponent extends base{\n \r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() internalIcon = ''; //Icono interno\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() size: 's' | 'm' | 'l' = 'm'; // tamaño general del input\r\n // TEXT\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n @Input() showSubtitle = false;\r\n @Input() disabled = false;\r\n @Input() nonSelectedText = 'select.non_selected';\r\n @Input() noneText = 'select.none';\r\n @Input() emptyText = 'select.empty';\r\n @Input() searcherEnabled = false;\r\n\r\n // FUNCTIONS\r\n @Input() loading = false;\r\n @Input() nullable = false;\r\n @Input() options:AppSelectOption[] = []; \r\n \r\n @ViewChild('dropdownTemplate') dropdownTemplate!: TemplateRef<any>;\n private overlayRef!: OverlayRef;\n searchTerm = '';\n activeOptionIndex = -1;\n overlayPositions: ConnectedPosition[] =[\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]\r\n \r\n selectedOption: AppSelectOption | null = null;\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n \r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['options'] && this.value != null) {\r\n // Resetear valor seleccionado\r\n this.selectedOption = this.options.find(opt => opt.id === this.value) ?? null;\r\n }\r\n }\r\n\r\n get showSearcher(): boolean {\r\n return this.searcherEnabled && this.options.length > 5;\r\n }\r\n\r\n get filteredOptions(): AppSelectOption[] {\n const search = this.normalizeText(this.searchTerm);\r\n\r\n if (!search) {\r\n return this.options;\r\n }\r\n\r\n return this.options.filter(option => this.normalizeText(option.text).includes(search));\n }\n\n get showNullableOption(): boolean {\n return this.options.length > 0 && this.nullable;\n }\n\n get keyboardOptions(): (AppSelectOption | null)[] {\n return [\n ...(this.showNullableOption ? [null] : []),\n ...this.filteredOptions,\n ];\n }\n\r\n // --- Overlay ---\r\n openList(){\r\n if (this.disabled || this.loading) return;\r\n\r\n if (this.overlayRef) {\r\n this.closeList();\r\n }\r\n\r\n const input = this.host.nativeElement.querySelector('.fakeinput');\r\n const width = input.offsetWidth;\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy =\r\n this.overlay.position()\r\n .flexibleConnectedTo(input)\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(true)\r\n .withPush(false);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n width,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n });\r\n\r\n const portal = new TemplatePortal(this.dropdownTemplate, this.vcr);\n this.overlayRef.attach(portal);\n this.setInitialActiveOption();\n this.scrollActiveOptionIntoView();\n this.focusSearcher();\n this.overlayRef.keydownEvents().subscribe(event => this.handleOverlayKeydown(event));\n\n this.overlayRef.backdropClick().subscribe(() => this.closeList());\n }\n\r\n selectOption(option:AppSelectOption | null){\r\n this.closeList();\r\n this.selectedOption = option;\r\n this.notifyChange(option?.id??null);\r\n }\r\n \r\n closeList() {\r\n if (this.overlayRef) {\r\n this.onTouched();\r\n this.overlayRef.dispose();\n this.overlayRef = null!;\n this.searchTerm = '';\n this.activeOptionIndex = -1;\n }\n }\n\r\n override writeValue(value: string | number | null): void {\r\n super.writeValue(value); \r\n this.selectedOption = this.options.find(opt => opt.id === value) ?? null;\r\n }\r\n\r\n updateSearchTerm(value: string): void {\n this.searchTerm = value;\n this.resetActiveOption();\n }\n\r\n clearSearch(event?: Event): void {\n event?.stopPropagation();\n this.searchTerm = '';\n this.resetActiveOption();\n this.focusSearcher();\n }\n\n isNoneOptionActive(): boolean {\n return this.showNullableOption && this.activeOptionIndex === 0;\n }\n\n isOptionActive(index: number): boolean {\n const optionIndex = index + (this.showNullableOption ? 1 : 0);\n return optionIndex === this.activeOptionIndex;\n }\n\n getOptionIndex(index: number): number {\n return index + (this.showNullableOption ? 1 : 0);\n }\n\r\n highlightMatch(text: string): string {\r\n const search = this.searchTerm.trim();\r\n\r\n if (!search) {\r\n return this.escapeHtml(text);\r\n }\r\n\r\n const normalizedText = text.toLocaleLowerCase();\r\n const normalizedSearch = search.toLocaleLowerCase();\r\n const searchLength = search.length;\r\n let cursor = 0;\r\n let highlighted = '';\r\n\r\n while (cursor < text.length) {\r\n const matchIndex = normalizedText.indexOf(normalizedSearch, cursor);\r\n\r\n if (matchIndex === -1) {\r\n highlighted += this.escapeHtml(text.slice(cursor));\r\n break;\r\n }\r\n\r\n highlighted += this.escapeHtml(text.slice(cursor, matchIndex));\r\n highlighted += `<mark>${this.escapeHtml(text.slice(matchIndex, matchIndex + searchLength))}</mark>`;\r\n cursor = matchIndex + searchLength;\r\n }\r\n\r\n return highlighted;\r\n }\r\n\r\n private focusSearcher(): void {\n if (!this.showSearcher || !this.overlayRef) {\r\n return;\r\n }\r\n\r\n setTimeout(() => {\n const input = this.overlayRef?.overlayElement.querySelector('.select-searcher input') as HTMLInputElement | null;\n input?.focus();\n input?.select();\n });\n }\n\n private handleOverlayKeydown(event: KeyboardEvent): void {\n if (!this.overlayRef) return;\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n event.stopPropagation();\n this.moveActiveOption(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n event.stopPropagation();\n this.moveActiveOption(-1);\n return;\n }\n\n if (event.key === 'Enter') {\n if (this.activeOptionIndex < 0 || this.keyboardOptions.length === 0) return;\n event.preventDefault();\n event.stopPropagation();\n this.selectOption(this.keyboardOptions[this.activeOptionIndex]);\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.closeList();\n }\n }\n\n private setInitialActiveOption(): void {\n if (this.keyboardOptions.length === 0) {\n this.activeOptionIndex = -1;\n return;\n }\n\n if (this.selectedOption) {\n const selectedIndex = this.keyboardOptions.findIndex(option => option?.id === this.selectedOption?.id);\n this.activeOptionIndex = selectedIndex >= 0 ? selectedIndex : 0;\n return;\n }\n\n if (this.showNullableOption && this.value == null) {\n this.activeOptionIndex = 0;\n return;\n }\n\n this.activeOptionIndex = 0;\n }\n\n private resetActiveOption(): void {\n if (this.keyboardOptions.length === 0) {\n this.activeOptionIndex = -1;\n return;\n }\n\n this.activeOptionIndex = 0;\n this.scrollActiveOptionIntoView();\n }\n\n private moveActiveOption(step: 1 | -1): void {\n const count = this.keyboardOptions.length;\n if (count === 0) return;\n\n if (this.activeOptionIndex < 0) {\n this.activeOptionIndex = step > 0 ? 0 : count - 1;\n this.scrollActiveOptionIntoView();\n return;\n }\n\n this.activeOptionIndex = (this.activeOptionIndex + step + count) % count;\n this.scrollActiveOptionIntoView();\n }\n\n private scrollActiveOptionIntoView(): void {\n if (!this.overlayRef || this.activeOptionIndex < 0) return;\n\n setTimeout(() => {\n const active = this.overlayRef?.overlayElement.querySelector(`[data-option-index=\"${this.activeOptionIndex}\"]`) as HTMLElement | null;\n active?.scrollIntoView({ block: 'nearest' });\n });\n }\n\r\n private normalizeText(value: string): string {\r\n return value.toLocaleLowerCase().trim();\r\n }\r\n\r\n private escapeHtml(value: string): string {\r\n return value\r\n .replaceAll('&', '&')\r\n .replaceAll('<', '<')\r\n .replaceAll('>', '>')\r\n .replaceAll('\"', '"')\r\n .replaceAll(\"'\", ''');\r\n }\r\n}\r\n\r\n\r\nexport interface AppSelectOption{\r\n id? : string | number | null;\r\n text : string;\r\n detail? : string;\r\n icon? : string;\r\n iconColor? : string;\r\n} \r\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div class=\"fakeinput-wrapp\" > \r\n <!-- INPUT -->\r\n <div (click)=\"openList()\" class=\"fakeinput\" #fakeinput \r\n [ngClass]=\"{'errorinput':error, 'disabledinput':disabled, 'loading-input':loading}\" style=\"cursor: pointer;\">\r\n @if (internalIcon) {\r\n <i class=\"input-internalicon {{internalIcon}} f-{{internalIconColor}}\" ></i>\r\n }\r\n <div class=\"fakeinput-emptytext\" [class.disabled-placeholder]=\"disabled && !selectedOption?.text\" >\r\n @if (selectedOption?.icon) {\r\n <i class=\"{{selectedOption?.icon}} f-{{selectedOption?.iconColor}}\" style=\"margin-right: 5px;\"></i>\r\n }\r\n {{(selectedOption?.text || nonSelectedText) | uicTranslate}}\r\n </div>\r\n @if (!disabled && !loading) {\r\n <i class=\"ri-arrow-down-s-line\"></i>\r\n }\r\n </div> \r\n <!-- DESPLEGABLE -->\r\n <ng-template #dropdownTemplate >\r\n <div class=\"input-options\">\r\n @if (showSearcher) {\r\n <div class=\"select-searcher\">\r\n <input\r\n #searchInput\r\n type=\"text\"\r\n [placeholder]=\"'select.search_placeholder'|uicTranslate\"\r\n [value]=\"searchTerm\"\r\n (input)=\"updateSearchTerm($any($event.target).value)\"\r\n (click)=\"$event.stopPropagation()\">\r\n <ui-button\r\n icon=\"ri-close-line\"\r\n size=\"s\"\r\n type=\"ghost\"\r\n color=\"red\"\r\n [iconOnly]=\"true\"\r\n (click)=\"clearSearch($event)\">\r\n </ui-button>\r\n </div>\r\n }\r\n <!-- OPCIONES -->\n <div class=\"input-option-scroll\">\n @if (showNullableOption) {\n <div\n (click)=\"selectOption(null)\"\n class=\"input-option\"\n [class.input-option-focused]=\"isNoneOptionActive()\"\n [attr.data-option-index]=\"0\"\n style=\"padding: 3px;\">\n {{noneText | uicTranslate}}\n </div>\n <div class=\"option-divider\"></div>\n }\n \n \n @for (option of filteredOptions; track $index) {\n <div\n (click)=\"selectOption(option)\"\n class=\"input-option\"\n [class.input-option-focused]=\"isOptionActive($index)\"\n [attr.data-option-index]=\"getOptionIndex($index)\">\n @if (option.icon) {\n <i class=\"{{option.icon}} f-{{option.iconColor}}\" style=\"margin-right: 5px;\"></i>\n }\n <div style=\"padding: 2px;\" >\r\n <div class=\"f-medium option-text-highlight\" [innerHTML]=\"highlightMatch(option.text)\"></div>\r\n <div *ngIf=\"showSubtitle\" class=\"f-extralight\" >\r\n {{option.detail}}\r\n </div>\r\n </div>\r\n </div>\r\n @if ( $index < (filteredOptions.length - 1) ) {\r\n <span class=\"option-divider\"></span>\r\n }\r\n \r\n }\r\n \r\n @if (filteredOptions.length == 0) {\r\n <div class=\"fakeinput-alert t-disabled\">{{emptyText | uicTranslate}}</div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n </div>\r\n</ui-input-wrapper>\r\n","import { Component, forwardRef, HostListener, Input } from '@angular/core';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { ButtonColor } from '../../button/button.component';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\n\r\nconst base = createValueAccessor<number>();\r\n\r\n@Component({\r\n selector: 'ui-slider',\r\n imports: [ InputWrapperComponent ],\r\n templateUrl: './ui-slider.component.html',\r\n styleUrls: ['./ui-slider.component.scss', '../input.component.scss'],\r\n providers:[\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicSliderComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicSliderComponent extends base {\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n\r\n @Input() min = 0;\r\n @Input() max = 100;\r\n @Input() step = 1;\r\n @Input() markerCount = 0;\r\n markers: number[] = [];\r\n \r\n @Input() disabled = false;\r\n \r\n @Input() loading = false;\r\n\r\n\r\n ngOnInit(){\r\n if (this.markerCount > 1) {\r\n const interval = (this.max - this.min) / (this.markerCount - 1);\r\n this.markers = Array.from({ length: this.markerCount }, (_, i) => this.min + i * interval);\r\n }\r\n }\r\n\r\n get percent() {\r\n return ((this.value - this.min) / (this.max - this.min)) * 100;\r\n }\r\n\r\n updateFromClientX(clientX: number, el: HTMLElement) {\r\n if (this.disabled) return;\r\n if (!el ) return;\r\n \r\n const rect = el.getBoundingClientRect();\r\n const relativeX = Math.min(Math.max(clientX - rect.left, 0), rect.width);\r\n const rawValue = this.min + (relativeX / rect.width) * (this.max - this.min);\r\n\r\n // Ajustar al step\r\n const stepped = Math.round(rawValue / this.step) * this.step;\r\n\r\n this.value = (Math.min(this.max, Math.max(this.min, stepped)));\r\n this.notifyChange(this.value);\r\n }\r\n \r\n dragging = false;\r\n private activeTrack?: HTMLElement;\r\n\r\n onMouseDown(event: MouseEvent, track: HTMLElement) {\r\n event.preventDefault();\r\n this.dragging = true;\r\n this.activeTrack = track;\r\n this.updateFromClientX(event.clientX, track);\r\n }\r\n \r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (this.disabled || !(this.dragging && this.activeTrack)) return;\r\n this.updateFromClientX(event.clientX, this.activeTrack);\r\n }\r\n\r\n @HostListener('document:mouseup')\r\n onMouseUp() {\r\n this.dragging = false;\r\n this.activeTrack = undefined;\r\n }\r\n}\r\n","<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div class=\"slider-wrapper\">\r\n <div class=\"slider\" #track\r\n (click)=\"updateFromClientX($event.clientX, track)\">\r\n <!-- barra -->\r\n <div class=\"slider-track\"></div>\r\n <div class=\"slider-filled\" [style.width.%]=\"percent\" [class.disabled-bar]=\"disabled\"></div>\r\n \r\n <!-- thumb -->\r\n <div class=\"slider-thumb\"\r\n [style.left.%]=\"percent\"\r\n [class.disabled-thumb]=\"disabled\"\r\n (mousedown)=\"onMouseDown($event, track)\"\r\n #thumb>\r\n <div class=\"slider-thumb-legend\" [class.disabled-legend]=\"disabled\">{{value}}</div>\r\n </div>\r\n \r\n <!-- markers -->\r\n <div class=\"slider-markers\">\r\n @for(m of markers; track $index){\r\n <div class=\"marker\" \r\n [style.left.%]=\"((m - min) / (max - min)) * 100\">\r\n {{ m }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ui-input-wrapper>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, forwardRef } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { AppSelectOption } from '../select/select.component';\r\nimport { ButtonColor } from '../../button/button.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\ntype RadioValue = string | number | null;\r\nconst base = createValueAccessor<RadioValue>();\r\n\r\n@Component({\r\n selector: 'ui-radio',\r\n imports: [CommonModule, InputWrapperComponent, UicTranslatePipe],\r\n templateUrl: './ui-radio.component.html',\r\n styleUrls: ['./ui-radio.component.scss', '../input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicRadioComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class UicRadioComponent extends base {\r\n @Input() icon = '';\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n @Input() options: AppSelectOption[] = [];\r\n @Input() emptyText = 'select.without_options';\r\n @Input() direction: 'column' | 'row' = 'column';\r\n\r\n \r\n isSelected(option: AppSelectOption): boolean {\r\n return this.getOptionValue(option) === this.value;\r\n }\r\n\r\n selectOption(option: AppSelectOption) {\r\n if (this.disabled || this.loading) return;\r\n const nextValue = this.getOptionValue(option);\r\n if (nextValue === this.value) return;\r\n this.notifyChange(nextValue);\r\n }\r\n\r\n private getOptionValue(option: AppSelectOption): RadioValue {\r\n if (option.id === undefined || option.id === null) {\r\n return option.text ?? null;\r\n }\r\n return option.id;\r\n }\r\n}\r\n","<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [tip]=\"tip\"\r\n [error]=\"error\"\r\n [disabled]=\"disabled\"\r\n>\r\n <div\r\n class=\"radio-group\"\r\n role=\"radiogroup\"\r\n [class.loading-input]=\"loading\"\r\n [class.disabled]=\"disabled || loading\"\r\n [class.direction-row]=\"direction === 'row'\"\r\n [attr.aria-disabled]=\"disabled || loading ? true : null\"\r\n >\r\n @if (options.length) {\r\n @for (option of options; track option.id) {\r\n <button\r\n type=\"button\"\r\n class=\"radio-option\"\r\n [disabled]=\"disabled || loading\"\r\n [class.selected]=\"isSelected(option)\"\r\n [attr.aria-checked]=\"isSelected(option)\"\r\n (click)=\"selectOption(option)\"\r\n (keydown.enter)=\"selectOption(option)\"\r\n (keydown.space)=\"selectOption(option)\"\r\n >\r\n <span class=\"radio-control\" aria-hidden=\"true\">\r\n <span class=\"radio-dot\"></span>\r\n </span>\r\n <span class=\"radio-texts\">\r\n <span class=\"radio-label\">{{ option.text }}</span>\r\n @if (option.detail) {\r\n <span class=\"radio-detail\">{{ option.detail }}</span>\r\n }\r\n </span>\r\n </button>\r\n }\r\n } @else {\r\n <div class=\"radio-empty\">{{ emptyText | uicTranslate }}</div>\r\n }\r\n </div>\r\n</ui-input-wrapper>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n ElementRef,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren,\r\n ViewContainerRef,\r\n forwardRef,\r\n inject,\r\n Input,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport {\r\n ConnectedPosition,\r\n FlexibleConnectedPositionStrategy,\r\n Overlay,\r\n OverlayRef,\r\n} from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { ButtonColor, UicButtonComponent } from '../../button/button.component';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\nconst base = createValueAccessor<string>();\r\n\r\ntype ParsedTime = { hour12: number; minute: number; meridiem: 'am' | 'pm' };\r\n\r\n@Component({\r\n selector: 'ui-time-picker',\r\n imports: [CommonModule, UicButtonComponent, InputWrapperComponent, UicTranslatePipe],\r\n templateUrl: './time-picker.component.html',\r\n styleUrls: ['./time-picker.component.scss', '../input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicTimePickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class UicTimePickerComponent extends base {\r\n // Iconos y estado\r\n @Input() icon = '';\r\n @Input() iconColor: 'primary' | 'secondary' = 'primary';\r\n @Input() internalIcon = '';\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() disabled = false;\r\n\r\n // Texto\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n\r\n // Configuracion\r\n @Input() interval = 1; // paso de minutos en el overlay\r\n\r\n // Entrada mostrada (12h) y valor (24h)\r\n displayValue = '';\r\n\r\n // Overlay\r\n @ViewChild('overlayTemplate') overlayTemplate!: TemplateRef<any>;\r\n @ViewChildren('hourOption') hourOptions!: QueryList<ElementRef<HTMLElement>>;\r\n @ViewChildren('minuteOption') minuteOptions!: QueryList<ElementRef<HTMLElement>>;\r\n @ViewChildren('meridiemOption') meridiemOptions!: QueryList<ElementRef<HTMLElement>>;\r\n private overlayRef: OverlayRef | null = null;\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n overlayPositions: ConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ];\r\n\r\n // Listas para construir la hora\r\n hours12 = Array.from({ length: 12 }, (_, i) => i + 1); // 1..12\r\n minutes: number[] = [];\r\n meridiems: Array<'am' | 'pm'> = ['am', 'pm'];\r\n\r\n selectedHour12: number | null = null;\r\n selectedMinute: number | null = null;\r\n selectedMeridiem: 'am' | 'pm' | null = null;\r\n\r\n ngOnInit(): void {\r\n this.rebuildMinutes();\r\n this.syncSelectionFromValue();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['interval']) {\r\n this.rebuildMinutes();\r\n this.syncSelectionFromValue();\r\n }\r\n }\r\n\r\n private rebuildMinutes() {\r\n const step = Math.max(1, Math.min(60, Math.floor(this.interval || 1)));\r\n const mins: number[] = [];\r\n for (let m = 0; m < 60; m += step) {\r\n mins.push(m);\r\n }\r\n this.minutes = mins;\r\n }\r\n\r\n private applySelection(parsed: ParsedTime | null) {\r\n if (!parsed) {\r\n this.clearSelection();\r\n return;\r\n }\r\n this.selectedHour12 = parsed.hour12;\r\n this.selectedMinute = this.minutes.includes(parsed.minute) ? parsed.minute : null;\r\n this.selectedMeridiem = parsed.meridiem;\r\n }\r\n\r\n private clearSelection() {\r\n this.selectedHour12 = null;\r\n this.selectedMinute = null;\r\n this.selectedMeridiem = null;\r\n }\r\n\r\n private syncSelectionFromValue() {\r\n const parsed = this.parseValue(this.value) || this.parseDisplay(this.displayValue);\r\n this.applySelection(parsed);\r\n }\r\n\r\n // --- Overlay ---\r\n openOverlay() {\r\n if (this.disabled) return;\r\n\r\n if (this.overlayRef) {\r\n this.closeOverlay();\r\n }\r\n\r\n const inputEl = this.host.nativeElement.querySelector('.fakeinput');\r\n const width = (inputEl as HTMLElement | null)?.clientWidth;\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy = this.overlay\r\n .position()\r\n .flexibleConnectedTo(inputEl as HTMLElement)\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(false)\r\n .withPush(false);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n width,\r\n });\r\n\r\n const portal = new TemplatePortal(this.overlayTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.closeOverlay());\r\n\r\n this.syncSelectionFromValue();\r\n setTimeout(() => this.scrollToSelection(), 0);\r\n }\r\n\r\n closeOverlay() {\r\n if (this.overlayRef) {\r\n this.onTouched();\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n }\r\n }\r\n\r\n // Selecciones desde overlay\r\n pickHour(hour: number) {\r\n this.selectedHour12 = hour;\r\n this.commitOverlaySelection();\r\n }\r\n\r\n pickMinute(minute: number) {\r\n this.selectedMinute = minute;\r\n this.commitOverlaySelection();\r\n }\r\n\r\n pickMeridiem(meridiem: 'am' | 'pm') {\r\n this.selectedMeridiem = meridiem;\r\n this.commitOverlaySelection();\r\n }\r\n\r\n private commitOverlaySelection() {\r\n const base =\r\n this.parseDisplay(this.displayValue) ||\r\n this.parseValue(this.value) || {\r\n hour12: 12,\r\n minute: 0,\r\n meridiem: 'am' as const,\r\n };\r\n\r\n const hour = this.selectedHour12 ?? base.hour12;\r\n const minute = this.selectedMinute ?? base.minute;\r\n const meridiem = this.selectedMeridiem ?? base.meridiem;\r\n\r\n this.displayValue = this.format12(hour, minute, meridiem);\r\n this.notifyChange(this.compose24(hour, minute, meridiem) as any);\r\n }\r\n\r\n // --- Entrada manual ---\r\n onInput(val: string) {\r\n this.displayValue = val;\r\n }\r\n\r\n onBlur() {\r\n const parsed = this.parseDisplay(this.displayValue);\r\n if (parsed) {\r\n this.displayValue = this.format12(parsed.hour12, parsed.minute, parsed.meridiem);\r\n const value24 = this.compose24(parsed.hour12, parsed.minute, parsed.meridiem);\r\n this.notifyChange(value24 as any);\r\n this.applySelection(parsed);\r\n } else {\r\n this.displayValue = '';\r\n this.notifyChange(null as any);\r\n this.clearSelection();\r\n }\r\n }\r\n\r\n onKeydown(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n (event.target as HTMLInputElement).blur();\r\n }\r\n }\r\n\r\n // --- ControlValueAccessor ---\r\n override writeValue(value: string | null): void {\r\n super.writeValue(value as any);\r\n const parsed = this.parseValue(value || '');\r\n if (parsed) {\r\n this.displayValue = this.format12(parsed.hour12, parsed.minute, parsed.meridiem);\r\n this.applySelection(parsed);\r\n } else {\r\n this.displayValue = '';\r\n this.clearSelection();\r\n }\r\n }\r\n\r\n // --- Helpers de formato ---\r\n private format12(hour12: number, minute: number, meridiem: 'am' | 'pm') {\r\n const hh = String(hour12).padStart(2, '0');\r\n const mm = String(minute).padStart(2, '0');\r\n return `${hh}:${mm} ${meridiem}`;\r\n }\r\n\r\n private compose24(hour12: number, minute: number, meridiem: 'am' | 'pm'): string {\r\n let h24 = hour12 % 12;\r\n if (meridiem === 'pm') h24 += 12;\r\n const hh = String(h24).padStart(2, '0');\r\n const mm = String(minute).padStart(2, '0');\r\n return `${hh}:${mm}`;\r\n }\r\n\r\n private parseDisplay(text: string): ParsedTime | null {\r\n if (!text) return null;\r\n const match = text.trim().match(/^\\s*(\\d{1,2})\\s*:\\s*(\\d{2})(?:\\s*([aApP][mM]))?\\s*$/);\r\n if (!match) return null;\r\n const hour = parseInt(match[1], 10);\r\n const minute = parseInt(match[2], 10);\r\n const meridiem = (match[3] ? match[3].toLowerCase() : 'am') as 'am' | 'pm';\r\n if (hour < 1 || hour > 12) return null;\r\n if (minute < 0 || minute > 59) return null;\r\n return { hour12: hour, minute, meridiem };\r\n }\r\n\r\n private parseValue(value24: string | null | undefined): ParsedTime | null {\r\n if (!value24) return null;\r\n const match = value24.match(/^(\\d{2}):(\\d{2})$/);\r\n if (!match) return null;\r\n const hour24 = parseInt(match[1], 10);\r\n const minute = parseInt(match[2], 10);\r\n if (hour24 < 0 || hour24 > 23) return null;\r\n if (minute < 0 || minute > 59) return null;\r\n const meridiem: 'am' | 'pm' = hour24 < 12 ? 'am' : 'pm';\r\n let hour12 = hour24 % 12;\r\n if (hour12 === 0) hour12 = 12;\r\n return { hour12, minute, meridiem };\r\n }\r\n\r\n private scrollToSelection(retries = 3) {\r\n if (!this.overlayRef || !this.overlayRef.hasAttached()) {\r\n return;\r\n }\r\n\r\n const hourScrolled = this.scrollColumn(this.hourOptions, this.hours12, this.selectedHour12);\r\n const minuteScrolled = this.scrollColumn(this.minuteOptions, this.minutes, this.selectedMinute);\r\n const meridiemScrolled = this.scrollColumn(this.meridiemOptions, this.meridiems, this.selectedMeridiem);\r\n\r\n const hasSelection =\r\n this.selectedHour12 !== null || this.selectedMinute !== null || this.selectedMeridiem !== null;\r\n\r\n if (hasSelection && !(hourScrolled || minuteScrolled || meridiemScrolled) && retries > 0) {\r\n setTimeout(() => this.scrollToSelection(retries - 1), 50);\r\n }\r\n }\r\n\r\n private scrollColumn<T>(\r\n query: QueryList<ElementRef<HTMLElement>>,\r\n values: readonly T[],\r\n selected: T | null,\r\n ): boolean {\r\n if (!query || selected === null) {\r\n return false;\r\n }\r\n const index = values.findIndex((value) => value === selected);\r\n if (index < 0) {\r\n return false;\r\n }\r\n const elements = query.toArray();\r\n const element = elements[index]?.nativeElement;\r\n if (!element) {\r\n return false;\r\n }\r\n try {\r\n element.scrollIntoView({ block: 'center' });\r\n } catch {\r\n element.scrollIntoView();\r\n }\r\n return true;\r\n }\r\n}\r\n","<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div class=\"fakeinput-wrapp\">\r\n <div class=\"fakeinput\" [ngClass]=\"{ errorinput: error, disabledinput: disabled }\">\r\n @if (internalIcon) {\r\n <i class=\"input-internalicon-m {{ internalIcon }}\"></i>\r\n }\r\n <input\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"'time_picker.placeholder' | uicTranslate\"\r\n [value]=\"displayValue\"\r\n #timeInput\r\n (input)=\"onInput(timeInput.value)\"\r\n (blur)=\"onBlur()\"\r\n (keydown)=\"onKeydown($event)\"\r\n />\r\n <ui-button class=\"side-button\" type=\"ghost\" color=\"black\" [iconOnly]=\"true\" size=\"s\" icon=\"ri-arrow-down-wide-line\" [disabled]=\"disabled\" (click)=\"openOverlay()\"></ui-button>\r\n </div>\r\n \r\n <!-- Overlay simple sin estilos: 3 columnas (hora, minuto, am/pm) -->\r\n <ng-template #overlayTemplate>\r\n <div class=\"input-options\">\r\n \r\n <div class=\"time-overlay\">\r\n <div class=\"time-col hours\">\r\n @for (h of hours12; track $index) {\r\n <div\r\n #hourOption\r\n class=\"time-item\"\r\n [class.selected]=\"h === selectedHour12\"\r\n (click)=\"pickHour(h)\"\r\n >\r\n {{ h }}\r\n </div>\r\n }\r\n </div>\r\n <div class=\"time-col minutes\">\r\n @for (m of minutes; track $index) {\r\n <div\r\n #minuteOption\r\n class=\"time-item\"\r\n [class.selected]=\"m === selectedMinute\"\r\n (click)=\"pickMinute(m)\"\r\n >\r\n {{ m < 10 ? ('0' + m) : m }}\r\n </div>\r\n }\r\n </div>\r\n <div class=\"time-col meridiem\">\r\n @for (md of meridiems; track $index) {\r\n <div\r\n #meridiemOption\r\n class=\"time-item\"\r\n [class.selected]=\"md === selectedMeridiem\"\r\n (click)=\"pickMeridiem(md)\"\r\n >\r\n {{ md }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ui-input-wrapper>\r\n","import { Component, forwardRef, Input, SimpleChanges } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { createValueAccessor } from '../dynamic-form/base-value-accessot';\r\nimport { AppSelectOption } from '../inputs/select/select.component';\r\nimport { UicInputComponent } from '../inputs/input/input.component';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\n\r\ntype selectId = number|string;\r\ntype selectedDetailed = {id: selectId; detail?: string};\r\nconst base = createValueAccessor<selectedDetailed[]>();\r\n\r\n@Component({\r\n selector: 'ui-pool-options',\r\n imports: [UicInputComponent, UicTranslatePipe],\r\n templateUrl: './pool-options.component.html',\r\n styleUrls: ['./pool-options.component.scss','../inputs/input.component.scss'],\r\n providers:[\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicPoolOptionsComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicPoolOptionsComponent extends base{\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: 'primary'|'secondary' = 'primary'; //color de ícono externo\r\n @Input() size: 's' | 'm' | 'l' = 'm'; // tamaño general del input\r\n // TEXT\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n // FUNCTIONS\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n @Input() multy = true;\r\n @Input() enabledListView = false;\r\n @Input() listViewTitle = 'common.selected';\r\n @Input() options:AppSelectOption[] = [];\r\n\r\n private selectedItems = new Map<selectId, selectedDetailed>();\r\n\r\n get selectedValues(): selectedDetailed[] {\r\n return Array.from(this.selectedItems.values()).map(item => ({ ...item }));\r\n }\r\n\r\n updateOptions(id:selectId){\r\n if ( this.disabled ) return;\r\n if (this.selectedItems.has(id)) {\r\n this.selectedItems.delete(id);\r\n } else {\r\n if (!this.multy) {\r\n this.selectedItems.clear();\r\n }\r\n this.selectedItems.set(id, { id });\r\n }\r\n this.emitSelectionChange();\r\n }\r\n\r\n updateDetail(id: selectId, detail: string) {\r\n if (!this.selectedItems.has(id)) {\r\n return;\r\n }\r\n const updated: selectedDetailed =\r\n detail?.length ? { id, detail } : { id };\r\n this.selectedItems.set(id, updated);\r\n this.emitSelectionChange();\r\n }\r\n\r\n override writeValue(value: selectedDetailed[] | selectId[] | null = []): void {\r\n const normalized = this.normalizeIncomingValue(value);\r\n super.writeValue(normalized);\r\n this.selectedItems = new Map(normalized.map(item => [item.id, item]));\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['options'] && this.value != null) {\r\n this.selectedItems.clear();\r\n this.emitSelectionChange();\r\n }\r\n }\r\n\r\n isSelected(id: selectId) {\r\n return this.selectedItems.has(id);\r\n }\r\n\r\n getItemName(id:selectId){\r\n return this.options.find(f=>f.id == id)?.text??id;\r\n }\r\n\r\n private emitSelectionChange() {\r\n this.notifyChange(this.selectedValues);\r\n }\r\n\r\n private normalizeIncomingValue(\r\n value: selectedDetailed[] | selectId[] | null | undefined\r\n ): selectedDetailed[] {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n return value\r\n .map(item => {\r\n if (item == null) {\r\n return null;\r\n }\r\n\r\n if (typeof item === 'object' && 'id' in item) {\r\n const normalizedItem = item as selectedDetailed;\r\n const detail = normalizedItem.detail;\r\n return detail?.length ? { id: normalizedItem.id, detail } : { id: normalizedItem.id };\r\n }\r\n\r\n return { id: item as selectId };\r\n })\r\n .filter((entry): entry is selectedDetailed => entry !== null);\r\n }\r\n\r\n}\r\n","<div class=\"input-wrapper \">\r\n @if (icon) {\r\n <i class=\"input-externalicon f-{{iconColor}} {{icon}}\"></i>\r\n }\r\n <div class=\"input-elements\" [style]=\"icon?'max-width: calc(100% - 34px);':''\">\r\n @if (label) {\r\n <div class=\"label inputlabel\" [class.font-error]=\"error\">{{label}} </div>\r\n }\r\n <div>\r\n <div class=\"pool-wrapper\" > \r\n @for (opt of options; track opt.id) {\r\n <div (click)=\"updateOptions(opt.id??'')\" class=\"pool-option\" [class.disabled-opt]=\"disabled\" [class.active-opt]=\"isSelected(opt.id??'')\">{{opt.text}}</div>\r\n }\r\n \r\n </div>\r\n <!-- BLOQUE DE LISTTA DETALLADA -->\r\n @if(enabledListView && selectedValues.length > 0){\r\n <h3 class=\"pool-selected-title\">{{listViewTitle | uicTranslate}}</h3>\r\n <div>\r\n @for (item of selectedValues; track item.id) {\r\n <div class=\"pool-selected\"> \r\n <div class=\"pool-selected-label\">{{getItemName(item.id)}} </div>\r\n <div class=\"pool-selected-input\">\r\n <ui-input [disabled]=\"disabled\">\r\n <input [disabled]=\"disabled\" [placeholder]=\"'common.detail' | uicTranslate\" type=\"text\" [value]=\"item.detail ?? ''\" (input)=\"updateDetail(item.id, $any($event.target).value)\">\r\n </ui-input>\r\n @if (!disabled) {\r\n <div class=\"pool-selected-button\" (click)=\"updateOptions(item.id)\" >\r\n <i class=\"ri-delete-bin-5-line\" ></i>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <!-- ALERTS -->\r\n @if (error) {\r\n <div class=\"fakeinput-alert f-red\">{{error}}</div>\r\n }\r\n @if (tip) {\r\n <div class=\"fakeinput-alert tip\">{{tip}}</div>\r\n }\r\n </div>\r\n</div>\r\n","import { AfterViewInit, Directive, DoCheck, ElementRef, HostListener, Input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[textareaAutoresize]'\r\n})\r\nexport class UicTextareaAutoresizeDirective implements AfterViewInit, DoCheck {\r\n private _minRows: number | null = null;\r\n private _maxRows: number | null = null;\r\n private initialRows: number | null = null;\r\n private lastValue = '';\r\n private enabled = true;\r\n\r\n constructor(private readonly elementRef: ElementRef<HTMLTextAreaElement>) {}\r\n\r\n @Input()\r\n set minRows(value: number | string | null | undefined) {\r\n this.setMinRows(value);\r\n }\r\n\r\n @Input()\r\n set maxRows(value: number | string | null | undefined) {\r\n this.setMaxRows(value);\r\n }\r\n\r\n @Input('textareaAutoresize')\r\n set textareaAutoresize(value: boolean | string | null | undefined) {\r\n this.enabled = this.coerceBoolean(value);\r\n if (!this.enabled) {\r\n this.resetStyles();\r\n } else {\r\n this.resizeToFitContent(true);\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const textarea = this.elementRef.nativeElement;\r\n this.initialRows = textarea.rows || null;\r\n this.lastValue = textarea.value;\r\n this.resizeToFitContent(true);\r\n }\r\n\r\n ngDoCheck(): void {\r\n const textarea = this.elementRef.nativeElement;\r\n if (textarea.value !== this.lastValue) {\r\n this.lastValue = textarea.value;\r\n this.resizeToFitContent(true);\r\n }\r\n }\r\n\r\n @HostListener('input')\r\n onInput(): void {\r\n this.resizeToFitContent();\r\n }\r\n\r\n @HostListener('window:resize')\r\n onWindowResize(): void {\r\n this.resizeToFitContent(true);\r\n }\r\n\r\n private resizeToFitContent(force = false): void {\r\n if (!this.enabled) {\r\n return;\r\n }\r\n\r\n const textarea = this.elementRef.nativeElement;\r\n if (!textarea) {\r\n return;\r\n }\r\n\r\n if (!force && document.activeElement !== textarea) {\r\n return;\r\n }\r\n\r\n const style = window.getComputedStyle(textarea);\r\n const boxSizing = style.boxSizing;\r\n const paddingTop = this.parseCssValue(style.paddingTop);\r\n const paddingBottom = this.parseCssValue(style.paddingBottom);\r\n const borderTop = this.parseCssValue(style.borderTopWidth);\r\n const borderBottom = this.parseCssValue(style.borderBottomWidth);\r\n const lineHeight = this.getLineHeight(style);\r\n\r\n const padding = paddingTop + paddingBottom;\r\n const border = borderTop + borderBottom;\r\n const isBorderBox = boxSizing === 'border-box';\r\n const heightAdjustment = isBorderBox ? border : -padding;\r\n const rowExtras = isBorderBox ? padding + border : 0;\r\n\r\n let minRows = this._minRows;\r\n if (minRows === null && this.initialRows !== null && this.initialRows > 0) {\r\n minRows = this.initialRows;\r\n }\r\n\r\n const maxRows = this._maxRows;\r\n\r\n let minHeight = 0;\r\n let maxHeight = Number.POSITIVE_INFINITY;\r\n\r\n if (minRows !== null && lineHeight > 0) {\r\n minHeight = Math.ceil(lineHeight * minRows + rowExtras);\r\n }\r\n\r\n if (maxRows !== null && lineHeight > 0) {\r\n maxHeight = Math.ceil(lineHeight * maxRows + rowExtras);\r\n if (minHeight > 0) {\r\n maxHeight = Math.max(maxHeight, minHeight);\r\n }\r\n }\r\n\r\n textarea.style.height = 'auto';\r\n let newHeight = textarea.scrollHeight + heightAdjustment;\r\n\r\n if (minHeight > 0) {\r\n newHeight = Math.max(newHeight, minHeight);\r\n }\r\n if (maxHeight !== Number.POSITIVE_INFINITY) {\r\n newHeight = Math.min(newHeight, maxHeight);\r\n }\r\n\r\n textarea.style.height = `${newHeight}px`;\r\n if (maxHeight !== Number.POSITIVE_INFINITY) {\r\n textarea.style.overflowY = textarea.scrollHeight + heightAdjustment > maxHeight ? 'auto' : 'hidden';\r\n } else {\r\n textarea.style.overflowY = 'hidden';\r\n }\r\n }\r\n\r\n private getLineHeight(style: CSSStyleDeclaration): number {\r\n const lineHeight = this.parseCssValue(style.lineHeight);\r\n if (!isNaN(lineHeight) && lineHeight > 0) {\r\n return lineHeight;\r\n }\r\n\r\n const measured = this.measureLineHeight(style);\r\n if (measured > 0) {\r\n return measured;\r\n }\r\n\r\n const fontSize = this.parseCssValue(style.fontSize);\r\n if (!isNaN(fontSize) && fontSize > 0) {\r\n return fontSize * 1.2;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n private parseCssValue(value: string): number {\r\n const parsed = parseFloat(value);\r\n return Number.isNaN(parsed) ? 0 : parsed;\r\n }\r\n\r\n private measureLineHeight(style: CSSStyleDeclaration): number {\r\n const textarea = this.elementRef.nativeElement;\r\n const clone = document.createElement('textarea');\r\n\r\n clone.style.position = 'absolute';\r\n clone.style.visibility = 'hidden';\r\n clone.style.top = '-9999px';\r\n clone.style.left = '-9999px';\r\n clone.style.height = 'auto';\r\n clone.style.minHeight = '0';\r\n clone.style.maxHeight = 'none';\r\n clone.style.overflow = 'hidden';\r\n clone.style.boxSizing = style.boxSizing;\r\n clone.style.width = style.width;\r\n clone.style.fontFamily = style.fontFamily;\r\n clone.style.fontSize = style.fontSize;\r\n clone.style.fontWeight = style.fontWeight;\r\n clone.style.fontStyle = style.fontStyle;\r\n clone.style.letterSpacing = style.letterSpacing;\r\n clone.style.textTransform = style.textTransform;\r\n clone.style.paddingTop = style.paddingTop;\r\n clone.style.paddingBottom = style.paddingBottom;\r\n clone.style.paddingLeft = style.paddingLeft;\r\n clone.style.paddingRight = style.paddingRight;\r\n clone.style.borderTopWidth = style.borderTopWidth;\r\n clone.style.borderBottomWidth = style.borderBottomWidth;\r\n clone.style.borderLeftWidth = style.borderLeftWidth;\r\n clone.style.borderRightWidth = style.borderRightWidth;\r\n clone.style.borderStyle = style.borderStyle;\r\n clone.style.lineHeight = style.lineHeight;\r\n\r\n clone.rows = 1;\r\n clone.value = ' ';\r\n document.body.appendChild(clone);\r\n\r\n const paddingTop = this.parseCssValue(style.paddingTop);\r\n const paddingBottom = this.parseCssValue(style.paddingBottom);\r\n const padding = paddingTop + paddingBottom;\r\n const lineHeight = clone.scrollHeight - padding;\r\n\r\n document.body.removeChild(clone);\r\n\r\n if (textarea.ownerDocument?.defaultView?.getComputedStyle) {\r\n return Math.max(0, lineHeight);\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n setMinRows(value: number | string | null | undefined): void {\r\n this._minRows = this.coerceNumber(value);\r\n this.resizeToFitContent(true);\r\n }\r\n\r\n setMaxRows(value: number | string | null | undefined): void {\r\n this._maxRows = this.coerceNumber(value);\r\n this.resizeToFitContent(true);\r\n }\r\n\r\n private resetStyles(): void {\r\n const textarea = this.elementRef.nativeElement;\r\n if (!textarea) {\r\n return;\r\n }\r\n\r\n textarea.style.height = '';\r\n textarea.style.overflowY = '';\r\n }\r\n\r\n private coerceNumber(value: number | string | null | undefined): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const parsed = typeof value === 'number' ? value : parseFloat(value);\r\n return Number.isNaN(parsed) ? null : parsed;\r\n }\r\n\r\n private coerceBoolean(value: boolean | string | null | undefined): boolean {\r\n if (value === '' || value === true) {\r\n return true;\r\n }\r\n if (value === false || value === null || value === undefined) {\r\n return false;\r\n }\r\n if (typeof value === 'string') {\r\n const normalized = value.trim().toLowerCase();\r\n if (normalized === 'true') {\r\n return true;\r\n }\r\n if (normalized === 'false') {\r\n return false;\r\n }\r\n }\r\n return !!value;\r\n }\r\n}\r\n","import { Directive, Host, Input, Optional } from '@angular/core';\r\nimport { UicTextareaAutoresizeDirective } from './textarea-autoresize.directive';\r\n\r\n@Directive({\r\n selector: '[textareaAutoresizeMaxRows]'\r\n})\r\nexport class UicTextareaAutoresizeMaxRowsDirective {\r\n constructor(\r\n @Optional() @Host() private readonly autosize: UicTextareaAutoresizeDirective\r\n ) {}\r\n\r\n @Input()\r\n set textareaAutoresizeMaxRows(value: number | string | null | undefined) {\r\n this.autosize?.setMaxRows(value);\r\n }\r\n}\r\n","import { Directive, Host, Input, Optional } from '@angular/core';\r\nimport { UicTextareaAutoresizeDirective } from './textarea-autoresize.directive';\r\n\r\n@Directive({\r\n selector: '[textareaAutoresizeMinRows]'\r\n})\r\nexport class UicTextareaAutoresizeMinRowsDirective {\r\n constructor(\r\n @Optional() @Host() private readonly autosize: UicTextareaAutoresizeDirective\r\n ) {}\r\n\r\n @Input()\r\n set textareaAutoresizeMinRows(value: number | string | null | undefined) {\r\n this.autosize?.setMinRows(value);\r\n }\r\n}\r\n","import { Injectable, DestroyRef, inject, signal, computed } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { FormGroup } from '@angular/forms';\nimport { uicFormValuesRecord } from './form.models';\n\n@Injectable()\nexport class UicFormStateService {\n private readonly destroyRef = inject(DestroyRef);\n private formValueSignal = signal<uicFormValuesRecord>({});\n\n private currentForm: FormGroup | null = null;\n private formChangesSub: Subscription | null = null;\n\n values = computed(() => this.formValueSignal());\n form = computed(() => this.currentForm);\n\n setForm(form: FormGroup): void {\n if (this.currentForm === form) return;\n\n if (this.formChangesSub) {\n this.formChangesSub.unsubscribe();\n this.formChangesSub = null;\n }\n\n this.currentForm = form;\n this.formValueSignal.set(form.getRawValue() ?? {});\n\n this.formChangesSub = form.valueChanges.subscribe(() => {\n this.formValueSignal.set(form.getRawValue() ?? {});\n });\n }\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.formChangesSub?.unsubscribe();\n this.formChangesSub = null;\n });\n }\n\n getFieldValue(fieldName: string): any {\n if (!this.currentForm) return undefined;\n return this.currentForm.get([fieldName])?.value;\n }\n}\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Component, Input, NgZone, OnDestroy, computed, effect, inject, signal } from '@angular/core';\r\nimport { AbstractControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { Observable } from 'rxjs';\r\nimport { ButtonColor, UicButtonComponent } from '../../button/button.component';\r\nimport { UicCheckboxComponent } from '../../inputs/checkbox/checkbox.component';\r\nimport { UicDatePickerComponent } from '../../inputs/date-picker/date-picker.component';\r\nimport { UicFileInputComponent } from '../../inputs/file-input/file-input.component';\r\nimport { UicInputComponent } from '../../inputs/input/input.component';\r\nimport { UicMultySelectComponent } from '../../inputs/multy-select/multy-select.component';\r\nimport { UicPhoneInputComponent } from '../../inputs/phone-input/phone-input.component';\r\nimport { UicSearcherComponent } from '../../inputs/uic-searcher/uic-searcher.component';\r\nimport { UicSelectComponent } from '../../inputs/select/select.component';\r\nimport { UicSliderComponent } from '../../inputs/ui-slider/ui-slider.component';\r\nimport { UicRadioComponent } from '../../inputs/ui-radio/ui-radio.component';\r\nimport { UicTimePickerComponent } from '../../inputs/time-picker/time-picker.component';\r\nimport { UicPoolOptionsComponent } from '../../pool-options/pool-options.component';\r\nimport { UicTextareaAutoresizeDirective } from '../../../directives/textarea-autoresize.directive';\r\nimport { UicTextareaAutoresizeMaxRowsDirective } from '../../../directives/textarea-autoresize-max-rows.directive';\r\nimport { UicTextareaAutoresizeMinRowsDirective } from '../../../directives/textarea-autoresize-min-rows.directive';\r\nimport { UicPushAlertService } from '../../../services/push-alert.service';\r\nimport { UicTranslateService } from '../../../services/translate.service';\r\nimport { FieldVisibilityRule, FormField } from '../form.models';\r\nimport { UicFormStateService } from '../form-state.service';\r\n\r\ninterface DynamicFieldState {\r\n field: FormField;\r\n control: AbstractControl | null;\r\n value: any;\r\n}\r\n\r\n@Component({\r\n selector: 'ui-dynamic-form',\r\n imports: [\r\n CommonModule,\r\n UicDatePickerComponent,\r\n ReactiveFormsModule,\r\n UicSliderComponent,\r\n UicButtonComponent,\r\n UicPoolOptionsComponent,\r\n UicTimePickerComponent,\r\n UicRadioComponent,\r\n UicSearcherComponent,\r\n UicMultySelectComponent,\r\n UicFileInputComponent,\r\n UicSelectComponent,\r\n UicTextareaAutoresizeDirective,\r\n UicTextareaAutoresizeMinRowsDirective,\r\n UicTextareaAutoresizeMaxRowsDirective,\r\n UicInputComponent,\r\n UicCheckboxComponent,\r\n UicPhoneInputComponent,\r\n FormsModule\r\n ],\r\n templateUrl: './dynamic-form.component.html',\r\n styleUrl: './dynamic-form.component.scss'\r\n})\r\nexport class UicDynamicFormComponent implements OnDestroy {\r\n private readonly fieldsSignal = signal<FormField[]>([]);\r\n private readonly formSignal = signal<FormGroup | null>(null);\r\n private readonly disabledSignal = signal(false);\r\n private readonly formState = inject(UicFormStateService);\r\n private readonly http = inject(HttpClient);\r\n private readonly alertS = inject(UicPushAlertService);\r\n private readonly i18n = inject(UicTranslateService);\r\n private readonly fieldVisibilityState = new Map<string, boolean>();\r\n private readonly searchFnCache = new WeakMap<FormField, (query: string) => Observable<any[]>>();\r\n private readonly searchDisplayFnCache = new WeakMap<FormField, (item: any) => string>();\r\n private readonly searchIsEnabledFnCache = new WeakMap<FormField, (item: any) => boolean>();\r\n\r\n private recognition: any = null;\r\n private voiceStopTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n @Input() set fields(value: FormField[]) {\r\n this.fieldsSignal.set(value ?? []);\r\n }\r\n get fields(): FormField[] {\r\n return this.fieldsSignal();\r\n }\r\n\r\n @Input({ required: true }) set form(value: FormGroup) {\r\n this.formSignal.set(value);\r\n this.formState.setForm(value);\r\n }\r\n get form(): FormGroup {\r\n return this.formSignal() as FormGroup;\r\n }\r\n\r\n @Input() set disabled(value: boolean) {\r\n this.disabledSignal.set(!!value);\r\n }\r\n get disabled(): boolean {\r\n return this.disabledSignal();\r\n }\r\n @Input() voiceToTextSilenceMs = 2000;\r\n @Input() cols = 2;\r\n @Input() fileUidResolverFn?: (fileUid: string) => void;\r\n\r\n listeningField: string | null = null;\r\n\r\n readonly fieldStates = computed<DynamicFieldState[]>(() => {\r\n const currentForm = this.formSignal();\r\n this.formState.values();\r\n\r\n return this.fieldsSignal().map(field => {\r\n const control = currentForm?.get([field.name]) ?? null;\r\n return {\r\n field,\r\n control,\r\n value: control?.value ?? null,\r\n };\r\n });\r\n });\r\n\r\n readonly visibleFieldStates = computed(() => {\r\n return this.fieldStates().filter(({ field }) => {\r\n if (!field.visibilityRules?.length) return true;\r\n return field.visibilityRules.every(rule => this.matchesVisibilityRule(rule));\r\n });\r\n });\r\n\r\n private readonly fieldStateSyncEffect = effect(() => {\r\n this.visibleFieldStates();\r\n this.syncFieldEnabledState();\r\n });\r\n\r\n readonly colorToIcon: Record<string, string> = {\r\n red: 'ri-error-warning-line',\r\n yellow: 'ri-error-warning-line',\r\n green: 'ri-checkbox-circle-line',\r\n };\r\n\r\n constructor(private readonly ngZone: NgZone) {}\r\n\r\n ngOnDestroy(): void {\r\n this.clearVoiceStopTimer();\r\n this.recognition?.abort?.();\r\n this.recognition = null;\r\n this.listeningField = null;\r\n }\r\n\r\n getGridColumn(field: FormField): string {\r\n const requestedSpan = Number(field.colSpan ?? 1);\r\n const normalizedSpan = Math.max(1, Number.isNaN(requestedSpan) ? 1 : requestedSpan);\r\n const normalizedCols = Math.max(1, Number(this.cols) || 1);\r\n const effectiveSpan = Math.min(normalizedSpan, normalizedCols);\r\n if (field.newLine) {\r\n return `1 / span ${effectiveSpan}`;\r\n }\r\n return `span ${effectiveSpan} / span ${effectiveSpan}`;\r\n }\r\n\r\n private getValueByFieldName(fieldName: string): any {\r\n const formValues = this.formState.values();\r\n if (Object.prototype.hasOwnProperty.call(formValues, fieldName)) {\r\n return formValues[fieldName];\r\n }\r\n\r\n const parts = fieldName.split('.');\r\n if (parts.length === 1) return this.formState.getFieldValue(fieldName);\r\n\r\n let current: any = this.formState.getFieldValue(parts[0]);\r\n for (let i = 1; i < parts.length; i++) {\r\n if (current == null || !Object.prototype.hasOwnProperty.call(current, parts[i])) {\r\n return undefined;\r\n }\r\n current = current[parts[i]];\r\n }\r\n return current;\r\n }\r\n\r\n private syncFieldEnabledState() {\r\n const currentForm = this.formSignal();\r\n if (!currentForm) return;\r\n\r\n const formDisabled = this.disabledSignal();\r\n const fieldStates = this.fieldStates();\r\n const visibleNames = new Set(this.visibleFieldStates().map(({ field }) => field.name));\r\n const allFieldNames = new Set(fieldStates.map(({ field }) => field.name));\r\n\r\n fieldStates.forEach(({ field, control }) => {\r\n if (!control) return;\r\n\r\n const isVisible = visibleNames.has(field.name);\r\n const wasVisible = this.fieldVisibilityState.get(field.name);\r\n\r\n if (!isVisible && wasVisible) {\r\n control.setValue(this.getClearValue(field.type), { emitEvent: false });\r\n control.markAsPristine();\r\n control.markAsUntouched();\r\n }\r\n\r\n const shouldEnable = isVisible && !formDisabled && !field.disabled;\r\n if (shouldEnable && control.disabled) {\r\n control.enable({ emitEvent: false });\r\n } else if (!shouldEnable && control.enabled) {\r\n control.disable({ emitEvent: false });\r\n }\r\n\r\n this.fieldVisibilityState.set(field.name, isVisible);\r\n });\r\n\r\n for (const key of this.fieldVisibilityState.keys()) {\r\n if (!allFieldNames.has(key)) {\r\n this.fieldVisibilityState.delete(key);\r\n }\r\n }\r\n }\r\n\r\n private getClearValue(fieldType: string): any {\r\n if (fieldType === 'checkbox' || fieldType === 'switch') {\r\n return false;\r\n }\r\n\r\n if (fieldType === 'multyselect') {\r\n return [];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private matchesVisibilityRule(rule: FieldVisibilityRule): boolean {\r\n const currentValue = this.getValueByFieldName(rule.fieldName);\r\n\r\n switch (rule.operator) {\r\n case 'equals': {\r\n if (typeof currentValue === 'boolean') {\r\n const normalizedRuleValue = this.parseBooleanLike(rule.value);\r\n if (normalizedRuleValue !== null) {\r\n return currentValue === normalizedRuleValue;\r\n }\r\n }\r\n return currentValue === rule.value;\r\n }\r\n case 'notEquals': {\r\n if (typeof currentValue === 'boolean') {\r\n const normalizedRuleValue = this.parseBooleanLike(rule.value);\r\n if (normalizedRuleValue !== null) {\r\n return currentValue !== normalizedRuleValue;\r\n }\r\n }\r\n return currentValue !== rule.value;\r\n }\r\n case 'greaterThan':\r\n return Number(currentValue) > Number(rule.value);\r\n case 'lessThan':\r\n return Number(currentValue) < Number(rule.value);\r\n case 'includes':\r\n if (currentValue == null) return false;\r\n if (Array.isArray(currentValue)) {\r\n return currentValue.includes(rule.value);\r\n }\r\n if (typeof currentValue === 'string') {\r\n return currentValue.includes(rule.value);\r\n }\r\n return false;\r\n case 'notIncludes':\r\n if (currentValue == null) return true;\r\n if (Array.isArray(currentValue)) {\r\n return !currentValue.includes(rule.value);\r\n }\r\n if (typeof currentValue === 'string') {\r\n return !currentValue.includes(rule.value);\r\n }\r\n return true;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n private parseBooleanLike(value: any): boolean | null {\r\n if (typeof value === 'boolean') return value;\r\n if (typeof value === 'number') {\r\n if (value === 1) return true;\r\n if (value === 0) return false;\r\n return null;\r\n }\r\n if (typeof value !== 'string') return null;\r\n\r\n const normalized = value.trim().toLowerCase();\r\n if (normalized === 'true' || normalized === '1') return true;\r\n if (normalized === 'false' || normalized === '0') return false;\r\n return null;\r\n }\r\n\r\n getControlErrorMessages(control: AbstractControl | null, field: FormField): string[] {\r\n if (!control?.errors) return [];\r\n if (!(control.touched || control.dirty)) return [];\r\n\r\n return Object.keys(control.errors).map(errorKey => {\r\n const error = control.errors?.[errorKey];\r\n const mapper = this.errorMessages[errorKey];\r\n return mapper\r\n ? mapper(error, field)\r\n : this.i18n.translate('validation.invalid', {\r\n field: field.label ?? field.name,\r\n });\r\n });\r\n }\r\n\r\n isListening(fieldName: string): boolean {\r\n return this.listeningField === fieldName;\r\n }\r\n\r\n private readonly errorMessages: Record<string, (error: any, field: FormField) => string> = {\r\n required: (_err, field) =>\r\n this.i18n.translate('validation.required', { field: field.label ?? field.name }),\r\n min: (err, field) =>\r\n this.i18n.translate('validation.min', {\r\n field: field.label ?? field.name,\r\n min: err.min,\r\n }),\r\n max: (err, field) =>\r\n this.i18n.translate('validation.max', {\r\n field: field.label ?? field.name,\r\n max: err.max,\r\n }),\r\n minlength: (err, field) =>\r\n this.i18n.translate('validation.minlength', {\r\n field: field.label ?? field.name,\r\n requiredLength: err.requiredLength,\r\n }),\r\n maxlength: (err, field) =>\r\n this.i18n.translate('validation.maxlength', {\r\n field: field.label ?? field.name,\r\n requiredLength: err.requiredLength,\r\n }),\r\n pattern: (_err, field) =>\r\n this.i18n.translate('validation.pattern', { field: field.label ?? field.name })\r\n };\r\n\r\n getInputColor(field: FormField, value: string | number): ButtonColor {\r\n const scale = field.internalColorScale;\r\n const cv = Number(value);\r\n const order = field.internalColorScaleOrder ?? 'asc';\r\n\r\n if (!Array.isArray(scale) || scale.length <= 1 || Number.isNaN(cv)) {\r\n return field.internalIconColor || 'grey';\r\n }\r\n\r\n const sorted = [...scale].sort((a, b) => a - b);\r\n const len = sorted.length;\r\n\r\n if (len === 2) {\r\n const [min, max] = sorted;\r\n return cv > min && cv <= max ? 'green' : 'red';\r\n }\r\n\r\n const colorSchemes: Record<'asc' | 'desc', Record<number, ButtonColor[]>> = {\r\n asc: {\r\n 3: ['red', 'green'],\r\n 4: ['red', 'yellow', 'green'],\r\n },\r\n desc: {\r\n 3: ['green', 'red'],\r\n 4: ['green', 'yellow', 'red'],\r\n },\r\n };\r\n\r\n const colors = colorSchemes[order][len] || [];\r\n for (let i = 0; i < colors.length; i++) {\r\n if (cv > sorted[i] && cv <= sorted[i + 1]) return colors[i];\r\n }\r\n\r\n return 'black';\r\n }\r\n\r\n getIconByColor(field: FormField, color: string): ButtonColor {\r\n if (!field.internalIcon && field.internalColorScale && field.internalColorScale.length > 1) {\r\n return this.colorToIcon[color] as ButtonColor;\r\n }\r\n return 'grey';\r\n }\r\n\r\n getSearcherFn(field: FormField): ((query: string) => Observable<any[]>) | undefined {\r\n if (field.searchFn) {\r\n return field.searchFn;\r\n }\r\n\r\n if (!field.searchApi) {\r\n return undefined;\r\n }\r\n\r\n const cached = this.searchFnCache.get(field);\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const searchFn = (query: string) =>\r\n this.http.get<any[]>(field.searchApi!, {\r\n params: { query }\r\n });\r\n\r\n this.searchFnCache.set(field, searchFn);\r\n return searchFn;\r\n }\r\n\r\n getSearcherDisplayFn(field: FormField): ((item: any) => string) | undefined {\r\n if (field.searchFn) {\r\n return field.searchDisplayFn;\r\n }\r\n\r\n if (!field.searchApi) {\r\n return field.searchDisplayFn;\r\n }\r\n\r\n const cached = this.searchDisplayFnCache.get(field);\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const displayFn = (item: { text?: string }) => item?.text ?? '';\r\n this.searchDisplayFnCache.set(field, displayFn);\r\n return displayFn;\r\n }\r\n\r\n getSearcherIsEnabledFn(field: FormField): ((item: any) => boolean) | undefined {\r\n if (field.searchFn) {\r\n return field.searchIsEnabledFn;\r\n }\r\n\r\n if (!field.searchApi) {\r\n return field.searchIsEnabledFn;\r\n }\r\n\r\n const cached = this.searchIsEnabledFnCache.get(field);\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const isEnabledFn = () => true;\r\n this.searchIsEnabledFnCache.set(field, isEnabledFn);\r\n return isEnabledFn;\r\n }\r\n\r\n private clearVoiceStopTimer() {\r\n if (this.voiceStopTimer) {\r\n clearTimeout(this.voiceStopTimer);\r\n this.voiceStopTimer = null;\r\n }\r\n }\r\n\r\n private scheduleVoiceStop(recognition: any) {\r\n this.clearVoiceStopTimer();\r\n this.voiceStopTimer = setTimeout(() => recognition.stop?.(), this.voiceToTextSilenceMs);\r\n }\r\n\r\n voiceToText(target: HTMLTextAreaElement, fieldName: string) {\r\n if (typeof window === 'undefined') return;\r\n\r\n const SpeechRecognitionCtor =\r\n (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition;\r\n\r\n if (!SpeechRecognitionCtor) {\r\n this.alertS.show({\r\n type: 'warning',\r\n icon: 'ri-bug-line',\r\n title: this.i18n.translate('voice.browser_incompatibility_title'),\r\n message: this.i18n.translate('voice.browser_incompatibility_message')\r\n });\r\n return;\r\n }\r\n\r\n if (this.recognition) {\r\n this.recognition.abort?.();\r\n this.recognition = null;\r\n this.listeningField = null;\r\n this.clearVoiceStopTimer();\r\n }\r\n\r\n const recognition = new SpeechRecognitionCtor();\r\n recognition.lang = 'es-ES';\r\n recognition.interimResults = false;\r\n recognition.maxAlternatives = 1;\r\n recognition.continuous = true;\r\n\r\n recognition.onstart = () => {\r\n this.ngZone.run(() => {\r\n this.listeningField = fieldName;\r\n });\r\n this.scheduleVoiceStop(recognition);\r\n };\r\n\r\n recognition.onresult = (event: any) => {\r\n const transcript = event?.results?.[0]?.[0]?.transcript ?? '';\r\n if (!transcript) return;\r\n\r\n const currentValue = target.value ?? '';\r\n const needsSpace =\r\n currentValue.length > 0 &&\r\n !currentValue.endsWith(' ') &&\r\n !transcript.startsWith(' ');\r\n const updatedValue = `${currentValue}${needsSpace ? ' ' : ''}${transcript}`;\r\n\r\n target.value = updatedValue;\r\n target.dispatchEvent(new Event('input', { bubbles: true }));\r\n\r\n const control = this.formSignal()?.get([fieldName]);\r\n if (control) {\r\n this.ngZone.run(() => {\r\n control.setValue(updatedValue);\r\n control.markAsDirty();\r\n control.markAsTouched();\r\n });\r\n }\r\n this.scheduleVoiceStop(recognition);\r\n };\r\n\r\n recognition.onspeechstart = () => {\r\n this.clearVoiceStopTimer();\r\n };\r\n\r\n recognition.onspeechend = () => {\r\n this.scheduleVoiceStop(recognition);\r\n };\r\n\r\n recognition.onerror = (event: any) => {\r\n this.ngZone.run(() => {\r\n console.error(this.i18n.translate('voice.voice_error'), event);\r\n this.listeningField = null;\r\n });\r\n this.clearVoiceStopTimer();\r\n };\r\n\r\n recognition.onend = () => {\r\n this.ngZone.run(() => {\r\n this.recognition = null;\r\n this.listeningField = null;\r\n });\r\n this.clearVoiceStopTimer();\r\n };\r\n\r\n this.recognition = recognition;\r\n target.focus();\r\n this.ngZone.run(() => {\r\n this.listeningField = fieldName;\r\n });\r\n recognition.start();\r\n }\r\n}\r\n","<div class=\"form\" [ngStyle]=\"{'--cols': cols, '--min': '180px'}\" [formGroup]=\"form\">\r\n @for (state of visibleFieldStates(); track state.field.name) {\r\n @let field = state.field;\r\n @let control = state.control;\r\n @let currentValue = state.value ?? '';\r\n @let error = getControlErrorMessages(control, field)[0];\r\n\r\n <div [style.grid-column]=\"getGridColumn(field)\">\n @if (['text', 'number'].includes(field.type)) {\r\n @let inputColor = getInputColor(field, currentValue);\r\n <ui-input\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [icon]=\"field.icon??''\"\r\n [disabled]=\"!!control?.disabled\"\r\n [internalIconColor]=\"inputColor\"\r\n [internalIcon]=\"field.internalIcon || (currentValue !== '' ? getIconByColor(field, inputColor) : '')\"\r\n [loading]=\"field.loading??false\"\r\n [tip]=\"field.tip??''\">\r\n <input #inp\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [type]=\"field.type\"\r\n [step]=\"field.step\"\r\n [min]=\"field.min\"\r\n [max]=\"field.max\"\r\n [minLength]=\"field.minLength||null\"\r\n [maxlength]=\"field.maxLength||null\"\r\n [placeholder]=\"field.placeholder??field.label\"/>\r\n @if (field.maxLength && field.showCounter) {\r\n <span counter>{{inp.value.length}} /{{field.maxLength}}</span>\r\n }\r\n </ui-input>\r\n }\r\n @if (field.type === 'textarea') {\r\n <ui-input\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [icon]=\"field.icon??''\"\r\n [disabled]=\"!!control?.disabled\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [loading]=\"field.loading??false\"\r\n [tip]=\"field.tip??''\">\r\n <textarea #ta\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [minLength]=\"field.minLength||null\"\r\n [maxlength]=\"field.maxLength||null\"\r\n [textareaAutoresize]=\"field.textareaResize\"\r\n [textareaAutoresizeMinRows]=\"field.resizeMinRows??1\"\r\n [textareaAutoresizeMaxRows]=\"field.resizeMaxRows??5\"\r\n [rows]=\"field.resizeMinRows??3\"\r\n [placeholder]=\"field.placeholder??field.label\"\r\n ></textarea>\r\n @if (field.voiceToTextEnabled && !control?.disabled) {\r\n @let listening = isListening(field.name);\r\n <div class=\"speak-icon\" (click)=\"ta.focus()\">\r\n <ui-button\r\n [disabled]=\"listening\"\r\n style=\"margin-bottom: 2px;\"\r\n (click)=\"voiceToText(ta, field.name)\"\r\n [icon]=\"listening?'ri-mic-fill':'ri-mic-line'\"\r\n [type]=\"listening?'filled':'bordered'\"\r\n size=\"s\"\r\n [iconOnly]=\"true\"\r\n ></ui-button>\r\n @if (listening) {\r\n <i class=\"ri-voiceprint-line\"></i>\r\n }\r\n </div>\r\n }\r\n @if (field.showCounter) {\r\n <span counter>\r\n {{ta.value.length}}\r\n @if (field.maxLength) {\r\n /{{field.maxLength}}\r\n }\r\n </span>\r\n }\r\n </ui-input>\r\n }\r\n @if (field.type === 'phone') {\r\n <ui-phone-input\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [icon]=\"field.icon??''\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [loading]=\"field.loading??false\"\r\n [tip]=\"field.tip??''\"\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [placeholder]=\"field.placeholder||field.label||''\"\r\n >\r\n </ui-phone-input>\r\n }\r\n @else if (field.type === 'date') {\r\n <ui-date-picker\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [tip]=\"field.tip??''\"\r\n [justMonth]=\"!!field.monthMode\"\r\n [min]=\"field.minDate??''\"\r\n [max]=\"field.maxDate??''\"\r\n [monthDay]=\"field.monthDay||'first'\"\r\n [formControlName]=\"field.name\"\r\n ></ui-date-picker>\r\n }\r\n @else if (field.type === 'time') {\r\n <ui-time-picker\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [tip]=\"field.tip??''\"\r\n [interval]=\"field.timeInterval??5\"\r\n [formControlName]=\"field.name\"\r\n ></ui-time-picker>\r\n }\r\n @else if (field.type === 'select') {\r\n <ui-select\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [loading]=\"field.loading??false\"\r\n [nullable]=\"field.selectNullable??false\"\r\n [searcherEnabled]=\"field.selectSearchEnabled??false\"\r\n [tip]=\"field.tip??''\"\r\n [formControlName]=\"field.name\"\r\n [options]=\"field.options || []\"\r\n ></ui-select>\r\n }\r\n @else if (field.type === 'multyselect') {\r\n <ui-multy-select\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [loading]=\"field.loading??false\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [tip]=\"field.tip??''\"\r\n [formControlName]=\"field.name\"\r\n [options]=\"field.options || []\"\r\n ></ui-multy-select>\r\n }\r\n @else if (field.type === 'searcher') {\r\n <ui-searcher\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [icon]=\"field.icon??''\"\r\n [loading]=\"field.loading??false\"\r\n [tip]=\"field.tip??''\"\r\n [searchFn]=\"getSearcherFn(field)\"\r\n [itemDisplayFn]=\"getSearcherDisplayFn(field)\"\r\n [itemIsEnabledFn]=\"getSearcherIsEnabledFn(field)\"\r\n [placeholder]=\"field.placeholder??'common.search_ellipsis'\"\r\n [error]=\"error\"\r\n ></ui-searcher>\r\n }\r\n @else if (field.type === 'file') {\r\n <ui-file-input\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [loading]=\"field.loading??false\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [multy]=\"field.multyEnabled??false\"\n [tip]=\"field.tip??''\"\n [fileTypes]=\"field.fileTypes??null\"\n [fileUidResolverFn]=\"fileUidResolverFn\"\n [formControlName]=\"field.name\"\n ></ui-file-input>\n }\n @else if (['checkbox', 'switch'].includes(field.type)) {\r\n <ui-checkbox\r\n [label]=\"(field.label??'') + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [placeholder]=\"field.placeholder??''\"\r\n [tip]=\"field.tip??''\"\r\n [type]=\"field.type === 'checkbox' ? 'checkbox' : 'switch'\"\r\n ></ui-checkbox>\r\n }\r\n @else if (field.type === 'radio') {\r\n <ui-radio\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [tip]=\"field.tip??''\"\r\n [loading]=\"field.loading??false\"\r\n [error]=\"error\"\r\n [options]=\"field.options || []\"\r\n ></ui-radio>\r\n }\r\n @else if (field.type === 'slider') {\r\n <ui-slider\r\n [min]=\"field.min??0\"\r\n [max]=\"field.max??100\"\r\n [step]=\"field.sliderInterval??1\"\r\n [markerCount]=\"field.sliderMarks??5\"\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [tip]=\"field.tip??''\"\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n ></ui-slider>\r\n }\r\n @else if (field.type === 'pool') {\r\n <ui-pool-options\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [loading]=\"field.loading??false\"\r\n [multy]=\"field.multyEnabled??false\"\r\n [tip]=\"field.tip??''\"\r\n [listViewTitle]=\"field.poolTitle??'common.selected'\"\r\n [enabledListView]=\"field.poolEnabledListView||false\"\r\n [formControlName]=\"field.name\"\r\n [options]=\"field.options || []\"\r\n ></ui-pool-options>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, inject } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Observable, Subscription, from, isObservable, of } from 'rxjs';\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { AppSelectOption } from '../../inputs/select/select.component';\r\nimport { UicSkeletonLoaderComponent } from '../../skeleton-loader/skeleton-loader.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\nimport { UicDynamicFormComponent } from '../form/dynamic-form.component';\r\nimport { UicFormStateService } from '../form-state.service';\r\nimport { FormBlock, FormField, FormResult, FormSchema, SelectOptionsResolver, SelectOptionsSource, uicFormValuesRecord } from '../form.models';\n\r\n@Component({\r\n selector: 'ui-form-wrapper',\r\n imports: [\r\n UicDynamicFormComponent,\r\n UicSkeletonLoaderComponent,\r\n UicButtonComponent,\r\n UicTranslatePipe,\r\n ReactiveFormsModule\r\n ],\r\n templateUrl: './form-wrapper.component.html',\r\n styleUrl: './form-wrapper.component.scss',\r\n providers: [UicFormStateService]\r\n})\r\nexport class UicFormWrapperComponent implements OnInit, OnChanges, OnDestroy {\r\n private readonly fb = inject(FormBuilder);\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n form: FormGroup = this.fb.group({});\r\n effectiveSchema: FormSchema = { cols: 2, blocks: [{ fields: [] }] };\r\n\r\n @Input() schema?: FormSchema;\r\n @Input() fields: FormField[] = [];\r\n @Input() cols = 2;\r\n @Input() externalData: Record<string, AppSelectOption[]> = {};\n @Input() selectOptionsResolver?: SelectOptionsResolver;\n @Input() loading = false;\n @Input() disabled = false;\r\n @Input() showButtons = false;\r\n @Input() fillSelects = false;\r\n @Input() initialValues: uicFormValuesRecord = {};\r\n @Input() focusFieldName: string | null = null;\r\n @Input() focusFieldTrigger: unknown = null;\r\n @Input() fileUidResolverFn?: (fileUid: string) => void;\r\n\r\n @Output() formSubmit = new EventEmitter<FormResult>();\n @Output() formChange = new EventEmitter<uicFormValuesRecord>();\n @Output() optionsSourceError = new EventEmitter<{\n field: FormField;\n source: SelectOptionsSource;\n error: unknown;\n }>();\n\n private formValueSub: Subscription | null = null;\n private readonly optionSourceSubs = new Map<string, Subscription>();\n private readonly optionSourceDependencyValueByField = new Map<string, any>();\n private hasFocusedCurrentTrigger = false;\n\r\n ngOnInit() {\r\n this.syncEffectiveSchema();\n this.buildForm();\n this.updateExtenalData();\n this.updateOptionsSources();\n }\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const sourceChanged =\r\n (changes['schema'] && !changes['schema'].firstChange) ||\r\n (changes['fields'] && !changes['fields'].firstChange && !this.schema) ||\r\n (changes['cols'] && !changes['cols'].firstChange && !this.schema);\r\n\r\n if (changes['schema'] || (changes['fields'] && !this.schema) || (changes['cols'] && !this.schema)) {\r\n this.syncEffectiveSchema();\r\n }\r\n\r\n if (changes['disabled'] && !changes['disabled'].firstChange) {\r\n this.updateDisabledState();\r\n }\r\n if (sourceChanged) {\n this.buildForm();\n this.updateExtenalData();\n this.updateOptionsSources();\n }\n if (changes['externalData']) {\n this.updateExtenalData();\n }\n if (changes['selectOptionsResolver'] && !changes['selectOptionsResolver'].firstChange) {\n this.updateOptionsSources(true);\n }\n if (changes['initialValues'] && !changes['initialValues'].firstChange) {\n this.buildForm();\n this.updateExtenalData();\n this.updateOptionsSources();\n }\n const focusRequestChanged =\r\n (changes['focusFieldName'] && !changes['focusFieldName'].firstChange) ||\r\n (changes['focusFieldTrigger'] && !changes['focusFieldTrigger'].firstChange);\r\n\r\n if (focusRequestChanged) {\r\n this.hasFocusedCurrentTrigger = false;\r\n this.focusConfiguredField();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\n this.formValueSub?.unsubscribe();\n this.formValueSub = null;\n this.clearOptionSourceSubscriptions();\n }\n\r\n private buildForm() {\r\n this.formValueSub?.unsubscribe();\r\n this.formValueSub = null;\r\n\r\n const fields = this.collectAllFields();\r\n const numericFields = fields.filter(field => field.type === 'number');\r\n const newForm = this.fb.group({});\r\n\r\n fields.forEach(field => {\r\n const validators = this.mapValidatorsFromField(field);\r\n const initial = this.normalizeFieldValue(field, this.newFieldInitialValue(field, true));\r\n const controlState = {\r\n value: initial,\r\n disabled: this.disabled || !!field.disabled\r\n };\r\n newForm.addControl(field.name, this.fb.control(controlState, validators));\r\n });\r\n\r\n this.formValueSub = newForm.valueChanges.subscribe(() => {\n this.normalizeNumericControls(newForm, numericFields);\n this.handleFormChange();\n this.updateDependentOptionsSources();\n });\n\n this.form = newForm;\n this.optionSourceDependencyValueByField.clear();\n this.updateDisabledState();\n this.focusConfiguredField();\n }\n\r\n private focusConfiguredField(): void {\r\n if (!this.focusFieldName || this.hasFocusedCurrentTrigger) return;\r\n\r\n const fieldName = this.focusFieldName;\r\n requestAnimationFrame(() => {\r\n const target = this.findFocusableFieldElement(fieldName);\r\n if (!target) return;\r\n\r\n this.hasFocusedCurrentTrigger = true;\r\n target.focus();\r\n if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) {\r\n target.select();\r\n }\r\n });\r\n }\r\n\r\n private findFocusableFieldElement(fieldName: string): HTMLElement | null {\r\n const focusableElements = this.elementRef.nativeElement.querySelectorAll<HTMLElement>(\r\n 'input, textarea, select, button, [tabindex]'\r\n );\r\n\r\n return Array.from(focusableElements).find(element => element.id === fieldName) ?? null;\r\n }\r\n\r\n private updateDisabledState() {\r\n if (!this.form) return;\r\n\r\n const fieldByName = new Map(this.collectAllFields().map(field => [field.name, field]));\r\n Object.keys(this.form.controls).forEach(key => {\r\n const control = this.getFieldControl(key);\r\n if (!control) return;\r\n\r\n const field = fieldByName.get(key);\r\n if (this.disabled || field?.disabled) {\r\n control.disable({ emitEvent: false });\r\n } else {\r\n control.enable({ emitEvent: false });\r\n }\r\n });\r\n }\r\n\r\n private updateExtenalData() {\r\n if (!this.externalData || !this.effectiveSchema?.blocks || Object.keys(this.externalData).length === 0) {\r\n return;\r\n }\r\n\r\n for (const block of this.effectiveSchema.blocks) {\r\n block.fields = this.updateFieldOptions(block);\r\n }\r\n }\r\n\r\n private mapValidatorsFromField(field: FormField) {\r\n const validators = [];\r\n if (field.required) validators.push(Validators.required);\r\n if (typeof field.min === 'number') validators.push(Validators.min(field.min));\r\n if (typeof field.max === 'number') validators.push(Validators.max(field.max));\r\n if (typeof field.maxLength === 'number') validators.push(Validators.maxLength(field.maxLength));\r\n if (typeof field.minLength === 'number') validators.push(Validators.minLength(field.minLength));\r\n if (field.pattern instanceof RegExp) validators.push(Validators.pattern(field.pattern));\r\n return validators;\r\n }\r\n\r\n handleSubmit() {\r\n let result: FormResult = { result: false, form: null };\r\n if (this.form.valid) {\r\n result = { result: true, form: this.toNestedValues(this.form.getRawValue()) };\r\n } else {\r\n this.form.markAllAsTouched();\r\n }\r\n this.formSubmit.emit(result);\r\n return result;\r\n }\r\n\r\n private handleFormChange() {\r\n this.formChange.emit(this.toNestedValues(this.form.getRawValue()));\r\n }\r\n\r\n private updateFieldOptions(block: FormBlock): FormField[] {\n return block.fields.map(field => {\n if (field.type === 'select' || field.type === 'pool' || field.type === 'multyselect') {\n if (this.hasUsableOptionsSource(field)) {\n return field;\n }\n\n const externalOptions = this.externalData?.[field.name];\n return { ...field, options: Array.isArray(externalOptions) ? externalOptions : (field.options ?? []) };\n }\n return field;\n });\n }\n\n private updateOptionsSources(force = false): void {\n const fields = this.collectAllFields().filter(field => this.hasUsableOptionsSource(field));\n const fieldNames = new Set(fields.map(field => field.name));\n\n for (const fieldName of this.optionSourceSubs.keys()) {\n if (!fieldNames.has(fieldName)) {\n this.optionSourceSubs.get(fieldName)?.unsubscribe();\n this.optionSourceSubs.delete(fieldName);\n this.optionSourceDependencyValueByField.delete(fieldName);\n }\n }\n\n fields.forEach(field => this.resolveOptionsSourceField(field, force));\n }\n\n private updateDependentOptionsSources(): void {\n const fields = this.collectAllFields().filter(field => {\n const source = field.optionsSource;\n return this.hasUsableOptionsSource(field) && !!source?.dependsOn;\n });\n\n fields.forEach(field => this.resolveOptionsSourceField(field));\n }\n\n private resolveOptionsSourceField(field: FormField, force = false): void {\n const source = field.optionsSource;\n if (!source?.key) return;\n\n if (!this.selectOptionsResolver) {\n this.updateFieldOptionsState(field.name, {\n options: field.options ?? [],\n loading: false\n });\n return;\n }\n\n const values = this.toNestedValues(this.form?.getRawValue?.() ?? {});\n const dependencyValue = source.dependsOn ? this.getValueByPath(values, source.dependsOn) : undefined;\n const dependencyKey = source.dependsOn ? `${source.dependsOn}:${this.safeStringify(dependencyValue ?? null)}` : '__init__';\n const previousDependencyKey = this.optionSourceDependencyValueByField.get(field.name);\n\n if (!force && previousDependencyKey === dependencyKey) {\n return;\n }\n\n this.optionSourceDependencyValueByField.set(field.name, dependencyKey);\n\n if (source.dependsOn && (dependencyValue === null || dependencyValue === undefined || dependencyValue === '')) {\n this.optionSourceSubs.get(field.name)?.unsubscribe();\n this.optionSourceSubs.delete(field.name);\n this.clearFieldValue(field);\n this.updateFieldOptionsState(field.name, { options: [], loading: false });\n return;\n }\n\n this.optionSourceSubs.get(field.name)?.unsubscribe();\n this.updateFieldOptionsState(field.name, { loading: true });\n\n let optionsResult: AppSelectOption[] | unknown[] | Promise<AppSelectOption[] | unknown[]> | Observable<AppSelectOption[] | unknown[]>;\n try {\n optionsResult = this.selectOptionsResolver(source, {\n field,\n values,\n dependencyValue\n });\n } catch (error) {\n this.handleOptionsSourceError(field, source, error);\n return;\n }\n\n const sub = this.toObservable(optionsResult).subscribe({\n next: items => {\n const options = this.mapOptionsSourceItems(items, source);\n this.updateFieldOptionsState(field.name, { options, loading: false });\n this.clearInvalidFieldValue(field.name, options);\n },\n error: error => this.handleOptionsSourceError(field, source, error),\n complete: () => this.updateFieldOptionsState(field.name, { loading: false })\n });\n\n this.optionSourceSubs.set(field.name, sub);\n }\n\n private handleOptionsSourceError(field: FormField, source: SelectOptionsSource, error: unknown): void {\n this.updateFieldOptionsState(field.name, { options: [], loading: false });\n this.optionsSourceError.emit({ field, source, error });\n }\n\n private toObservable(\n value: AppSelectOption[] | unknown[] | Promise<AppSelectOption[] | unknown[]> | Observable<AppSelectOption[] | unknown[]>\n ): Observable<AppSelectOption[] | unknown[]> {\n if (isObservable(value)) {\n return value;\n }\n\n if (value instanceof Promise) {\n return from(value);\n }\n\n return of(value ?? []);\n }\n\n private mapOptionsSourceItems(items: unknown[] | AppSelectOption[], source: SelectOptionsSource): AppSelectOption[] {\n if (!Array.isArray(items)) return [];\n\n return items.map(item => this.mapOptionsSourceItem(item, source));\n }\n\n private mapOptionsSourceItem(item: unknown, source: SelectOptionsSource): AppSelectOption {\n if (item && typeof item === 'object') {\n const record = item as Record<string, any>;\n const id = this.getValueByPath(record, source.idField?.trim() || 'id');\n const fallbackText = this.getValueByPath(record, source.textField?.trim() || 'text');\n const optionId = this.isValidOptionId(id)\n ? id\n : this.isValidOptionId(fallbackText)\n ? fallbackText\n : String(fallbackText ?? '');\n\n return {\n detail: typeof record['detail'] === 'string' ? record['detail'] : undefined,\n icon: typeof record['icon'] === 'string' ? record['icon'] : undefined,\n iconColor: typeof record['iconColor'] === 'string' ? record['iconColor'] : undefined,\n id: optionId,\n text: source.textTemplate\n ? this.renderOptionsSourceTemplate(source.textTemplate, record)\n : String(fallbackText ?? id ?? '')\n };\n }\n\n return {\n id: String(item ?? ''),\n text: String(item ?? '')\n };\n }\n\n private renderOptionsSourceTemplate(template: string, item: Record<string, any>): string {\n return template.replace(/\\{\\{\\s*([\\w.]+)\\s*\\}\\}/g, (_match, path: string) => {\n const value = this.getValueByPath(item, path);\n return value === null || value === undefined ? '' : String(value);\n });\n }\n\n private updateFieldOptionsState(\n fieldName: string,\n values: { options?: AppSelectOption[]; loading?: boolean }\n ): void {\n if (!this.effectiveSchema?.blocks?.length) return;\n\n for (const block of this.effectiveSchema.blocks) {\n const index = block.fields.findIndex(field => field.name === fieldName);\n if (index === -1) continue;\n\n const field = block.fields[index];\n block.fields[index] = {\n ...field,\n ...(values.options !== undefined ? { options: values.options } : {}),\n ...(values.loading !== undefined ? { loading: values.loading } : {})\n };\n block.fields = [...block.fields];\n this.effectiveSchema.blocks = [...this.effectiveSchema.blocks];\n return;\n }\n }\n\n private clearInvalidFieldValue(fieldName: string, options: AppSelectOption[]): void {\n const control = this.getFieldControl(fieldName);\n if (!control) return;\n\n const currentValue = control.value;\n if (currentValue === null || currentValue === undefined || currentValue === '') return;\n\n if (Array.isArray(currentValue)) {\n const validIds = new Set(options.map(option => option.id));\n const filteredValue = currentValue.filter(value => validIds.has(value));\n if (filteredValue.length !== currentValue.length) {\n control.setValue(filteredValue, { emitEvent: false });\n this.handleFormChange();\n }\n return;\n }\n\n if (!options.some(option => option.id === currentValue)) {\n control.setValue(null, { emitEvent: false });\n this.handleFormChange();\n }\n }\n\n private clearFieldValue(field: FormField): void {\n const control = this.getFieldControl(field.name);\n if (!control) return;\n\n const blankValue = this.blankValue(field);\n if (control.value !== blankValue) {\n control.setValue(blankValue, { emitEvent: false });\n this.handleFormChange();\n }\n }\n\n private hasUsableOptionsSource(field: FormField): boolean {\n return this.supportsOptions(field) && !!field.optionsSource?.key?.trim();\n }\n\n private supportsOptions(field: FormField): boolean {\n return field.type === 'select' || field.type === 'pool' || field.type === 'multyselect' || field.type === 'radio';\n }\n\n private isValidOptionId(value: unknown): value is string | number | null {\n return typeof value === 'string' || typeof value === 'number' || value === null;\n }\n\n private getValueByPath(source: Record<string, any>, path?: string): any {\n if (!path) return undefined;\n return path.split('.').reduce((current, key) => current?.[key], source);\n }\n\n private safeStringify(value: any): string {\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n }\n\n private clearOptionSourceSubscriptions(): void {\n this.optionSourceSubs.forEach(sub => sub.unsubscribe());\n this.optionSourceSubs.clear();\n this.optionSourceDependencyValueByField.clear();\n }\n\r\n private collectAllFields(): FormField[] {\r\n return (this.effectiveSchema?.blocks ?? []).flatMap(block => block.fields ?? []);\r\n }\r\n\r\n updateFieldValue(name: string, value: any) {\r\n const field = this.findFieldByName(name);\r\n this.getFieldControl(name)?.patchValue(this.normalizeFieldValue(field, value), { emitEvent: false });\r\n }\r\n\r\n updateFieldConfig(name: string, config: Omit<FormField, 'name'|'type' >) {\r\n if (!this.effectiveSchema?.blocks?.length) return;\r\n\r\n for (const block of this.effectiveSchema.blocks) {\r\n const index = block.fields.findIndex(field => field.name === name);\r\n if (index === -1) continue;\r\n\r\n const current = block.fields[index];\r\n const restConfig: Partial<FormField> = { ...(config ?? {}) };\r\n delete (restConfig as any).name;\r\n delete (restConfig as any).type;\r\n\r\n const updatedField: FormField = {\r\n ...current,\r\n ...restConfig,\r\n name: current.name,\r\n type: current.type,\r\n };\r\n\r\n block.fields[index] = updatedField;\r\n block.fields = [...block.fields];\r\n this.effectiveSchema.blocks = [...this.effectiveSchema.blocks];\r\n\r\n const control = this.getFieldControl(name);\r\n if (control) {\r\n control.setValidators(this.mapValidatorsFromField(updatedField));\r\n control.updateValueAndValidity({ onlySelf: true, emitEvent: false });\r\n }\r\n this.updateDisabledState();\r\n return;\r\n }\r\n }\r\n\r\n updateFieldDisabled(name: string, disabled: boolean): void {\r\n const control = this.getFieldControl(name);\r\n if (!control) return;\r\n\r\n if (disabled || this.disabled) {\r\n control.disable({ emitEvent: false });\r\n } else {\r\n control.enable({ emitEvent: false });\r\n }\r\n\r\n this.updateSchemaField(name, { disabled }, this.effectiveSchema.blocks);\r\n }\r\n\r\n updateFieldLoading(name: string, loading: boolean): void {\r\n this.updateSchemaField(name, { loading }, this.effectiveSchema.blocks);\r\n }\r\n\r\n submit() {\r\n return this.handleSubmit();\r\n }\r\n\r\n clean(hardReset: boolean = false) {\r\n if (!this.form) return;\r\n\r\n const fields = this.collectAllFields();\r\n const fieldMap = new Map(fields.map(field => [field.name, field]));\r\n const resetValues: uicFormValuesRecord = {};\r\n\r\n Object.keys(this.form.controls).forEach(name => {\r\n const field = fieldMap.get(name);\r\n resetValues[name] = this.resolveResetValue(name, field, hardReset);\r\n });\r\n\r\n this.form.reset(resetValues, { emitEvent: false });\r\n this.handleFormChange();\r\n }\r\n\r\n addFieldControl(field: FormField, after?: string) {\r\n if (this.form.contains(field.name)) return;\r\n\r\n const validators = this.mapValidatorsFromField(field);\r\n const controlState = {\r\n value: this.normalizeFieldValue(field, this.newFieldInitialValue(field)),\r\n disabled: this.disabled || !!field.disabled\r\n };\r\n\r\n this.form.addControl(field.name, this.fb.control(controlState, validators), { emitEvent: false });\r\n this.updateExtenalData();\r\n\r\n if (this.insertField(field, this.effectiveSchema.blocks, after)) return;\r\n\r\n if (this.effectiveSchema.blocks?.length) {\r\n this.effectiveSchema.blocks[0].fields.push(field);\r\n }\r\n }\r\n\r\n removeFieldControl(name: string) {\r\n if (this.form.contains(name)) {\r\n this.form.removeControl(name, { emitEvent: false });\r\n }\r\n\r\n const removeSchemaField = (blocks?: FormBlock[]) => {\r\n if (!blocks) return false;\r\n for (const block of blocks) {\r\n const index = block.fields.findIndex(field => field.name === name);\r\n if (index !== -1) {\r\n block.fields.splice(index, 1);\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n removeSchemaField(this.effectiveSchema.blocks);\r\n }\r\n\r\n private resolveResetValue(name: string, field: FormField | undefined, hardReset: boolean) {\r\n if (!hardReset) {\r\n const initial = this.normalizeFieldValue(field, this.resolveInitialValue(name));\r\n if (initial !== null && initial !== undefined) return initial;\r\n }\r\n return this.blankValue(field);\r\n }\r\n\r\n private blankValue(field?: FormField) {\r\n if (!field) return null;\r\n\r\n switch (field.type) {\r\n case 'text':\r\n case 'textarea':\r\n case 'phone':\r\n return '';\r\n case 'checkbox':\r\n case 'switch':\r\n return false;\r\n case 'multyselect':\r\n return [];\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n private newFieldInitialValue(field: FormField, useFallbackSelect = false) {\r\n let initial = this.resolveInitialValue(field.name);\r\n if ((field.type === 'checkbox' || field.type === 'switch') && initial == null) initial = false;\r\n if (field.type === 'slider' && initial == null) initial = field.min ?? 0;\r\n if (this.fillSelects && useFallbackSelect && field.type === 'select' && initial == null && field.options?.length) {\r\n initial = field.options[0].id;\r\n }\r\n return initial;\r\n }\r\n\r\n private insertField(field: FormField, blocks?: FormBlock[], after?: string) {\r\n if (!blocks) return false;\r\n\r\n for (const block of blocks) {\r\n const idx = block.fields.findIndex(item => item.name === after);\r\n if (idx !== -1) {\r\n block.fields.splice(idx + 1, 0, field);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private updateSchemaField(\r\n name: string,\r\n values: { disabled?: boolean; loading?: boolean },\r\n blocks?: FormBlock[]\r\n ): boolean {\r\n if (!blocks) return false;\r\n\r\n for (const block of blocks) {\r\n const field = block.fields.find(item => item.name === name);\r\n if (field) {\r\n if (values.loading !== undefined) field.loading = values.loading;\r\n if (values.disabled !== undefined) field.disabled = values.disabled;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private getFieldControl(name: string) {\r\n return this.form.get([name]);\r\n }\r\n\r\n private findFieldByName(name: string): FormField | undefined {\r\n return this.collectAllFields().find(field => field.name === name);\r\n }\r\n\r\n private resolveInitialValue(name: string): any {\r\n if (!this.initialValues) return null;\r\n if (Object.prototype.hasOwnProperty.call(this.initialValues, name)) {\r\n return this.initialValues[name];\r\n }\r\n\r\n const parts = name.split('.');\r\n if (parts.length === 1) return null;\r\n\r\n let current: any = this.initialValues;\r\n for (const part of parts) {\r\n if (current == null || typeof current !== 'object' || !Object.prototype.hasOwnProperty.call(current, part)) {\r\n return null;\r\n }\r\n current = current[part];\r\n }\r\n return current;\r\n }\r\n\r\n private normalizeNumericControls(form: FormGroup, fields: FormField[]) {\r\n for (const field of fields) {\r\n const control = form.get([field.name]);\r\n if (!control) continue;\r\n\r\n const normalized = this.normalizeFieldValue(field, control.value);\r\n if (control.value !== normalized) {\r\n control.setValue(normalized, { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private normalizeFieldValue(field: FormField | undefined, value: any) {\r\n if (field?.type !== 'number') {\r\n return value;\r\n }\r\n\r\n if (value === '' || value == null) {\r\n return null;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return Number.isNaN(value) ? null : value;\r\n }\r\n\r\n const normalized = Number(value);\r\n return Number.isNaN(normalized) ? null : normalized;\r\n }\r\n\r\n private toNestedValues(values: uicFormValuesRecord): uicFormValuesRecord {\r\n const nested: uicFormValuesRecord = {};\r\n Object.entries(values ?? {}).forEach(([key, value]) => {\r\n this.setNestedValue(nested, key, value);\r\n });\r\n return nested;\r\n }\r\n\r\n private setNestedValue(target: uicFormValuesRecord, key: string, value: any) {\r\n const parts = key.split('.');\r\n if (parts.length === 1) {\r\n target[key] = value;\r\n return;\r\n }\r\n\r\n let current: any = target;\r\n for (let i = 0; i < parts.length - 1; i++) {\r\n const part = parts[i];\r\n const next = current[part];\r\n\r\n if (next == null) {\r\n current[part] = {};\r\n } else if (typeof next !== 'object' || Array.isArray(next)) {\r\n target[key] = value;\r\n return;\r\n }\r\n current = current[part];\r\n }\r\n\r\n current[parts[parts.length - 1]] = value;\r\n }\r\n\r\n private syncEffectiveSchema() {\r\n if (this.schema) {\r\n this.effectiveSchema = this.schema;\r\n return;\r\n }\r\n\r\n this.effectiveSchema = {\r\n cols: this.cols ?? 2,\r\n blocks: [\r\n {\r\n fields: [...(this.fields ?? [])]\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (ngSubmit)=\"handleSubmit()\">\r\n @for (block of effectiveSchema.blocks; track $index) {\r\n \r\n <section class=\"form-block\">\r\n @if (block.title){\r\n <div class=\"block-title\">{{ block.title }}</div>\r\n }\r\n @if (block.subtitle){\r\n <div class=\"block-subtitle\">{{ block.subtitle }}</div>\r\n }\r\n @if (loading) {\r\n <ui-skeleton-loader\r\n [cols]=\"effectiveSchema.cols\"\r\n [inputs]=\"block.fields.length\"\r\n ></ui-skeleton-loader>\r\n } @else {\r\n <ui-dynamic-form\n [cols]=\"effectiveSchema.cols\"\n [disabled]=\"disabled\"\n [fileUidResolverFn]=\"fileUidResolverFn\"\n [fields]=\"block.fields\"\n [form]=\"form\">\n </ui-dynamic-form>\n }\r\n </section>\r\n }\r\n @if ( showButtons ) {\r\n\r\n <div class=\"form-buttons\">\r\n <ui-button color=\"black\" type=\"bordered\" (click)=\"clean()\">{{'common.clear' | uicTranslate}}</ui-button>\r\n <ui-button color=\"black\" (click)=\"submit()\">{{'common.save' | uicTranslate}}</ui-button>\r\n </div>\r\n }\r\n</form>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ui-step-tabs',\r\n imports: [],\r\n templateUrl: './step-tabs.component.html',\r\n styleUrl: './step-tabs.component.scss'\r\n})\r\nexport class UicStepTabsComponent {\r\n @Input() tabs:string[] = [];\r\n @Input() currentTab:string = '';\r\n @Input() navigationEnabled = false;\r\n @Input() showStepTitle = true;\r\n @Output() currentTabChange = new EventEmitter<string>();\r\n\r\n currentIndex = 1;\r\n\r\n changeTab(newTab:string){\r\n if ( this.navigationEnabled ){\r\n this.currentIndex = (this.tabs.findIndex(f=>f==newTab)??0) + 1;\r\n this.currentTab = newTab;\r\n this.currentTabChange.emit(newTab)\r\n }\r\n }\r\n}\r\n","<div class=\"tabs-wrapper\">\r\n @for (tab of tabs; track tab) {\r\n <div class=\"form-tab\" \r\n [class.selected-tab]=\"tab == currentTab\" \r\n [class.tab-hover]=\"navigationEnabled && tab != currentTab\"\r\n (click)=\"changeTab(tab)\">\r\n <div class=\"form-tab-title\">{{tab}}</div>\r\n <div class=\"form-tab-bar\"></div>\r\n </div>\r\n }\r\n</div>\r\n@if (showStepTitle) {\r\n <h1 class=\"tab-title\"> {{currentIndex + \". \" + currentTab}} </h1>\r\n}","import { Component, EventEmitter, Input, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { FormResult, FormStep } from '../form.models';\r\nimport { UicStepTabsComponent } from './step-tabs/step-tabs.component';\r\nimport { ButtonColor, UicButtonComponent } from '../../button/button.component';\r\nimport { UicFormWrapperComponent } from '../form-wrapper/form-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'ui-steps-form',\r\n imports: [UicStepTabsComponent, UicButtonComponent, UicFormWrapperComponent, UicTranslatePipe],\r\n templateUrl: './steps-form.component.html',\r\n styleUrl: './steps-form.component.scss'\r\n})\r\nexport class UicStepsFormComponent {\r\n @ViewChildren(UicFormWrapperComponent) allForms!: QueryList<UicFormWrapperComponent>;\r\n @Input() steps:FormStep[]=[];\r\n @Input() navigationEnabled = false;\r\n @Input() showStepTitle = true;\r\n @Input() showButtons = true;\r\n @Input() buttonsColor:ButtonColor = 'black';\r\n \r\n @Output() formSubmit = new EventEmitter<FormResult>(); \r\n\r\n\r\n externalData={};\r\n formDisabled=false;\r\n loading=false;\r\n\r\n tabs:string[] = [];\r\n completedForms = new Map<string,Record<string,any>>();\r\n currentTabTitle = '';\r\n\r\n\r\n ngOnInit(){\r\n this.tabs = this.steps.map(p=>p.title);\r\n this.currentTabTitle = this.tabs[0];\r\n }\r\n\r\n private getFormByTitle(title: string): UicFormWrapperComponent | undefined {\r\n return this.allForms.find((form, index) => this.steps[index].title === title);\r\n }\r\n\r\n // CONTROLES DE FORMULARIO\r\n updateFieldValue(step:string,controlName:string, value:string){\r\n const stepForm = this.getFormByTitle(step);\r\n stepForm?.updateFieldValue(controlName,value);\r\n }\r\n\r\n updateFildDisabled(step:string,controlName:string, value:boolean){\r\n const stepForm = this.getFormByTitle(step);\r\n stepForm?.updateFieldDisabled(controlName,value);\r\n }\r\n\r\n updateFildLoading(step:string,controlName:string, value:boolean){\r\n const stepForm = this.getFormByTitle(step);\r\n stepForm?.updateFieldLoading(controlName,value);\r\n }\r\n \r\n // CONTROLES DE MOVIMIENTO\r\n next(){\r\n if (!this.isLast){\r\n if ( this.handleStepSubmit( this.currentTabTitle ) ){\r\n this.currentTabTitle = this.steps[this.currentIdx + 1]?.title??'';\r\n }\r\n }else if ( this.handleStepSubmit( this.currentTabTitle ) ){\r\n this.formSubmit.emit({\r\n result:true,\r\n form: this.getMergedForm()\r\n }); \r\n }\r\n }\r\n\r\n back(){\r\n if (!this.isFirst){\r\n this.currentTabTitle = this.steps[this.currentIdx - 1]?.title??'';\r\n }\r\n }\r\n \r\n\r\n\r\n private handleStepSubmit(title:string):boolean{\r\n const stepForm = this.getFormByTitle(this.currentTabTitle);\r\n const result = stepForm?.handleSubmit();\r\n if ( !result?.result ){\r\n return false;\r\n }else{\r\n this.completedForms.set(title,result.form??{});\r\n return true;\r\n }\r\n }\r\n\r\n private getMergedForm() {\r\n return Object.assign({}, ...Array.from(this.completedForms.values()));\r\n }\r\n\r\n\r\n get currentIdx(): number {\r\n return this.steps.findIndex(f => f.title === this.currentTabTitle);\r\n }\r\n\r\n get isFirst(): boolean {\r\n return this.currentIdx === 0;\r\n }\r\n\r\n get isLast(): boolean {\r\n return this.currentIdx === this.steps.length - 1;\r\n }\r\n}\r\n","<ui-step-tabs \r\n [(currentTab)]=\"currentTabTitle\" \r\n [navigationEnabled]=\"navigationEnabled\"\r\n [showStepTitle]=\"showStepTitle\"\r\n [tabs]=\"tabs\"></ui-step-tabs>\r\n\r\n\r\n<!-- formulario -->\r\n@for (step of steps; track $index) {\r\n <div [class.hidden-form]=\"step.title!==currentTabTitle\" >\r\n <ui-form-wrapper [schema]=\"step.form\" \r\n [externalData]=\"externalData\"\r\n [disabled]=\"formDisabled\"\r\n [loading]=\"loading\"></ui-form-wrapper>\r\n </div>\r\n}\r\n\r\n@if (showButtons) {\r\n <div style=\"display: flex; gap: 10px;\">\r\n <ui-button [color]=\"buttonsColor\" type=\"bordered\" [disabled]=\"isFirst\" (click)=\"back()\" >{{'step_form.back' | uicTranslate}}</ui-button>\r\n <ui-button [color]=\"buttonsColor\" (click)=\"next()\">{{isLast?('step_form.submit' | uicTranslate):('step_form.next' | uicTranslate)}}</ui-button>\r\n </div>\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { UicSearcherComponent } from '../uic-searcher/uic-searcher.component';\r\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'ui-multy-searcher',\r\n imports: [UicButtonComponent, UicTranslatePipe],\r\n templateUrl: './multy-searcher.component.html',\r\n styleUrl: './multy-searcher.component.scss'\r\n})\r\nexport class UicMultySearcherComponent {\r\n\r\n @Input() itemDisplayFn?: (item: any) => string = item => String(item);\r\n @Input() disabled = false;\r\n @Input() values:any[]=[];\r\n @Output() valuesChange = new EventEmitter<any[]>();\r\n \r\n\r\n removeItem(idx:number){\r\n this.values.splice(idx,1);\r\n this.valuesChange.emit(this.values);\r\n }\r\n}\r\n\r\n\r\n\r\n","<div class=\"search-results\">\r\n @for (item of values; track $index) {\r\n <div class=\"search-result\" [class.disabledresult]=\"disabled\">\r\n <div [innerHTML]=\"itemDisplayFn?itemDisplayFn(item):''\">\r\n </div>\r\n @if ( !disabled ){\r\n <ui-button (click)=\"removeItem($index)\" [iconOnly]=\"true\" icon=\"ri-delete-bin-line\" type=\"ghost\" color=\"red\" size=\"s\"></ui-button>\r\n }\r\n </div>\r\n }\r\n @if (disabled && values.length == 0) {\r\n <div class=\"search-result-empty\">\r\n {{'searcher.without_selected' | uicTranslate}}\r\n </div>\r\n }\r\n</div>\r\n","import { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, ContentChild, ElementRef, EventEmitter, InjectionToken, Input, OnDestroy, Output, TemplateRef, ViewChild, ViewContainerRef, forwardRef, inject } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\n\r\nexport interface DropdownOverlayControls {\r\n close(): void;\r\n open(): void;\r\n toggle(): void;\r\n readonly isOpen: boolean;\r\n}\r\n\r\nexport const DROPDOWN_OVERLAY_CONTROLS = new InjectionToken<DropdownOverlayControls>('DROPDOWN_OVERLAY_CONTROLS');\r\n\r\nconst DEFAULT_POSITIONS: ConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' },\r\n];\r\n\r\n@Component({\r\n selector: 'ui-dropdown-container',\r\n imports: [CommonModule],\r\n templateUrl: './dropdown-container.component.html',\r\n styleUrl: './dropdown-container.component.scss',\r\n providers: [\r\n {\r\n provide: DROPDOWN_OVERLAY_CONTROLS,\r\n useExisting: forwardRef(() => UicDropdownContainerComponent),\r\n },\r\n ],\r\n})\r\nexport class UicDropdownContainerComponent implements OnDestroy, DropdownOverlayControls {\r\n private _disabled = false;\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n @Input() buttonLabel = 'common.open';\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (value) {\r\n this.close();\r\n }\r\n }\r\n @Input() positions: ConnectedPosition[] = DEFAULT_POSITIONS;\r\n @Input() matchTriggerWidth = false;\r\n @Input() width?: number | string;\r\n @Input() minWidth?: number | string;\r\n @Input() maxWidth?: number | string;\r\n @Input() backdropClass = 'cdk-overlay-transparent-backdrop';\r\n @Input() hasBackdrop = true;\r\n @Input() closeOnBackdropClick = true;\r\n @Input() closeOnEscape = true;\r\n @Input() closeOnContentClick = false;\r\n @Input() offsetX = 0;\r\n @Input() offsetY = 4;\r\n @Input() push = false;\r\n @Input() flexibleDimensions = true;\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n @ViewChild('contentTemplate', { static: true }) contentTemplate?: TemplateRef<unknown>;\r\n @ContentChild(TemplateRef) projectedTemplate?: TemplateRef<unknown>;\r\n\r\n private overlayRef?: OverlayRef;\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private overlaySubscriptions: Subscription = new Subscription();\r\n private contentClickHandler?: (event: MouseEvent) => void;\r\n\r\n get isOpen(): boolean {\r\n return !!this.overlayRef;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyOverlay();\r\n }\r\n\r\n open(): void {\r\n if (this.disabled || this.overlayRef) {\r\n return;\r\n }\r\n\r\n if ( !this.contentTemplate) {\r\n console.warn('ui-dropdown-container: Falta definir contenido para el dropdown.');\r\n return;\r\n }\r\n\r\n const origin = this.host.nativeElement.querySelector('.triggerButton') as HTMLElement | null;\r\n if (!origin) {\r\n console.warn('ui-dropdown-container: No se encontró el trigger para posicionar el overlay.');\r\n return;\r\n }\r\n const positionStrategy = this.createPositionStrategy(origin);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n hasBackdrop: this.hasBackdrop,\r\n backdropClass: this.backdropClass,\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n width: this.resolveDimension(this.width, this.matchTriggerWidth ? origin.offsetWidth : undefined),\r\n minWidth: this.resolveDimension(this.minWidth),\r\n maxWidth: this.resolveDimension(this.maxWidth),\r\n });\r\n\r\n const portal = new TemplatePortal(this.contentTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.bindOverlayEvents(this.overlayRef);\r\n }\r\n\r\n close(): void {\r\n if (!this.overlayRef) return;\r\n this.destroyOverlay();\r\n this.closed.emit();\r\n }\r\n\r\n toggle(): void {\r\n if (this.overlayRef) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n onTriggerClick(event: Event): void {\r\n if (this.disabled && !this.isOpen) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.toggle();\r\n }\r\n\r\n private createPositionStrategy(origin: HTMLElement): FlexibleConnectedPositionStrategy {\r\n return this.overlay.position()\r\n .flexibleConnectedTo(origin)\r\n .withPositions(this.positions)\r\n .withPush(this.push)\r\n .withFlexibleDimensions(this.flexibleDimensions)\r\n .withDefaultOffsetX(this.offsetX)\r\n .withDefaultOffsetY(this.offsetY);\r\n }\r\n\r\n\r\n\r\n private destroyOverlay(): void {\r\n if (!this.overlayRef) return;\r\n\r\n this.overlaySubscriptions.unsubscribe();\r\n this.overlaySubscriptions = new Subscription();\r\n\r\n if (this.contentClickHandler) {\r\n this.overlayRef.overlayElement.removeEventListener('click', this.contentClickHandler);\r\n this.contentClickHandler = undefined;\r\n }\r\n\r\n this.overlayRef.dispose();\r\n this.overlayRef = undefined;\r\n }\r\n\r\n private resolveDimension(value?: number | string, fallback?: number): number | string | undefined {\r\n if (value === undefined || value === null) {\r\n return fallback;\r\n }\r\n return value;\r\n }\r\n\r\n private bindOverlayEvents(ref: OverlayRef): void {\r\n this.overlaySubscriptions.unsubscribe();\r\n this.overlaySubscriptions = new Subscription();\r\n\r\n if (this.hasBackdrop && this.closeOnBackdropClick) {\r\n this.overlaySubscriptions.add(\r\n ref.backdropClick().subscribe(() => this.close())\r\n );\r\n }\r\n\r\n if (this.closeOnEscape) {\r\n this.overlaySubscriptions.add(\r\n ref.keydownEvents().pipe(filter(event => event.key === 'Escape')).subscribe(() => this.close())\r\n );\r\n }\r\n\r\n if (this.closeOnContentClick) {\r\n this.contentClickHandler = () => this.close();\r\n ref.overlayElement.addEventListener('click', this.contentClickHandler);\r\n }\r\n }\r\n}\r\n","\n<div #triggerButton class=\"triggerButton\" (click)=\"onTriggerClick($event)\">\n <ng-content select=\"[button]\"></ng-content>\n</div>\n\n<ng-template #contentTemplate >\n <div class=\"ui-dropdown-panel\">\n <ng-content select=\"[content]\"></ng-content>\n </div>\n</ng-template>","import { Directive, HostListener, inject } from '@angular/core';\nimport { UicDropdownContainerComponent } from './dropdown-container.component';\n\n@Directive({\n selector: '[uiDropdownClose]',\n standalone: true,\n})\nexport class UiDropdownCloseDirective {\n private readonly dropdown = inject(UicDropdownContainerComponent);\n\n @HostListener('click')\n handleClick(): void {\n this.dropdown.close();\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UicToolTipDirective } from '../../../directives/tool-tip.directive';\r\nimport { UicInputComponent } from '../../inputs/input/input.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'uic-table-searcher',\r\n imports: [UicButtonComponent, FormsModule, UicToolTipDirective, UicInputComponent, UicTranslatePipe],\r\n templateUrl: './table-searcher.component.html',\r\n styleUrl: './table-searcher.component.scss'\r\n})\r\nexport class UicTableUicSearcherComponent {\r\n @Input() placeholder = 'table.search_placeholder';\r\n @Input() label = 'table.search_label';\r\n @Input() searchOnKeydown = false;\r\n @Input() showButtonText = false;\r\n @Input() showSearchButton = false;\r\n @Output() filter = new EventEmitter<string>();\r\n text = \"\";\r\n\r\n reset(){\r\n this.text = '';\r\n this.filter.emit(this.text);\r\n }\r\n\r\n updateText(){\r\n if ( this.searchOnKeydown ){\r\n this.filter.emit(this.text);\r\n }\r\n }\r\n}\r\n","\r\n<div class=\"ui-table-searcher\">\r\n <ui-input [internalIcon]=\"!showSearchButton?'ri-search-line':''\">\r\n <input [(ngModel)]=\"text\" type=\"text\" (ngModelChange)=\"updateText()\" (keydown.enter)=\"filter.emit(text)\" [placeholder]=\"placeholder | uicTranslate\">\r\n </ui-input>\r\n @if (showSearchButton) {\r\n <ui-button [iconOnly]=\"!showButtonText\" (click)=\"filter.emit(text)\" color=\"black\" type=\"bordered\" rightIcon=\"showSearchButton ri-search-2-line\" size=\"m\">{{showButtonText?('common.search' | uicTranslate):''}}</ui-button>\r\n }\r\n <ui-button [iconOnly]=\"!showButtonText\" (click)=\"reset()\" color=\"black\" type=\"bordered\" rightIcon=\"ri-eraser-line\" size=\"m\">{{showButtonText?('common.clear' | uicTranslate):''}}</ui-button>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'uic-table-pagination',\r\n imports: [CommonModule, UicButtonComponent, FormsModule, UicTranslatePipe],\r\n templateUrl: './table-pagination.component.html',\r\n styleUrl: './table-pagination.component.scss'\r\n})\r\nexport class UicTablePaginationComponent {\r\n @Input() buttonSize: 's'|'m'| 'l' = 'm';\r\n @Input() currentPage = 1;\r\n @Input() totalPages = 1;\r\n @Input() size = 25;\r\n @Input() loading = false;\r\n @Input() showText = true;\r\n @Input() nextButtonText = 'table.next_short';\r\n @Input() previousButtonText = 'table.previous_short';\r\n visiblePages = 3;\r\n pagesInView:number[] = [];\r\n\r\n @Output() pageChange = new EventEmitter<number>();\r\n @Output() sizeChange = new EventEmitter<number>();\r\n\r\n get pages(): (number | string)[] {\r\n const pages: (number | string)[] = [];\r\n const range = Math.floor(this.visiblePages / 2);\r\n let start = Math.max(1, this.currentPage - range);\r\n let end = Math.min(this.totalPages, this.currentPage + range);\r\n\r\n if (end === this.totalPages) {\r\n start = Math.max(1, this.totalPages - (this.visiblePages - 1));\r\n }\r\n if (start === 1) {\r\n end = Math.min(this.totalPages, this.visiblePages);\r\n }\r\n\r\n if (start > 1) {\r\n pages.push(1);\r\n if (start > 2) pages.push('...');\r\n }\r\n\r\n for (let i = start; i <= end; i++) {\r\n pages.push(i);\r\n }\r\n\r\n if (end < this.totalPages) {\r\n if (end < this.totalPages - 1) pages.push('...');\r\n pages.push(this.totalPages);\r\n }\r\n\r\n return pages;\r\n }\r\n\r\n changePage(newPage: number) {\r\n if (newPage >= 1 && newPage <= this.totalPages && newPage !== this.currentPage) {\r\n this.currentPage = newPage;\r\n this.pageChange.emit(this.currentPage);\r\n }\r\n }\r\n}\r\n","\r\n<div class=\"table-page\">\r\n <ui-button \r\n [disabled]=\"loading || currentPage == 1\" \r\n (click)=\"changePage(currentPage - 1)\" \r\n [size]=\"buttonSize\" \r\n color=\"black\" \r\n type=\"bordered\" \r\n [text]=\"showText?(previousButtonText | uicTranslate):''\"\r\n [iconOnly]=\"!showText\" \r\n icon=\"ri-arrow-left-line\" > \r\n </ui-button> \r\n <div class=\"table-numbers\">\r\n @for (p of pages; track $index) {\r\n @if ( p!= '...' ){\r\n <button [disabled]=\"loading\" (click)=\"changePage(+p)\" [ngClass]=\"{'selected':currentPage==p}\" class=\"number\">{{p}}</button>\r\n } @else {\r\n <div class=\"space\">...</div>\r\n }\r\n }\r\n </div>\r\n <div class=\"current-mobile\"> {{currentPage}} </div>\r\n <ui-button \r\n [disabled]=\"loading || currentPage == totalPages\" \r\n (click)=\"changePage(currentPage + 1)\" \r\n [size]=\"buttonSize\" \r\n color=\"black\" \r\n type=\"bordered\" \r\n [text]=\"showText?(nextButtonText | uicTranslate):''\"\r\n [iconOnly]=\"!showText\" \r\n rightIcon=\"ri-arrow-right-line\" > \r\n </ui-button>\r\n</div>\r\n","import { animate, keyframes, state, style, transition, trigger } from \"@angular/animations\";\r\n\r\nexport const highlightRow = trigger('highlightRow', [\r\n state('highlighted', style({ backgroundColor: '#efe1f5' })),\r\n transition('* => highlighted', [\r\n animate('1000ms ease-in', keyframes([\r\n style({ backgroundColor: '#ffffff', offset: 0 }),\r\n style({ backgroundColor: '#efe1f5', offset: 0.3 }),\r\n style({ backgroundColor: '#ffffff', offset: 1.0 }),\r\n ]))\r\n ])\r\n ]);","import { animate, style, transition, trigger } from \"@angular/animations\";\r\nexport const animatedRow = trigger('animatedRow', [\r\n transition(':enter', [\r\n style({ opacity: 0, transform: 'translateY(-15px)' }),\r\n animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\r\n ]),\r\n transition(':leave', [\r\n animate('300ms ease-in', style({ opacity: 0, height: 0, padding: 0, margin: 0 }))\r\n ]),\r\n ]);","import { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { Component, ElementRef, EventEmitter, inject, Input, Output, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { UicCheckboxComponent } from '../inputs/checkbox/checkbox.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonSize, UicButtonComponent } from '../button/button.component';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'ui-action-button',\r\n imports: [UicCheckboxComponent, UicButtonComponent, FormsModule, UicTranslatePipe],\r\n templateUrl: './uic-action-button.component.html',\r\n styleUrl: './uic-action-button.component.scss'\r\n})\r\nexport class UicActionButtonComponent {\r\n @Input() icon = 'ri-more-2-line';\r\n @Input() options: ActionMenuOption[] = [];\r\n @Input() multiselect = false;\r\n @Input() size:ButtonSize = 's';\r\n\r\n @Output() optionSelected = new EventEmitter<ActionMenuOption>();\r\n @Output() optionsApplied = new EventEmitter<ActionMenuOption[]>();\r\n\r\n @ViewChild('menuTemplate') menuTemplate!: TemplateRef<any>;\r\n private overlayRef!: OverlayRef;\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n selectedSet = new Set<string | number>();\r\n allSelected = false;\r\n\r\n overlayPositions: ConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' },\r\n ];\r\n\r\n openMenu() {\r\n if (this.overlayRef) {\r\n this.closeMenu();\r\n return;\r\n }\r\n\r\n const origin = this.host.nativeElement.querySelector('.action-btn');\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy =\r\n this.overlay.position()\r\n .flexibleConnectedTo(origin as HTMLElement)\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(false)\r\n .withPush(true);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n });\r\n\r\n const portal = new TemplatePortal(this.menuTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.closeMenu());\r\n }\r\n\r\n /** SINGLE SELECT MODE */\r\n selectOption(option: ActionMenuOption) {\r\n if (!this.multiselect) {\r\n this.optionSelected.emit(option);\r\n this.closeMenu();\r\n }\r\n }\r\n\r\n /** MULTISELECT MODE */\r\n toggleOption(opt: ActionMenuOption) {\r\n if (this.selectedSet.has(opt.id)) {\r\n this.selectedSet.delete(opt.id);\r\n } else {\r\n this.selectedSet.add(opt.id);\r\n }\r\n this.updateAllSelected();\r\n }\r\n\r\n toggleAll(checked: boolean) {\r\n this.allSelected = checked;\r\n this.selectedSet.clear();\r\n if (checked) {\r\n this.options.forEach(o => this.selectedSet.add(o.id));\r\n }\r\n }\r\n\r\n applySelection() {\r\n const selected = this.options.filter(o => this.selectedSet.has(o.id));\r\n this.optionsApplied.emit(selected);\r\n this.closeMenu();\r\n }\r\n\r\n updateAllSelected() {\r\n this.allSelected = this.options.length > 0 && this.selectedSet.size === this.options.length;\r\n }\r\n\r\n closeMenu() {\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n this.overlayRef = null!;\r\n }\r\n }\r\n}\r\n\r\nexport interface ActionMenuOption {\r\n id: string;\r\n label: string;\r\n icon?: string;\r\n}\r\n","<!-- Botón -->\r\n<ui-button class=\"action-btn\" [size]=\"size\" [icon]=\"icon\" color=\"black\" [iconOnly]=\"true\" type=\"ghost\" (click)=\"openMenu()\">\r\n</ui-button>\r\n\r\n<!-- Menú -->\r\n<ng-template #menuTemplate>\r\n <div class=\"action-menu\">\r\n @if (multiselect) {\r\n <div class=\"action-menu-header\">\r\n <ui-checkbox [noPadding]=\"true\" \r\n [ngModel]=\"allSelected\" \r\n (ngModelChange)=\"toggleAll($event)\" [placeholder]=\"'common.all' | uicTranslate\"></ui-checkbox>\r\n </div>\r\n }\r\n <div class=\"action-menu-body\">\r\n @for (opt of options; track $index) {\r\n <div class=\"action-menu-item\" (click)=\"multiselect ? toggleOption(opt) : selectOption(opt)\">\r\n @if (multiselect) {\r\n <div>\r\n <ui-checkbox [noPadding]=\"true\" [ngModel]=\"selectedSet.has(opt.id)\"></ui-checkbox>\r\n </div>\r\n }\r\n @if (icon) {\r\n <i [class]=\"opt.icon\"></i>\r\n }\r\n <span>{{ opt.label | uicTranslate }}</span>\n </div>\n }\n </div>\n\r\n <!-- Footer con botón aplicar -->\r\n @if (multiselect) {\r\n <div class=\"action-menu-footer\">\r\n <ui-button type=\"bordered\" color=\"black\" size=\"t\" (click)=\"closeMenu()\">{{'common.close' | uicTranslate}}</ui-button>\r\n <ui-button color=\"black\" size=\"t\" (click)=\"applySelection()\">{{'common.apply' | uicTranslate}}</ui-button>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { Component, Input } from '@angular/core';\r\nimport { TableList } from '../table.models';\r\n\r\n@Component({\r\n selector: 'uic-table-list',\r\n imports: [],\r\n templateUrl: './table-list.component.html',\r\n styleUrl: './table-list.component.scss'\r\n})\r\nexport class UicTableListComponent {\r\n @Input() list:TableList[]=[];\r\n}\r\n","@for (item of list; track $index) {\r\n <div class=\"list-item\">\r\n <i [class]=\"item.icon??'ri-capsule-fill'\"></i>\r\n <div class=\"list-item-data\">\r\n <div>{{item.text}}</div>\r\n <p>{{item.subtext}}</p>\r\n </div> \r\n </div>\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'nameInitials'\r\n})\r\nexport class UicNameInitsPipe implements PipeTransform {\r\n\r\n transform(value: string): string {\r\n if (!value){\r\n return \"\";\r\n }\r\n const names:string[] = value.split(\" \");\r\n if (names.length > 1){\r\n return names[0].charAt(0) + names[1].charAt(0).toUpperCase(); \r\n }else if ( names[0].length>=2){\r\n return names[0].substring(0,2).toUpperCase();\r\n }else{\r\n return '';\r\n }\r\n }\r\n\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { TableUser } from '../table.models';\r\nimport { UicNameInitsPipe } from '../../../pipes/name-inits.pipe';\r\n\r\n@Component({\r\n selector: 'uic-table-user',\r\n imports: [UicNameInitsPipe],\r\n templateUrl: './table-user.component.html',\r\n styleUrl: './table-user.component.scss'\r\n})\r\nexport class UicTableUserComponent {\r\n @Input() user:TableUser | undefined;\r\n\r\n}\r\n","@if (user) {\r\n <div class=\"user-row\">\r\n @if (!user.hideAvatar) {\r\n <div class=\"user-inits\" [style]=\"user.photo? 'background-image: url('+ user.photo +')' :'' \">\r\n {{ !user.photo? (user.name | nameInitials) :''}}\r\n </div>\r\n }\r\n <div class=\"user-row-data\">\r\n <div>{{user.name}}</div>\r\n <p>{{user.id}}</p>\r\n </div>\r\n </div>\r\n}@else{\r\n -\r\n}","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ui-status-label',\r\n imports: [],\r\n templateUrl: './status-label.component.html',\r\n styleUrl: './status-label.component.scss'\r\n})\r\nexport class UicStatusLabelComponent {\r\n @Input() color = 'grey';\r\n @Input() type: 'status'|'tag' = 'status';\r\n @Input() icon = 'ri-circle-fill';\r\n}\r\n","<div [class]=\"'status-label sl-' + type + ' ' + (type == 'status' ? 'slc-' : 'slt-') + color\" >\r\n @if (icon!='' && type == 'status') {\r\n <i [class]=\"icon\"></i>\r\n }\r\n <div class=\"sl-text\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>","export const MODAL_DATA = 'MODAL_DATA';\r\nexport const MODAL_COMPONENT = 'MODAL_COMPONENT';\r\nexport const MODAL_CONFIG = 'MODAL_CONFIG';\r\nexport const MODAL_CLOSE_EVENT = 'modalClosed'; \r\nexport const MODAL_CLOSE_REQUEST = 'modalCloserRequested'; ","import { OverlayRef } from \"@angular/cdk/overlay\";\r\nimport { Observable, Subject } from \"rxjs\";\r\nimport { UicModalService } from \"./modal.service\";\r\n\r\nexport class UiModalRef<T = any> {\r\n private readonly _afterClosed = new Subject<{status:boolean, data: T | null}>();\r\n\r\n constructor(\r\n private readonly overlayRef: OverlayRef,\r\n private readonly modalService: UicModalService\r\n ) {}\r\n\r\n close(result: T | null = null): void {\r\n this.modalService.close(this.overlayRef, result);\r\n this._afterClosed.next({status: result!=null, data:result });\r\n this._afterClosed.complete();\r\n }\r\n\r\n closeFloating(result: T | null = null): void {\r\n this.modalService.closeFloating(this.overlayRef, result);\r\n this._afterClosed.next({status: result!=null, data:result });\r\n this._afterClosed.complete();\r\n }\r\n\r\n afterClosed(): Observable<{status:boolean, data: T | null}> {\r\n return this._afterClosed.asObservable();\r\n }\r\n\r\n}","import { Component, Inject } from '@angular/core';\r\nimport { AlertData, AlertResponseData } from './tiny-alert.model';\r\nimport { MODAL_DATA } from '../../services/modal.constant';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { UiModalRef } from '../../services/modaRef';\r\nimport { UicInputComponent } from '../inputs/input/input.component';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'ui-tiny-alert',\r\n imports: [\r\n UicButtonComponent,\r\n UicInputComponent,\r\n UicTranslatePipe\r\n ],\r\n templateUrl: './tiny-alert.component.html',\r\n styleUrl: './tiny-alert.component.scss'\r\n})\r\nexport class TinyAlertComponent {\r\n data:AlertData;\r\n constructor(\r\n @Inject(MODAL_DATA) inData:{alert:AlertData,editing:boolean},\r\n @Inject(UiModalRef) private readonly modalRef: UiModalRef )\r\n {\r\n this.data = inData.alert;\r\n }\r\n response:AlertResponseData = {};\r\n\r\n\r\n close(value:boolean){\r\n this.modalRef.closeFloating(value?this.response:null);\r\n }\r\n}\r\n","<div class=\"alert-wrapper\">\r\n @if (data.iconPath) {\r\n <img [src]=\"data.iconPath\" alt=\"\"> \r\n }@else{\r\n <i [class]=\"'alert-main-icon icon-'+data.type + ' ' + data.iconChar\" ></i>\r\n }\r\n <div class=\"h3-alert\" [class]=\"'icon-'+data.type\"> {{data.title | uicTranslate}} </div>\r\n \r\n <div class=\"alert-body\" [innerHTML]=\"data.body | uicTranslate\"> </div>\n \r\n @if ( data.showInput ){\r\n <ui-input>\r\n <input type=\"text\">\r\n </ui-input>\r\n }\r\n\r\n <div class=\"tinyalert-buttons\">\r\n @if (data.showCancelButton) {\r\n <ui-button (click)=\"close(false)\" type=\"bordered\" [color]=\"data.cancelButtonColor??'black'\" size=\"l\"> {{(data.cancelButtonText??'common.cancel') | uicTranslate}} </ui-button>\r\n }\r\n <ui-button (click)=\"close(true)\" [color]=\"data.okButtonColor??'primary'\" size=\"l\"> {{(data.okButtonText??'common.continue') | uicTranslate}} </ui-button>\r\n </div>\r\n \r\n <button class=\"floating-close\" (click)=\"close(false)\" >\r\n <i class=\"ri-close-line\"></i>\r\n </button>\r\n</div>\r\n","import { animate, style, transition, trigger } from \"@angular/animations\";\r\nexport const pushTop = trigger('pushTop', [\r\n transition(':enter',[style({opacity:0, transform: 'translateY(20px)'}), animate('.3s ease', style({opacity:1, transform: 'translateY(0)'}))]),\r\n transition(':leave', [animate('.3s ease', style({opacity:0, transform: 'translateY(-20px)'}))])\r\n ]);","import { CommonModule } from '@angular/common';\r\nimport { Component, Inject, Injector, Type, ViewChild } from '@angular/core';\r\nimport { CdkPortalOutlet, ComponentPortal, PortalModule } from '@angular/cdk/portal';\r\nimport { MODAL_COMPONENT, MODAL_CONFIG, MODAL_DATA } from '../../../services/modal.constant';\r\nimport { ModalConfig } from './modalconfig.model';\r\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { pushTop } from '../../../animations/pushTop.animation';\r\nimport { UiModalRef } from '../../../services/modaRef';\r\n\r\n\r\n@Component({\r\n selector: 'ui-modal',\r\n imports: [CommonModule,PortalModule,UicButtonComponent],\r\n templateUrl: './modal.component.html',\r\n styleUrl: './modal.component.scss',\r\n animations:[pushTop]\r\n})\r\nexport class UicModalComponent {\r\n myConfig:ModalConfig = {};\r\n ready = false;\r\n title='';\r\n @ViewChild(CdkPortalOutlet, { static: true }) portalOutlet!: CdkPortalOutlet;\r\n\r\n constructor(\r\n @Inject(UiModalRef) private readonly modalRef: UiModalRef,\r\n @Inject(MODAL_COMPONENT) private readonly component: Type<any>,\r\n @Inject(MODAL_CONFIG) private readonly congif: ModalConfig,\r\n private readonly injector: Injector\r\n ) {\r\n this.myConfig = congif;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const childInjector = Injector.create({\r\n providers: [\r\n { provide: UiModalRef, useValue: this.modalRef },\r\n { provide: MODAL_DATA, useValue: this.congif.data }\r\n ],\r\n parent: this.injector\r\n });\r\n const portal = new ComponentPortal(this.component, null, childInjector);\r\n this.portalOutlet.attachComponentPortal(portal);\r\n }\r\n\r\n\r\n closeOuside(){\r\n if ( this.congif.preventCloseingOutside === true ) return;\r\n this.modalRef.closeFloating(null);\r\n }\r\n\r\n close() {\r\n this.modalRef.closeFloating(null);\r\n }\r\n}\r\n","<div class=\"uic_backdrop\" (click)=\"closeOuside()\"> \n <div @pushTop class=\"uic_modal\" \n [class]=\"myConfig.size ? 'uic_' + myConfig.size : ''\"\n (click)=\"$event.stopPropagation()\">\n \n @if ( myConfig.title) {\n <div class=\"uic_modal-header\">\n {{myConfig.title}}\n <ui-button color=\"red\" type=\"ghost\" icon=\"ri-close-large-line\" (click)=\"close()\" [iconOnly]=\"true\"></ui-button>\n </div>\n }\n <div class=\"uic_modal-body\" [class.uic_body-padding]=\"myConfig.title!='' && !myConfig.noPadding\">\n <ng-template cdkPortalOutlet></ng-template>\n </div>\n\n </div>\n</div>\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\r\nexport const sideModal = trigger('sideModal', [\r\n state('visible', style({ transform: 'translateX(0)' })),\r\n state('hidden', style({ transform: 'translateX(100%)' })),\r\n\r\n // animación al CREARSE\r\n transition('void => visible', [\r\n style({ opacity: .8, transform: 'translateX(100%)' }),\r\n animate('.5s ease')\r\n ]),\r\n\r\n // animación al CERRAR\r\n transition('visible => hidden', [\r\n animate('.5s ease')\r\n ])\r\n])\r\n\r\nexport const fadeBackdrop =trigger('fadeBackdrop', [\r\n state('visible', style({ opacity: 1 })),\r\n state('hidden', style({ opacity: 0 })),\r\n transition('void => visible', [\r\n style({ opacity: 0 }),\r\n animate('300ms ease-out')\r\n ]),\r\n transition('visible => hidden', [\r\n animate('300ms ease-in')\r\n ])\r\n ])","import { CdkPortalOutlet, ComponentPortal, PortalModule } from '@angular/cdk/portal';\r\nimport { Component, Inject, Injector, Type, ViewChild } from '@angular/core';\r\nimport { MODAL_CLOSE_REQUEST, MODAL_COMPONENT, MODAL_CONFIG, MODAL_DATA } from '../../../services/modal.constant';\r\nimport { OverlayRef } from '@angular/cdk/overlay';\r\nimport { SideModalConfig } from './sideModalConfig.model';\r\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { fadeBackdrop, sideModal } from '../../../animations/sideModal.animation';\r\nimport { UiModalRef } from '../../../services/modaRef';\r\nimport { UicModalService } from '../../../services/modal.service';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\n\r\n@Component({\r\n selector: 'ui-side-modal',\r\n imports: [PortalModule,UicButtonComponent, UicTranslatePipe],\r\n templateUrl: './side-modal.component.html',\r\n styleUrl: './side-modal.component.scss',\r\n animations: [ sideModal, fadeBackdrop ]\r\n})\r\nexport class UicSideModalComponent {\r\n overlayRef!: OverlayRef; // lo setea el servicio\r\n state: 'visible' | 'hidden' = 'visible';\r\n show = true;\r\n myConfig:SideModalConfig = {};\r\n ready = false;\r\n @ViewChild(CdkPortalOutlet, { static: true }) portalOutlet!: CdkPortalOutlet;\r\n\r\n constructor(\r\n @Inject(UiModalRef) private readonly modalRef: UiModalRef,\r\n @Inject(MODAL_COMPONENT) private readonly component: Type<any>,\r\n @Inject(MODAL_CONFIG) private readonly congif: SideModalConfig,\r\n private readonly injector: Injector,\r\n private readonly modal:UicModalService\r\n ) {\r\n this.myConfig = congif;\r\n }\r\n\r\n ngOnInit() {\r\n if (this.overlayRef){\r\n this.overlayRef.hostElement.addEventListener(MODAL_CLOSE_REQUEST, () => {\r\n this.close();\r\n });\r\n }\r\n}\r\n\r\n ngAfterViewInit(): void {\r\n const childInjector = Injector.create({\r\n providers: [\r\n { provide: UiModalRef, useValue: this.modalRef },\r\n { provide: MODAL_DATA, useValue: this.congif.data }\r\n ],\r\n parent: this.injector\r\n });\r\n const portal = new ComponentPortal(this.component, null, childInjector);\r\n this.portalOutlet.attachComponentPortal(portal);\r\n }\r\n\r\n\r\n closeOuside(){\r\n if ( this.congif.preventCloseingOutside === true ) return;\r\n this.close();\r\n }\r\n\r\n close() {\r\n this.state = 'hidden';\r\n }\r\n\r\n cancel(){\r\n if ( this.myConfig.preventCloseOnCancel ){\r\n this.modal.triggerSave(false);\r\n }else{\r\n this.close();\r\n }\r\n }\r\n\r\n onAnimationDone(event: any) {\r\n if (event.toState === 'hidden' && event.triggerName === 'sideModal') {\r\n this.overlayRef.dispose();\r\n }\r\n }\r\n\r\n save(){\r\n this.modal.triggerSave();\r\n }\r\n}\r\n","<div [@fadeBackdrop]=\"state\" class=\"backdrop\" (click)=\"closeOuside()\"> \r\n</div>\r\n<div [@sideModal]=\"state\" \r\n (@sideModal.done)=\"onAnimationDone($event)\" \r\n class=\"sidemodal\" \r\n [style.width]=\"myConfig.width??'60%'\" \r\n (click)=\"$event.stopPropagation()\">\r\n @if (myConfig.headerEnabled) {\r\n <div class=\"modal-header\">\r\n <div class=\"modal-header-title\">\r\n <div class=\"f-title\">{{myConfig.title}}</div>\r\n <div class=\"f-subtitle\">{{myConfig.subtitle}}</div>\r\n </div>\r\n <ui-button class=\"close-icon\" (click)=\"close()\" icon=\"ri-close-large-line\" type=\"ghost\" color=\"black\" [iconOnly]=\"true\" size=\"m\"></ui-button>\r\n </div>\r\n }\r\n <div class=\"sidemodal-body\" [class.nopadding]=\"myConfig.noPadding\" >\r\n <ng-template cdkPortalOutlet></ng-template>\r\n </div>\r\n @if (myConfig.footerEnabled) {\r\n <div class=\"sidemodal-footer\">\r\n @if (myConfig.showCancelButton) {\r\n <ui-button (click)=\"cancel()\" color=\"black\" size=\"l\" type=\"bordered\" [icon]=\"myConfig.footerCancelIcon??'ri-close-line'\">{{(myConfig.footerCancelButtonText??'modal.cancel') | uicTranslate}}</ui-button>\r\n }\r\n <ui-button (click)=\"save()\" color=\"black\" size=\"l\" [rightIcon]=\"myConfig.footerOkIcon??'ri-check-line'\">{{(myConfig.footerOkButtonText??'modal.next') | uicTranslate}}</ui-button>\r\n </div>\r\n }\r\n</div>\r\n","import { EnvironmentInjector, inject, Injectable, Injector, Type } from '@angular/core';\r\nimport { MODAL_CLOSE_EVENT, MODAL_CLOSE_REQUEST, MODAL_COMPONENT, MODAL_CONFIG } from './modal.constant';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { UiModalRef } from './modaRef';\r\nimport { ModalConfig } from '../components/modal/floating-modal/modalconfig.model';\r\nimport { SideModalConfig } from '../components/modal/side-modal/sideModalConfig.model';\r\nimport { UicModalComponent } from '../components/modal/floating-modal/modal.component';\r\nimport { UicSideModalComponent } from '../components/modal/side-modal/side-modal.component';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UicModalService {\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly envInjector = inject(EnvironmentInjector);\r\n\r\n openFloatingModal<TComponent>(\r\n component: Type<TComponent>,\r\n config: ModalConfig = {}\r\n ): UiModalRef {\r\n return this.openModal(component,config,true);\r\n }\r\n\r\n openSideModal<TComponent>(\r\n component: Type<TComponent>,\r\n config: SideModalConfig = {}\r\n ): UiModalRef {\r\n return this.openModal(component,config,false);\r\n }\r\n\r\n private openModal<TComponent>(\r\n component: Type<TComponent>,\r\n config: ModalConfig|SideModalConfig = {},\r\n isFloating = false\r\n ){\r\n const overlayConfig = this.createOverlayConfig(isFloating);\r\n const overlayRef = this.overlay.create(overlayConfig);\r\n const modalRef = new UiModalRef(overlayRef, this);\r\n const injector = this.createModalInjector(overlayRef,modalRef,component,config); \r\n if ( isFloating){\r\n const modalPortal = new ComponentPortal(UicModalComponent, null, injector);\r\n overlayRef.attach(modalPortal);\r\n }else{\r\n const modalPortal = new ComponentPortal( UicSideModalComponent, null, injector);\r\n const componentRef = overlayRef.attach(modalPortal);\r\n componentRef.instance.overlayRef = overlayRef;\r\n }\r\n return modalRef; \r\n }\r\n\r\n close(overlayRef: OverlayRef, result: any = null): void { \r\n overlayRef.hostElement.dispatchEvent(\r\n new CustomEvent(MODAL_CLOSE_REQUEST, { detail: result })\r\n );\r\n } \r\n\r\n closeFloating(overlayRef: OverlayRef, result: any = null){\r\n overlayRef.backdropElement?.dispatchEvent(\r\n new CustomEvent(MODAL_CLOSE_EVENT, { detail: result })\r\n );\r\n overlayRef.dispose();\r\n }\r\n\r\n private readonly _save$ = new Subject<boolean>();\r\n save$ = this._save$.asObservable();\r\n\r\n triggerSave(result=true): void {\r\n this._save$.next(result);\r\n }\r\n\r\n private createOverlayConfig(isFloating: boolean): OverlayConfig {\r\n const positionStrategy = isFloating \r\n ? this.overlay.position().global().left()\r\n : this.overlay.position().global().right();\r\n\r\n return {\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-dark-backdrop',\r\n positionStrategy,\r\n scrollStrategy: this.overlay.scrollStrategies.block(),\r\n disposeOnNavigation: true, \r\n };\r\n }\r\n\r\n private createModalInjector<TComponent>(\r\n overlayRef: OverlayRef,\r\n modalRef: UiModalRef,\r\n component: Type<TComponent>,\r\n config: ModalConfig | SideModalConfig\r\n ): Injector {\r\n return Injector.create({\r\n providers: [\r\n { provide: OverlayRef, useValue: overlayRef },\r\n { provide: UiModalRef, useValue: modalRef },\r\n { provide: MODAL_COMPONENT, useValue: component },\r\n { provide: MODAL_CONFIG, useValue: config }\r\n ],\r\n parent: this.envInjector,\r\n });\r\n }\r\n}\r\n\r\n","import { AlertData } from '../tiny-alert/tiny-alert.model';\r\n\r\nlet nextId = 1;\r\n\r\nexport function createTinySuccess(\r\n body: string,\r\n options?: Partial<AlertData>\r\n): AlertData {\r\n return {\r\n body,\r\n title: 'alerts.success_title',\r\n type: 'success',\r\n iconChar: 'ri-emotion-laugh-line',\r\n okButtonColor: 'green',\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createTinyError(\r\n body: string,\r\n options?: Partial<AlertData>\r\n): AlertData {\r\n return {\r\n body,\r\n title: 'alerts.error_title',\r\n iconChar: 'ri-emotion-unhappy-line',\r\n okButtonColor: 'red',\r\n okButtonText: 'common.close',\r\n type: 'error',\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createTinyDelete(\r\n body: string,\r\n options?: Partial<AlertData>\r\n): AlertData {\r\n return {\r\n body,\r\n title: 'alerts.delete_title',\r\n iconChar: 'ri-delete-bin-line',\r\n okButtonColor: 'red',\r\n okButtonText: 'alerts.delete_confirm',\r\n showCancelButton: true,\r\n cancelButtonText: 'common.cancel',\r\n type: 'delete',\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createTinyWarning(\r\n body: string,\r\n options?: Partial<AlertData>\r\n): AlertData {\r\n return {\r\n body,\r\n title: 'alerts.warning_title',\r\n iconChar: 'ri-alarm-warning-line',\r\n okButtonColor: 'yellow',\r\n type: 'warning',\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createTinyInfo(\r\n body: string,\r\n options?: Partial<AlertData>\r\n): AlertData {\r\n return {\r\n body,\r\n iconChar: 'ri-information-line',\r\n okButtonColor: 'black',\r\n type: 'info',\r\n ...options,\r\n };\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { AlertData, AlertResponse } from '../components/tiny-alert/tiny-alert.model';\r\nimport { TinyAlertComponent } from '../components/tiny-alert/tiny-alert.component';\r\nimport { UicModalService } from './modal.service';\r\nimport { createTinyDelete, createTinyError, createTinyInfo, createTinySuccess, createTinyWarning } from '../components/push-alerts/tynyalert.helpers';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UicTinyAlertService {\r\n\r\n private readonly modal = inject(UicModalService);\r\n\r\n showAlert(data: AlertData): Promise<AlertResponse> {\r\n return new Promise<AlertResponse>((resolve) => {\r\n this.modal.openFloatingModal(TinyAlertComponent, {\r\n data: { alert: data }\r\n }).afterClosed().subscribe(result => {\r\n resolve({\r\n value: result?.status,\r\n data: result?.data\r\n });\r\n });\r\n });\r\n }\r\n\r\n success(message:string,options?: Partial<AlertData>){\r\n return this.showAlert( createTinySuccess(message,options) )\r\n }\r\n\r\n error(message:string,options?: Partial<AlertData>){\r\n return this.showAlert( createTinyError(message,options) )\r\n }\r\n\r\n warning(message:string,options?: Partial<AlertData>){\r\n return this.showAlert( createTinyWarning(message,options) )\r\n }\r\n info(message:string,options?: Partial<AlertData>){\r\n return this.showAlert( createTinyInfo(message,options) )\r\n }\r\n\r\n deleteConfirmation(message:string,options?: Partial<AlertData>){\r\n return this.showAlert( createTinyDelete(message,options) )\r\n }\r\n \r\n}\r\n","import { Component, DoCheck, EventEmitter, inject, Input, Output } from '@angular/core';\r\nimport { ColumnTypes, TableRow, TableRowData } from '../table/table.models';\r\nimport { UicToolTipDirective } from '../../directives/tool-tip.directive';\r\nimport { UicTableListComponent } from '../table/table-list/table-list.component';\r\nimport { UicTableUserComponent } from '../table/table-user/table-user.component';\r\nimport { UicCheckboxComponent } from '../inputs/checkbox/checkbox.component';\r\nimport { UicStatusLabelComponent } from '../status-label/status-label.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UicSwichComponent } from '../inputs/toggle-button/toggle-button.component';\r\nimport { CurrencyPipe, DatePipe } from '@angular/common';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { UicTinyAlertService } from '../../services/tiny-alert.service';\r\nimport { AlertData } from '../tiny-alert/tiny-alert.model';\r\n\r\n@Component({\r\n selector: 'ui-item-value',\r\n imports: [\r\n UicToolTipDirective,\r\n UicTableUserComponent,\r\n UicSwichComponent,\r\n UicStatusLabelComponent,\r\n UicTableListComponent,\r\n FormsModule,\r\n UicButtonComponent,\r\n CurrencyPipe,\r\n DatePipe\r\n ],\r\n templateUrl: './item-value.component.html',\r\n styleUrl: './item-value.component.scss'\r\n})\r\nexport class ItemValueComponent implements DoCheck {\r\n\r\n private readonly alers = inject(UicTinyAlertService);\r\n\r\n @Input() key:string|number = '';\r\n @Input() type:ColumnTypes = 'text';\r\n @Input() alignment = '';\r\n @Input() row!:TableRow;\r\n @Input() disabled = false;\r\n\r\n @Input() data:TableRowData|null = null;\r\n\r\n @Input() switchValidation:AlertData[] = [];\r\n @Output() switchConfirmed = new EventEmitter<boolean>();\r\n \r\n expanded = false;\r\n checked = false;\r\n currentData:TableRowData|null = null;\r\n\r\n private previousRow?: TableRow;\r\n private previousRowData?: TableRowData[];\r\n private previousKey: string|number = '';\r\n private previousInputData: TableRowData|null = null;\r\n\r\n ngDoCheck(){\r\n this.syncCurrentData();\r\n }\r\n\r\n private syncCurrentData(): void {\r\n const nextData = this.resolveCurrentData();\r\n\r\n if (\r\n this.previousRow !== this.row ||\r\n this.previousRowData !== this.row?.data ||\r\n this.previousKey !== this.key ||\r\n this.previousInputData !== this.data ||\r\n this.currentData !== nextData\r\n ) {\r\n this.currentData = nextData;\r\n this.checked = nextData?.checked ?? false;\r\n this.previousRow = this.row;\r\n this.previousRowData = this.row?.data;\r\n this.previousKey = this.key;\r\n this.previousInputData = this.data;\r\n }\r\n }\r\n\r\n private resolveCurrentData(): TableRowData|null {\r\n if (this.data) {\r\n return this.data;\r\n }\r\n\r\n if (!this.row) {\r\n return null;\r\n }\r\n\r\n return this.row.data.find(f => f.key == this.key) ?? null;\r\n }\r\n\r\n switchHandler(rowId:string|number, value:boolean){\r\n if ( this.currentData && this.switchValidation.length >0 ){\r\n const OK = this.switchValidation[0];\r\n const CANCEL = this.switchValidation[1]??this.switchValidation[0];\r\n\r\n this.alers.showAlert( value? OK : CANCEL ).then(r=>{\r\n if ( r.value ){\r\n this.switchConfirmed.emit(value);\r\n }else{\r\n if ( this.currentData){\r\n this.currentData.checked = !value\r\n this.checked = this.currentData.checked;\r\n }\r\n setTimeout(() => {\r\n }, 100);\r\n }\r\n \r\n });\r\n }else{\r\n this.switchConfirmed.emit(value);\r\n }\r\n }\r\n\r\n expand (click:MouseEvent){\r\n click.stopPropagation();\r\n this.expanded = !this.expanded;\r\n }\r\n copyText(text:string,click:MouseEvent){\r\n click.stopPropagation();\r\n navigator.clipboard.writeText(text)\r\n .then(() => {\r\n })\r\n .catch(err => {\r\n console.error('No se pudo copiar: ', err);\r\n }); \r\n }\r\n}\r\n","@if (currentData) {\r\n @if (type == 'text' || !type) {\r\n <div [class]=\"'ui-trc-' + currentData.textColor \">\r\n @if( currentData.icon ){ <i [class]=\"currentData.icon + ' ui-trc-' + currentData.iconColor\"></i>}\r\n {{ currentData.value }} \r\n @if( currentData.rightIcon ){ <i [class]=\"currentData.rightIcon + ' ui-trc-' + currentData.iconColor\"></i>}\r\n </div>\r\n }\r\n @if (type == 'copy') {\r\n <div class=\"copy-div\">\r\n {{ currentData.value }} \r\n <ui-button (click)=\"copyText((currentData.value??'').toString(),$event)\" type=\"ghost\" size=\"s\" [iconOnly]=\"true\" icon=\"ri-file-copy-line\"></ui-button>\r\n </div>\r\n }\r\n @if (type == 'money'){\r\n {{ (currentData.value??0) | currency: currentData.currencyCode||''}} \r\n }\r\n @if (type == 'bold'){\r\n <b>{{ currentData.value}}</b>\r\n }\r\n @if (type == 'date'){\r\n {{ (currentData.value??'').toString() | date: 'dd/MM/yyyy'}} \r\n }\r\n @if (type == 'bigtext') {\r\n <div (click)=\"expand($event)\" class=\"expandible-row\" [class.expandedrow]=\"expanded\">\r\n {{ currentData.value }} \r\n @if( currentData.value && currentData.value.toString().length > 0){\r\n <i [class]=\"expanded?'ri-arrow-up-s-line':'ri-arrow-down-s-line'\"></i>\r\n }\r\n @if (!expanded && currentData.value && currentData.value.toString().length > 0) {\r\n <div class=\"fade-overlay\"></div>\r\n }\r\n </div>\r\n }\r\n @if (type == 'icon-list') {\r\n @for (alert of currentData.list; track $index) {\r\n <i [uiTooltip]=\"alert.text\" [class]=\"alert.icon + ' ui-alert'\" ></i>\n }\r\n }\r\n @else if (type == 'list'){\r\n <uic-table-list [list]=\"currentData.list??[]\"></uic-table-list> \r\n }\r\n @else if (type == 'user'){\r\n <uic-table-user [user]=\"currentData.user\"></uic-table-user> \r\n }\r\n @else if (type == 'status'){\r\n @if (currentData.value) {\r\n <ui-status-label [icon]=\"currentData.icon??'ri-circle-fill'\" [color]=\"currentData.color??''\"> {{currentData.value}} </ui-status-label> \r\n }@else {\r\n -\r\n }\r\n }\r\n @else if (type == 'tag'){\r\n <ui-status-label type=\"tag\" [icon]=\"currentData.icon??'ri-circle-fill'\" [color]=\"currentData.color??''\"> {{currentData.value}} </ui-status-label> \r\n }\r\n @else if (type == 'switch'){\r\n <div (click)=\"$event.stopPropagation()\">\r\n <ui-switch [disabled]=\"disabled\" [(checked)]=\"checked\" (checkedChange)=\"switchHandler(row.id,$event)\"></ui-switch> \r\n </div>\r\n }\r\n\r\n @if( currentData.subtext ){\r\n <div [class]=\"'subtext ui-alignment-'+alignment\">{{ currentData.subtext }}</div>\r\n }\r\n}\r\n\r\n","import { Component, Input } from '@angular/core';\r\nimport { UicStatusLabelComponent } from '../status-label/status-label.component';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { CurrencyPipe, DatePipe } from '@angular/common';\r\nimport { BackgroundColors, ColumnTypes, TableList, TableRowData, TableTextColors, TableUser } from '../table/table.models';\r\nimport { ItemValueComponent } from '../item-value/item-value.component';\r\nimport { AlertData } from '../tiny-alert/tiny-alert.model';\r\n\r\n\r\n@Component({\r\n selector: 'ui-portlet-card',\r\n imports: [\r\n ItemValueComponent\r\n],\r\n templateUrl: './uic-portlet-card.component.html',\r\n styleUrl: './uic-portlet-card.component.scss'\r\n})\r\nexport class UicPortletCardComponent {\r\n\r\n @Input() title = '';\r\n @Input() data: UicPortletData[] = [];\r\n @Input() layout: 'horizontal' | 'vertical' = 'horizontal';\r\n @Input() cols = 1;\r\n @Input() gap = 20;\r\n @Input() labelWeight= 400;\r\n @Input() valueWeight= 500;\r\n @Input() valueSize= 14;\r\n @Input() switchValidation:AlertData[] = [];\r\n finalData:TableRowData[]=[];\r\n\r\n ngOnInit(){\r\n this.finalData = this.data.map(p=>({...p,key:p.label??'-'}));\r\n }\r\n\r\n get gridTemplateColumns(): string | null {\r\n if (this.layout !== 'vertical') {\r\n return null;\r\n }\r\n const columns = Math.max(1, Math.floor(this.cols || 1));\r\n return `repeat(${columns}, minmax(0, 1fr))`;\r\n }\r\n\r\n copyText(text:string){\r\n navigator.clipboard.writeText(text)\r\n .then(() => {\r\n })\r\n .catch(err => {\r\n console.error('No se pudo copiar: ', err);\r\n }); \r\n }\r\n\r\n switchHandler(key:string,value:boolean){\r\n \r\n }\r\n\r\n}\r\n\r\nexport interface UicPortletData{\r\n value?: string|number;\r\n label?:string;\r\n type?:ColumnTypes;\r\n subtext?: string|number;\r\n checked?:boolean;\r\n list?:TableList[];\r\n user?:TableUser;\r\n icon?: string;\r\n rightIcon?:string;\r\n iconColor?:string;\r\n textColor?: TableTextColors;\r\n color?: BackgroundColors;\r\n expanded?:boolean;\r\n currencyCode?:string;\r\n}\r\n","@if ( title) {\r\n <h2>{{title}}</h2>\r\n}\r\n<div class=\"portlet\" \r\n [class.portlet-vertical]=\"layout === 'vertical'\" \r\n [style.gridTemplateColumns]=\"gridTemplateColumns\"\r\n [style]=\"'gap: ' + gap + 'px;'\" >\r\n @for (item of finalData; track $index) {\r\n <div class=\"portlet-row\" [class.portlet-row-vertical]=\"layout === 'vertical'\">\r\n <div class=\"portlet-row-label\" [style.fontWeight]=\"labelWeight\">{{item.label}}:</div>\r\n <div class=\"portlet-row-value\" [style.fontWeight]=\"valueWeight\" [style.fontSize.px]=\"valueSize\">\r\n <ui-item-value\r\n [type]=\"item.type??'text'\"\r\n [data]=\"item\"\r\n [alignment]=\" layout === 'horizontal' ? 'right' : 'left'\"\r\n [switchValidation]=\"switchValidation\"\r\n (switchConfirmed)=\"switchHandler('xx', $event)\"\r\n ></ui-item-value>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { TableColums, TableRow, TableRowData } from '../table/table.models';\r\nimport { UicPortletCardComponent, UicPortletData } from '../uic-portlet-card/uic-portlet-card.component';\r\n\r\n@Component({\r\n selector: 'ui-short-table',\r\n imports: [UicPortletCardComponent],\r\n templateUrl: './short-table.component.html',\r\n styleUrl: './short-table.component.scss'\r\n})\r\nexport class UicShortTableComponent {\r\n \r\n @Input() columns:TableColums[] = [];\r\n @Input() data!:TableRow;\r\n @Input() loading = false;\r\n @Input() disabled = false;\r\n @Input() cols = 2;\r\n\r\n portlet:UicPortletData[] =[];\r\n\r\n ngOnInit(){\r\n this.portlet = this.apTableToPortlets(this.columns,this.data);\r\n }\r\n\r\n apTableToPortlets(\r\n columns: TableColums[],\r\n row: TableRow\r\n ): UicPortletData[] {\r\n return columns.filter(f=> !!f.hideOn )\r\n .map(col => {\r\n const cell = row.data.find(d => d.key === col.key);\r\n if (!cell) return null;\r\n\r\n return {\r\n type: col.type == 'bigtext' ? 'text' : col.type,\r\n label: col.label, \r\n ...cell\r\n } as UicPortletData;\r\n\r\n })\r\n .filter((p): p is UicPortletData => p !== null);\r\n\r\n }\r\n}\r\n","<ui-portlet-card \r\n [gap]=\"20\" \r\n layout=\"vertical\" \r\n [cols]=\"cols\" \r\n [data]=\"portlet\">\r\n</ui-portlet-card>","import { EditableBlock, FormBlock, TableColums, TableRowData } from \"../public-api\";\r\n\r\n\r\n// Mapea datos a tablas (deben tener el mismo nombre)\r\nexport function helperTableMapDatoToColums(data:Record<string,any>,headers:TableColums[]){\r\n const row:TableRowData[] = [];\r\n headers.forEach( head =>{\r\n if ( head.key in data && (head.type=='text' || !head.type)){\r\n row.push({\r\n key: head.key,\r\n value: data[head.key]\r\n });\r\n }\r\n });\r\n return row;\r\n }\r\n\r\n// MAPEA EL RESULTADO DE UN FORMULARIO AL DTO\r\nexport function helperFormMapFormdataToObject<T extends object>(formData: Record<string, any>, defaults: T): T {\r\n return {\r\n ...defaults,\r\n ...Object.fromEntries(\r\n Object.keys(defaults) \r\n .filter(key => key in formData)\r\n .map(key => [key, formData[key]])\r\n )\r\n } as T; \r\n}\r\n\r\n\r\nexport function isMobile(): boolean {\r\n const mobileBP = getComputedStyle(document.documentElement)\r\n .getPropertyValue('--bp-mobile');\r\n return window.matchMedia(`(max-width: ${mobileBP})`).matches;\r\n}\r\n\r\nexport function helperShowFormFromBuilder(blocks: EditableBlock[], cols: number, editable = false) {\r\n return {\r\n cols: cols,\r\n blocks: mapEditableBlocksToBlocks(blocks, editable)\r\n };\r\n}\r\n\r\n\r\nfunction mapEditableBlocksToBlocks(blocks: EditableBlock[], editable: boolean): FormBlock[] {\r\n const fieldCodeToName = new Map<string, string>();\r\n blocks.forEach(block => {\r\n block.fields.forEach(field => {\r\n fieldCodeToName.set(field.code, field.fieldData.name);\r\n });\r\n });\r\n\r\n return blocks.map(block => ({\r\n title: block.title,\r\n subtitle: block.subtitle,\r\n fields: block.fields.map(field => {\r\n const visibilityRules = field.fieldData.visibilityRules?.map(rule => ({\n ...rule,\n fieldName: fieldCodeToName.get(rule.fieldName) ?? rule.fieldName\n }));\n const optionsSource = field.fieldData.optionsSource?.dependsOn\n ? {\n ...field.fieldData.optionsSource,\n dependsOn: fieldCodeToName.get(field.fieldData.optionsSource.dependsOn) ?? field.fieldData.optionsSource.dependsOn\n }\n : field.fieldData.optionsSource;\n\n return {\n ...field.fieldData,\n disabled: !editable,\n optionsSource,\n visibilityRules: visibilityRules ?? field.fieldData.visibilityRules\n };\n })\n }));\r\n }\n","import { Component, ContentChild, ElementRef, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { TableAction, TableCellChange, TableColums, TableRow, TableFilters, TableRowData, TableButton } from './table.models';\r\nimport { ButtonColor, UicButtonComponent } from '../button/button.component';\r\nimport { UicTableUicSearcherComponent } from './table-searcher/table-searcher.component';\r\nimport { UicTablePaginationComponent } from './table-pagination/table-pagination.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UicToolTipDirective } from '../../directives/tool-tip.directive';\r\nimport { highlightRow } from '../../animations/highlightRow.animation';\r\nimport { animatedRow } from '../../animations/animatedRow.animation';\r\nimport { UicCheckboxComponent } from '../inputs/checkbox/checkbox.component';\r\nimport { ActionMenuOption, UicActionButtonComponent } from '../uic-action-button/uic-action-button.component';\r\nimport { UicShortTableComponent } from '../short-table/short-table.component';\r\nimport { ItemValueComponent } from '../item-value/item-value.component';\r\nimport { isMobile } from '../../helpers'\r\nimport { AlertData } from '../tiny-alert/tiny-alert.model';\r\nimport { UicInputComponent } from '../inputs/input/input.component';\r\nimport { UicSelectComponent } from '../inputs/select/select.component';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'ui-table',\r\n imports: [CommonModule, \r\n UicButtonComponent, \r\n ItemValueComponent,\r\n UicShortTableComponent,\r\n UicActionButtonComponent,\r\n UicTableUicSearcherComponent, \r\n UicTablePaginationComponent,\r\n UicTranslatePipe,\r\n UicToolTipDirective,\r\n UicCheckboxComponent, \r\n UicInputComponent,\r\n UicSelectComponent,\r\n FormsModule],\r\n templateUrl: './table.component.html',\r\n styleUrl: './table.component.scss',\r\n animations: [ highlightRow, animatedRow ]\r\n})\r\nexport class UicTableComponent {\r\n \r\n @Input() columns:TableColums[] = [];\r\n @Input() data:TableRow[] = [];\r\n @Input() loading = false;\r\n @Input() disabled = false;\r\n @Input() editable = false;\r\n @Input() rowClickable = false;\r\n @Input() rowExpandible = false;\r\n @Input() pages = 0;\r\n @Input() size = 25;\r\n @Input() squeletonRows = 5;\r\n @Input() buttonSize: 'm'|'l'|'s' = 'm';\r\n @Input() highlightedId: string |number = 0;\r\n @Input() headerText = '';\r\n @Input() headerSubtitle = '';\r\n @Input() totalItems = 0;\r\n @Input() alignment: 'left'|'center' = 'center';\r\n \r\n @Input() searchEnabled = true;\r\n @Input() searchLabel = 'table.search_label';\r\n @Input() searchPlaceholder = 'table.search_placeholder';\r\n \r\n @Input() headerClass = '';\r\n @Input() headerBackgroundColor:ButtonColor = 'grey';\r\n @Input() striped = false;\r\n @Input() showPagination = true;\r\n @Input() searchOnKeydown = false;\r\n \r\n @Input() showEmptyMessage = true;\r\n @Input() showSearchButton = false;\r\n @Input() showTextPagination = true;\r\n @Input() emptyMessage = 'table.empty';\r\n @Input() switchValidation:AlertData[] = [];\r\n @Input() nextButtonText = 'table.next_short';\r\n @Input() previousButtonText = 'table.previous_short';\r\n @Input() mobilePortletCols = 2;\r\n \r\n @Input() searcherShowButtonText = false;\r\n \r\n \r\n \r\n @Output() action = new EventEmitter<TableAction>();\r\n @Output() update = new EventEmitter<TableFilters>();\r\n @Output() checkedChange = new EventEmitter<(string|number)[]>(); \r\n @Output() switchChange = new EventEmitter<{key:string|number,value:boolean,columName:string}>(); \r\n @Output() clickedRow = new EventEmitter<string|number>(); \r\n @Output() cellChange = new EventEmitter<TableCellChange>();\r\n \r\n allSelected = false;\r\n \r\n checkedIds = new Set<string | number >();\r\n sortKey = '';\r\n sortAsc = true;\r\n filter = '';\r\n page=1;\r\n\r\n fullViewRows:(string|number)[] = [];\r\n\r\n mobileView = false;\r\n private editableValues: Record<string, string|number|null> = {};\r\n\r\n ngOnInit(){\r\n this.mobileView = isMobile();\r\n this.syncEditableValues();\r\n }\r\n\r\n getValue(data:TableRowData[],key:string):string{\r\n const col = data.find(col => col.key == key);\r\n return col?.value?.toString()??'';\r\n }\r\n\r\n\r\n getMoreActions(actions:TableButton[], row:TableRowData[]):ActionMenuOption[]{\r\n return actions\r\n .filter(f=> this.isValidRule(row, f.rule))\r\n .map(p=>({id:p.key,label:p.text??'',icon:p.icon??''}))\r\n }\r\n\r\n getFontColor(data:TableRowData[],key:string){\r\n const col = data.find(col => col.key == key);\r\n return 'ui-trc-' + (col?.textColor??'black');\r\n }\r\n\r\n isValidRule(data:TableRowData[],key:string[]|undefined):boolean{\r\n if ( !key ) return true;\r\n let valid = true;\r\n\r\n key.forEach(k => {\r\n const col = data.find(col => col.key == k);\r\n valid = valid && !!(col?.value);\r\n });\r\n \r\n return valid;\r\n }\r\n\r\n\r\n sortClick(key:string){\r\n if ( this.sortKey != key ){\r\n this.sortKey = key;\r\n this.sortAsc = true;\r\n }else if ( this.sortAsc ){\r\n this.sortAsc = false;\r\n }else{\r\n this.sortKey = '';\r\n this.sortAsc = true;\r\n }\r\n this.updateData();\r\n }\r\n sizeChabge(newSize:number){\r\n this.size = newSize;\r\n this.updateData(); \r\n }\r\n pageChage(newPage:number){\r\n this.page = newPage;\r\n this.updateData();\r\n }\r\n search(text:string){\r\n this.filter = text;\r\n this.updateData();\r\n }\r\n updateData(){\r\n this.update.emit({\r\n sortBy:this.sortKey,\r\n isSortAscending:this.sortAsc,\r\n pageNumber:this.page,\r\n pageSize:this.size,\r\n filter: this.filter\r\n })\r\n }\r\n \r\n toggleSelection(id: string|number, checked: boolean){\r\n if (checked) {\r\n this.checkedIds.add(id);\r\n } else {\r\n this.checkedIds.delete(id);\r\n }\r\n this.areAllSelected();\r\n this.checkedChange.emit(Array.from(this.checkedIds));\r\n }\r\n \r\n toggleAll(checked: boolean) {\r\n if (checked) {\r\n this.data.forEach(item => this.checkedIds.add(item.id));\r\n } else {\r\n this.checkedIds.clear();\r\n }\r\n this.checkedChange.emit(Array.from(this.checkedIds));\r\n }\r\n areAllSelected() {\r\n this.allSelected = this.checkedIds.size === this.data.length && this.data.length > 0;\r\n }\r\n \r\n ngOnChanges(change:SimpleChanges) {\r\n if (change['data'] || change['columns']) {\r\n this.syncEditableValues();\r\n }\r\n this.areAllSelected();\r\n }\r\n\r\n doAction(rowId:string|number,key:string,event?: MouseEvent){\r\n event?.stopPropagation();\r\n this.action.emit({rowId,key});\r\n }\r\n\r\n\r\n resetCheckedIds() {\r\n this.checkedIds.clear();\r\n this.checkedChange.emit([]);\r\n }\r\n\r\n switchHandler(key:string|number,value:boolean, columName:string){\r\n this.switchChange.emit({key,value,columName});\r\n }\r\n\r\n\r\n @ContentChild('[actions]') actionsRef?: ElementRef;\r\n\r\n hasActions = false;\r\n\r\n ngAfterContentInit() {\r\n this.hasActions = !!this.actionsRef;\r\n }\r\n\r\n clickRow(id:number|string){\r\n if (this.rowClickable)\r\n this.clickedRow.emit(id);\r\n \r\n\r\n if ( this.rowExpandible && this.mobileView){\r\n if ( this.fullViewRows.includes(id) ) { \r\n this.fullViewRows = this.fullViewRows.filter(f=>f!=id);\r\n }else{\r\n this.fullViewRows.push(id)\r\n }\r\n }\r\n }\r\n\r\n isCellEditable(column: TableColums): boolean {\r\n if (!this.editable || this.disabled || !column.editable) return false;\r\n const editionType = column.editionType ?? 'input';\r\n return editionType === 'input' || editionType === 'select';\r\n }\r\n\r\n getEditableCellValue(rowId: string|number, columnKey: string): string|number|null {\r\n return this.editableValues[this.getEditableCellKey(rowId, columnKey)] ?? null;\r\n }\r\n\r\n onEditableInputChange(rowId: string|number, columnKey: string, value: string): void {\r\n this.editableValues[this.getEditableCellKey(rowId, columnKey)] = value;\r\n }\r\n\r\n onEditableInputBlur(rowId: string|number, rowData: TableRowData[], columnKey: string): void {\r\n const key = this.getEditableCellKey(rowId, columnKey);\r\n const newValue = this.editableValues[key] ?? null;\r\n const previousValue = this.getRawValue(rowData, columnKey);\r\n if (this.areSameValue(newValue, previousValue)) return;\r\n this.cellChange.emit({ rowId, columnKey, value: newValue, previousValue });\r\n }\r\n\r\n onEditableSelectChange(rowId: string|number, rowData: TableRowData[], columnKey: string, value: string|number|null): void {\r\n const key = this.getEditableCellKey(rowId, columnKey);\r\n this.editableValues[key] = value;\r\n const previousValue = this.getRawValue(rowData, columnKey);\r\n if (this.areSameValue(value, previousValue)) return;\r\n this.cellChange.emit({ rowId, columnKey, value, previousValue });\r\n }\r\n\r\n private syncEditableValues(): void {\r\n const nextValues: Record<string, string|number|null> = {};\r\n for (const row of this.data) {\r\n for (const col of this.columns) {\r\n if (!col.editable) continue;\r\n nextValues[this.getEditableCellKey(row.id, col.key)] = this.getRawValue(row.data, col.key);\r\n }\r\n }\r\n this.editableValues = nextValues;\r\n }\r\n\r\n private getEditableCellKey(rowId: string|number, columnKey: string): string {\r\n return `${rowId}::${columnKey}`;\r\n }\r\n\r\n private getRawValue(data: TableRowData[], key: string): string|number|null {\r\n const col = data.find(c => c.key === key);\r\n return col?.value ?? null;\r\n }\r\n\r\n private areSameValue(a: string|number|null, b: string|number|null): boolean {\r\n return `${a ?? ''}` === `${b ?? ''}`;\r\n }\r\n}\r\n","@if ( hasActions || searchEnabled){\r\n <div class=\"ui-table-filters\">\r\n @if (searchEnabled) {\r\n <uic-table-searcher \r\n [showSearchButton]=\"showSearchButton\" \r\n [showButtonText]=\"searcherShowButtonText\" \r\n [searchOnKeydown]=\"searchOnKeydown\"\r\n (filter)=\"search($event)\" \r\n [placeholder]=\"searchPlaceholder\" >\r\n </uic-table-searcher>\r\n }\r\n <div class=\"ui-filter-actions\">\r\n <ng-content select=\"[actions]\"></ng-content>\r\n </div>\r\n </div>\r\n}\r\n<ng-content select=\"[filters]\"></ng-content>\r\n<div class=\"ui-table-wrapper\">\r\n @if (headerText) {\r\n <div class=\"ui-table-topbar\"> \r\n <div>\r\n {{headerText}} <span class=\"hightlited-note\"> ({{totalItems}}) </span> \r\n </div>\r\n <p> {{headerSubtitle}} </p>\r\n </div>\r\n }\r\n <div class=\"ui-table-container\"> \r\n <table class=\"ui-table\" [class.ui-striped]=\"striped\">\r\n <thead>\r\n <tr [class]=\" headerClass || 'header-'+headerBackgroundColor\">\r\n @for (header of columns; track $index) {\r\n <th [class.noshow-small]=\"header.hideOn == 'small'\"\r\n [class.noshow-medium]=\"header.hideOn == 'medium'\">\r\n <div [class]=\"'ui-th-wrap ui-alignment-'+alignment\" >\r\n @if (header.type=='checkbox') {\r\n <div>\r\n <ui-checkbox style=\"margin-right: 5px;\" [(ngModel)]=\"allSelected\" (ngModelChange)=\"toggleAll($event)\"></ui-checkbox>\r\n </div>\r\n }\r\n {{header.label.toUpperCase() }} \r\n @if (header.sortEnable) {\r\n <div class=\"ui-sort-arrow\" (click)=\"sortClick(header.key)\" [ngClass]=\"{'ui-sort-active':header.key == sortKey}\">\r\n <i [class]=\"(sortAsc||header.key != sortKey)?'ri-arrow-down-line':'ri-arrow-up-line'\"></i> \r\n </div>\r\n }\r\n </div>\r\n </th> \r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n\r\n @if (loading) {\r\n @for (item of [].constructor(squeletonRows); track $index) {\r\n <tr>\r\n @for (header of columns; track $index) {\r\n <td> <div class=\"ui-row-loader\"></div> </td>\r\n }\r\n </tr> \r\n }\r\n } @else {\r\n @for (row of data; track row.id) {\r\n <tr [@highlightRow]=\"highlightedId === row.id ? 'highlighted' : null\" \r\n [class.ui-tr-highlighted]=\"row.highlighted\"\r\n [class.clickable-row]=\"rowClickable\"\r\n (click)=\"clickRow(row.id)\"\r\n >\r\n @for (header of columns; track $index) {\r\n <!-- TIPOS DE HEADERS -->\r\n <td [class]=\"getFontColor(row.data,header.key)\"\r\n [class.noshow-small]=\"header.hideOn == 'small'\"\r\n [class.noshow-medium]=\"header.hideOn == 'medium'\">\r\n\r\n <div [class]=\"'ui-cell-content ui-alignment-'+alignment\" \r\n [style.justify-content]=\"header.align||null\"\r\n [style.width.px]=\"header.width || null\">\r\n @if (header.type == 'actions') { \r\n <div class=\"ui-centered-cell-content\">\r\n @for (btn of header.actions; track $index) {\r\n @if (isValidRule(row.data,btn.rule)) {\r\n <ui-button \r\n [disabled]=\"loading\"\r\n [uiTooltip]=\"btn.tooltip??''\"\n size=\"s\"\r\n [disabled]=\"disabled\"\r\n [text]=\"btn.text??''\"\r\n [type]=\"btn.type??'filled'\"\r\n [iconOnly]=\"!btn.text\"\r\n [icon]=\"btn.icon??''\"\r\n [color]=\"btn.color??'black'\"\r\n (click)=\"doAction(row.id,btn.key,$event)\">\r\n </ui-button> \r\n }\r\n } \r\n @if ( header.moreActions && header.moreActions.length>0 ) {\r\n @for (ma of header.moreActions; track $index) {\r\n <ui-action-button [icon]=\"ma.icon??'ri-more-2-line'\" (optionSelected)=\"doAction(row.id,$event.id)\" [options]=\"getMoreActions(ma.actions||[],row.data)\"></ui-action-button>\r\n }\r\n }\r\n </div> \r\n }\r\n @else if (header.type == 'checkbox'){\r\n <ui-checkbox [disabled]=\"disabled\" [ngModel]=\"checkedIds.has(row.id)\" [placeholder]=\"getValue(row.data,header.key)\" (ngModelChange)=\"toggleSelection(row.id,$event)\" ></ui-checkbox> \r\n }\r\n @else if (isCellEditable(header)) {\r\n @if ((header.editionType ?? 'input') === 'select') {\r\n <div class=\"ui-editable-cell\" (click)=\"$event.stopPropagation()\">\r\n <ui-select\r\n [disabled]=\"disabled\"\r\n [options]=\"header.editionTypeOptions || []\"\r\n [ngModel]=\"getEditableCellValue(row.id, header.key)\"\r\n (ngModelChange)=\"onEditableSelectChange(row.id, row.data, header.key, $event)\">\r\n </ui-select>\r\n </div>\r\n } @else {\r\n <div class=\"ui-editable-cell\" (click)=\"$event.stopPropagation()\">\r\n <ui-input [disabled]=\"disabled\">\r\n <input\r\n [disabled]=\"disabled\"\r\n [ngModel]=\"getEditableCellValue(row.id, header.key)\"\r\n (ngModelChange)=\"onEditableInputChange(row.id, header.key, $event)\"\r\n (blur)=\"onEditableInputBlur(row.id, row.data, header.key)\" />\r\n </ui-input>\r\n </div>\r\n }\r\n }\r\n @else {\r\n <ui-item-value\r\n [disabled]=\"disabled\"\r\n [key]=\"header.key\"\r\n [type]=\"header.type??'text'\"\r\n [row]=\"row\"\r\n [alignment]=\"alignment\"\r\n [switchValidation]=\"switchValidation\"\r\n (switchConfirmed)=\"switchHandler(row.id, $event, header.label)\"\r\n ></ui-item-value>\r\n }\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n @if (fullViewRows.includes(row.id)) {\r\n <tr style=\"border-top: none ;\">\r\n <td [colSpan]=\"columns.length\">\r\n <div class=\"full-space-row\">\r\n <ui-short-table [columns]=\"columns\" [cols]=\"mobilePortletCols\" [data]=\"row\"></ui-short-table>\r\n </div>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n @empty {\r\n @if (showEmptyMessage) {\r\n <tr> \r\n <td [colSpan]=\"columns.length\">\r\n <div class=\"ui-empty\">{{emptyMessage | uicTranslate}} </div>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n \r\n @if (showPagination) {\r\n <uic-table-pagination \r\n [loading]=\"loading\" \r\n [totalPages]=\"pages\" \r\n [showText]=\"showTextPagination\"\r\n [size]=\"size\"\r\n [nextButtonText]=\"nextButtonText\"\r\n [previousButtonText]=\"previousButtonText\"\r\n [buttonSize]=\"buttonSize\"\r\n (sizeChange)=\"sizeChabge($event)\"\r\n (pageChange)=\"pageChage($event)\">\r\n </uic-table-pagination>\r\n }\r\n</div>\r\n","import { ButtonColor, ButtonType } from \"../button/button.component\";\r\nimport { AppSelectOption } from \"../inputs/select/select.component\";\r\nimport { UicPortletData } from \"../uic-portlet-card/uic-portlet-card.component\";\r\n\r\nexport interface TableColums{\r\n key: string;\r\n label: string;\r\n width?:number;\r\n align?: 'flex-start'| 'flex-end'| 'center';\r\n type?: ColumnTypes;\r\n sortEnable?: boolean;\r\n editable?:boolean;\r\n editionType?: 'input'|'select';\r\n editionTypeOptions?:AppSelectOption[];\r\n actions?: TableButton[];\r\n hideOn?: 'small' | 'medium';\r\n moreActions?: {icon?:string;actions:TableButton[]}[];\r\n}\r\nexport interface TableButton{\r\n key: string;\r\n color?: ButtonColor;\r\n icon?: string;\r\n text?: string;\r\n type?:ButtonType;\r\n tooltip?: string;\r\n rule?: string[];\r\n}\r\nexport interface TableRow{\r\n id: number|string;\r\n data:TableRowData[];\r\n highlighted?:boolean;\r\n}\r\n\r\nexport interface TableRowData extends UicPortletData{\r\n key: string;\r\n}\r\n\r\nexport interface TableList{text:string; subtext?:string,icon?:string; color?:string};\r\nexport interface TableUser{name:string;id:string;photo?:string,icon?:string,hideAvatar?:boolean};\r\nexport interface TableAction{\r\n rowId: number|string;\r\n key: string;\r\n}\r\nexport interface TableCellChange{\r\n rowId: number|string;\r\n columnKey: string;\r\n value: string|number|null;\r\n previousValue: string|number|null;\r\n}\r\nexport type ColumnTypes = \r\n'actions' \r\n| 'text' \r\n| 'bold'\r\n| 'list' \r\n| 'money'\r\n| 'copy'\r\n| 'user' \r\n| 'checkbox' \r\n| 'icon-list' \r\n| 'status' \r\n| 'switch' \r\n| 'bigtext' \r\n| 'date' \r\n| 'tag';\r\n\r\nexport type TableTextColors = 'primary' | 'red' | 'green' | 'blue' | 'yellow' | 'black' | 'grey' ;\r\nexport type BackgroundColors = 'primary' | 'secondary' | 'red' | 'green' | 'blue' | 'yellow' | 'black' | 'grey' | 'transparent' | 'white' ;\r\nexport interface TableFilters {\r\n sortBy:string;\r\n isSortAscending:boolean;\r\n pageNumber:number;\r\n pageSize:number;\r\n filter: string;\r\n }\r\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'ui-skeleton-cards',\n imports: [ CommonModule ],\n templateUrl: './skeleton-cards.component.html',\n styleUrl: './skeleton-cards.component.scss'\n})\nexport class UicSkeletonCardsComponent {\n @Input() cards: number = 6;\n @Input() gap: number = 16;\n @Input() minCardWidthPx: number = 220;\n\n get gridStyle() {\n const cardsGap = this.gap > 0 ? this.gap : 0;\n const minWidth = this.minCardWidthPx > 0 ? this.minCardWidthPx : 120;\n return {\n 'grid-template-columns': `repeat(auto-fit, minmax(${minWidth}px, 1fr))`,\n gap: `${cardsGap}px`\n };\n }\n\n get cardsCount(): number {\n return this.cards > 0 ? this.cards : 0;\n }\n}\n","<div class=\"skeleton-cards-grid\" [ngStyle]=\"gridStyle\">\n @for (card of [].constructor(cardsCount); track $index) {\n <div class=\"skeleton-card skeleton-gradient\"></div>\n }\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { Alert } from '../alert.model';\r\n\r\n\r\n@Component({\r\n selector: 'ui-alert',\r\n imports: [],\r\n templateUrl: './alert.component.html',\r\n styleUrl: './alert.component.scss'\r\n})\r\nexport class UiAlertComponent implements OnInit{\r\n @Input() alert!: Alert;\r\n @Output() closeAlert = new EventEmitter<number>();\r\n \r\n interval: any;\r\n progressValue = 0;\r\n animationIntevalMs = 100;\r\n pauseAnimation = false;\r\n id = 0;\r\n\r\n\r\n ngOnInit(){\r\n this.id = this.alert.id;\r\n if(this.alert.duration && this.alert.duration > 0){\r\n const duration = this.alert.duration;\r\n let count = 0;\r\n this.interval = setInterval(() => {\r\n count = this.pauseAnimation? count : count + this.animationIntevalMs;\r\n this.progressValue = Math.floor((count / duration)*100);\r\n if (this.progressValue > 100){\r\n this.close();\r\n }\r\n }, this.animationIntevalMs);\r\n\r\n }\r\n }\r\n\r\n close(){\r\n clearInterval( this.interval );\r\n this.closeAlert.emit(this.id);\r\n }\r\n\r\n \r\n}\r\n","<div [class]=\"'alert ' + alert.type + ' ' + (alert.style??'filled')\" >\r\n @if (alert.showProgressBar) {\r\n <div class=\"alert-process\">\r\n <div class=\"alert-process-bar\" [style.width.%]=\"progressValue\"></div>\r\n </div>\r\n }\r\n <div class=\"alert-body\">\r\n <button class=\"close\" (click)=\"close()\"> ✕ </button>\r\n @if (alert.icon) {\r\n <i [class]=\"'highlighted ' + alert.icon\"></i>\r\n }\r\n <div>\r\n <div class=\"toast-title highlighted\">{{alert.title}}</div>\r\n <div class=\"toast-body\">{{alert.message}}</div>\r\n @if ( alert.okButtonText || alert.cancelButtonText){\r\n <div class=\"toast-buttons \">\r\n @if ( alert.okButtonText ) {\r\n <button style=\"font-weight: 500;\">{{alert.okButtonText}}</button>\r\n }\r\n @if ( alert.cancelButtonText ){\r\n <button (click)=\"close()\">{{alert.cancelButtonText}}</button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { Alert } from '../alert.model';\r\nimport { UicPushAlertService } from '../../../services/push-alert.service';\r\nimport { UiAlertComponent } from '../alert/alert.component';\r\n\r\n@Component({\r\n selector: 'ui-alert-container',\r\n imports: [UiAlertComponent],\r\n templateUrl: './alert-container.component.html',\r\n styleUrl: './alert-container.component.scss'\r\n})\r\nexport class UicAlertContainerComponent implements OnInit {\r\n alerts: Alert[] = [];\r\n\r\n constructor(private readonly alertService: UicPushAlertService) {}\r\n\r\n ngOnInit() {\r\n this.alertService.stream.subscribe( alert => {\r\n this.alerts.push(alert);\r\n });\r\n }\r\n\r\n dismis(id:number){\r\n const idx = this.alerts.findIndex(f=>f.id == id);\r\n this.alerts.splice(idx,1);\r\n }\r\n\r\n}\r\n","<div class=\"alert-container\">\r\n @for (alert of alerts; track alert.id){\r\n <ui-alert\r\n (closeAlert)=\"dismis($event)\"\r\n [alert]=\"alert\">\r\n </ui-alert>\r\n } \r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { createValueAccessor } from '../dynamic-form/base-value-accessot';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\n\r\nconst base = createValueAccessor<Blob | null>();\r\n\r\n@Component({\r\n selector: 'ui-signature-pad',\r\n imports: [CommonModule, UicButtonComponent, UicTranslatePipe],\r\n templateUrl: './signature-pad.component.html',\r\n styleUrls: ['./signature-pad.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicSignaturePadComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class UicSignaturePadComponent extends base implements AfterViewInit {\r\n @Input() width = 400;\r\n @Input() height = 200;\r\n @Input() strokeColor = '#111827';\r\n @Input() strokeWidth = 2;\r\n @Input() disabled = false;\r\n @Output() imageChange = new EventEmitter<Blob | null>();\r\n\r\n @ViewChild('canvas', { static: true }) canvasRef!: ElementRef<HTMLCanvasElement>;\r\n\r\n private ctx: CanvasRenderingContext2D | null = null;\r\n private drawing = false;\r\n\r\n ngAfterViewInit(): void {\r\n const canvas = this.canvasRef.nativeElement;\r\n canvas.width = this.width;\r\n canvas.height = this.height;\r\n this.ctx = canvas.getContext('2d');\r\n if (this.ctx) {\r\n this.ctx.lineWidth = this.strokeWidth;\r\n this.ctx.lineCap = 'round';\r\n this.ctx.lineJoin = 'round';\r\n this.ctx.strokeStyle = this.strokeColor;\r\n }\r\n }\r\n\r\n startDraw(event: PointerEvent) {\r\n if (!this.ctx || this.disabled) return;\r\n this.drawing = true;\r\n const { x, y } = this.relativePosition(event);\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(x, y);\r\n this.canvasRef.nativeElement.setPointerCapture(event.pointerId);\r\n event.preventDefault();\r\n }\r\n\r\n draw(event: PointerEvent) {\r\n if (!this.drawing || !this.ctx || this.disabled) return;\r\n const { x, y } = this.relativePosition(event);\r\n this.ctx.lineTo(x, y);\r\n this.ctx.stroke();\r\n event.preventDefault();\r\n }\r\n\r\n endDraw(event: PointerEvent) {\r\n if (!this.drawing || !this.ctx || this.disabled) return;\r\n this.ctx.closePath();\r\n this.drawing = false;\r\n this.canvasRef.nativeElement.releasePointerCapture(event.pointerId);\r\n this.emitSignature();\r\n event.preventDefault();\r\n }\r\n\r\n clear() {\r\n if (!this.ctx) return;\r\n this.resetCanvas();\r\n this.notifyChange(null as any);\r\n this.imageChange.emit(null);\r\n }\r\n\r\n private emitSignature() {\r\n if (this.disabled) return;\r\n const canvas = this.canvasRef.nativeElement;\r\n canvas.toBlob((blob) => {\r\n if (!blob) return;\r\n this.notifyChange(blob as any);\r\n this.imageChange.emit(blob);\r\n }, 'image/png');\r\n }\r\n\r\n private relativePosition(event: PointerEvent) {\r\n const rect = this.canvasRef.nativeElement.getBoundingClientRect();\r\n return {\r\n x: event.clientX - rect.left,\r\n y: event.clientY - rect.top,\r\n };\r\n }\r\n\r\n override writeValue(value: Blob | null): void {\r\n super.writeValue(value as any);\r\n if (!this.ctx) return;\r\n if (!value) {\r\n this.resetCanvas();\r\n return;\r\n }\r\n const url = URL.createObjectURL(value);\r\n const img = new Image();\r\n img.onload = () => {\r\n this.resetCanvas();\r\n this.ctx!.drawImage(img, 0, 0, this.width, this.height);\r\n URL.revokeObjectURL(url);\r\n };\r\n img.src = url;\r\n }\r\n\r\n private resetCanvas() {\r\n if (this.ctx) {\r\n this.ctx.clearRect(0, 0, this.width, this.height);\r\n }\r\n }\r\n}\r\n","<div class=\"signature-pad\" [style.width.px]=\"width\">\r\n <canvas\r\n #canvas\r\n class=\"signature-canvas\"\r\n [attr.width]=\"width\"\r\n [attr.height]=\"height\"\r\n (pointerdown)=\"startDraw($event)\"\r\n (pointermove)=\"draw($event)\"\r\n (pointerup)=\"endDraw($event)\"\r\n (pointerleave)=\"endDraw($event)\"\r\n ></canvas>\r\n <div class=\"signature-actions\">\r\n <ui-button size=\"s\" type=\"ghost\" icon=\"ri-delete-bin-line\" (click)=\"clear()\">{{'common.clear' | uicTranslate}}</ui-button>\r\n </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { ButtonColor } from '../button/button.component';\r\n\r\n@Component({\r\n selector: 'ui-kpi-card',\r\n imports: [],\r\n templateUrl: './kpi-card.component.html',\r\n styleUrl: './kpi-card.component.scss'\r\n})\r\nexport class UicKpiCardComponent {\r\n @Input() data!:UicKpiContet;\r\n @Input() loading = false;\r\n\r\n}\r\n\r\nexport interface UicKpiContet{\r\n label: string;\r\n value: string;\r\n icon?: string;\r\n iconColor?: ButtonColor;\r\n textColor?: ButtonColor;\r\n}","@if (data) {\r\n <div class=\"kpi-card\">\r\n <div >\r\n <div class=\"kpi-card-label\">{{data.label}}</div>\r\n @if (loading) {\r\n <div class=\"kpi-card-value-loading\"></div>\r\n }@else {\r\n\r\n <div [class]=\"'kpi-card-value ui-trc-' + data.textColor\">{{data.value}}</div>\r\n }\r\n </div>\r\n <i [class]=\"data.icon + ' ui-trc-' + data.iconColor\"></i>\r\n </div>\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { UicToolTipDirective } from '../../directives/tool-tip.directive';\r\n\r\n@Component({\r\n selector: 'ui-tabs-button',\r\n imports: [UicToolTipDirective],\r\n templateUrl: './tabs-button.component.html',\r\n styleUrl: './tabs-button.component.scss'\r\n})\r\nexport class UicTabsButtonComponent {\r\n\r\n @Input() tabs:UiBtnTab[] = [];\r\n @Input() activeTab = '';\r\n @Output() activeTabChange = new EventEmitter<string>();\r\n\r\n selectTab(tab:string){\r\n this.activeTab = tab;\r\n this.activeTabChange.emit(this.activeTab);\r\n }\r\n}\r\nexport interface UiBtnTab{key:string; text:string; icon?:string, subtitle?:string, warning?:string} ","<div class=\"tabs\">\r\n @for (tab of tabs; track $index) {\r\n <div (click)=\"selectTab(tab.key)\" [class.active-tab]=\"tab.key == activeTab\" class=\"tab\"> \r\n @if (tab.icon) {\r\n <i [class]=\"tab.icon\"></i> \r\n }\r\n <div class=\"tab-text\">\r\n {{tab.text}}\r\n @if(tab.warning){\r\n <span [uiTooltip]=\"tab.warning\" class=\"warning-tab\">!</span>\n }\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentRef,\r\n EventEmitter,\r\n HostBinding,\r\n inject,\r\n Input,\r\n Output,\r\n Type,\r\n ViewChild,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { UicToolTipDirective } from '../../directives/tool-tip.directive';\r\nimport { UicTinyAlertService } from '../../services/tiny-alert.service';\r\nimport { AlertData } from '../tiny-alert/tiny-alert.model';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\nimport { ActionMenuOption, UicActionButtonComponent } from '../uic-action-button/uic-action-button.component';\r\n\r\nexport interface WorkPanelTabConfig {\r\n id?: string;\r\n title?: string;\r\n label: string;\r\n icon?:string;\r\n componentType: Type<any>;\r\n componentInputs?: Record<string, any>;\r\n}\r\n\r\n@Component({\r\n selector: 'ui-work-panel',\r\n imports: [UicButtonComponent, UicToolTipDirective, UicTranslatePipe, UicActionButtonComponent],\r\n templateUrl: './work-panel.component.html',\r\n styleUrl: './work-panel.component.scss'\r\n})\r\nexport class UicWorkPanelComponent implements AfterViewInit {\r\n @ViewChild('host', { read: ViewContainerRef, static: true })\r\n host!: ViewContainerRef;\r\n\r\n private readonly tinyAlert = inject(UicTinyAlertService);\r\n\r\n @Input() moreActions: ActionMenuOption[] = [];\r\n @Output() actionSelected = new EventEmitter<ActionMenuOption&{panelId:string}>();\r\n @Input() componentType?: Type<any>;\r\n @Input() componentInputs: Record<string, any> = {};\r\n @Input() tabs: WorkPanelTabConfig[] = [];\r\n @Input() closeWarning!:AlertData;\r\n @Input() width= '50%';\r\n @Input() duplicateValidationMessage = \"\";\r\n\r\n\r\n @Output() tabsChange = new EventEmitter<WorkPanelTabConfig[]>();\r\n @Output() tabClosed = new EventEmitter<string>();\r\n @Output() tabSelected = new EventEmitter<string>();\r\n @Output() tabAdded = new EventEmitter<string>();\r\n @Output() fullViewChange = new EventEmitter<boolean>();\r\n\r\n @Input() minPosition = 1;\r\n @Input() showAddButton = true;\r\n fullView = false;\r\n isMinimized = false;\r\n\r\n activeTabId?: string;\r\n activeTabTitle?: string;\r\n tabInstances: Array<WorkPanelTabConfig & { id: string; componentRef: ComponentRef<any> }> = [];\r\n private idCounter = 0;\r\n private initialized = false;\r\n\r\n constructor(private readonly cdr: ChangeDetectorRef) {}\r\n\r\n @HostBinding('style.--panel-width')\r\n get panelWidth() {\r\n return `${this.width}`;\r\n }\r\n ngAfterViewInit(): void {\r\n this.initialized = true;\r\n this.initializeTabs();\r\n this.renderActiveTab();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n private initializeTabs() {\r\n if (this.tabs?.length) {\r\n this.tabs.forEach(tab => this.createTab(tab, false));\r\n } else if (this.componentType) {\r\n this.createTab(\r\n {\r\n label: this.componentInputs['title'] ?? 'Panel',\r\n componentType: this.componentType,\r\n componentInputs: this.componentInputs\r\n },\r\n false\r\n );\r\n }\r\n }\r\n\r\n changeSizeBtn(b:boolean){\r\n this.fullView = b;\r\n this.fullViewChange.emit( this.isFullViewActivated() )\r\n }\r\n\r\n addTab(tabConfig: WorkPanelTabConfig): string {\r\n const idx = this.tabInstances.findIndex(f => f.label == tabConfig.label);\r\n if ( idx != -1){\r\n if ( this.duplicateValidationMessage ){\r\n this.tinyAlert.info(this.duplicateValidationMessage);\r\n }\r\n this.openTab(this.tabInstances[idx].id);\r\n return \"\";\r\n }\r\n\r\n \r\n if (!this.initialized || !this.host) {\r\n const id = tabConfig.id ?? `tab-${++this.idCounter}`;\r\n this.tabs.push({ ...tabConfig, id });\r\n this.activeTabId = id;\r\n this.activeTabTitle = tabConfig.title;\r\n this.isMinimized = false;\r\n return id;\r\n }\r\n\r\n const instance = this.createTab(tabConfig, true);\r\n this.activeTabId = instance.id;\r\n this.activeTabTitle = instance.title;\r\n this.isMinimized = false;\r\n this.renderActiveTab();\r\n this.tabAdded.emit(instance.id);\r\n this.tabSelected.emit(instance.id);\r\n return instance.id;\r\n }\r\n\r\n openTab(id:string){\r\n this.isMinimized = false;\r\n this.activeTabId = id;\r\n this.activeTabTitle = this.tabInstances.find(f=>f.id === id)?.title;\r\n this.renderActiveTab();\r\n this.tabSelected.emit(id);\r\n }\r\n\r\n selectTab(id: string) {\r\n if (this.activeTabId === id) {\r\n this.minimizePanel();\r\n return;\r\n }\r\n this.openTab(id);\r\n }\r\n\r\n closeActiveTab(omitWarning:boolean=false) {\r\n if (this.activeTabId) {\r\n this.closeTab(this.activeTabId,omitWarning);\r\n }\r\n return this.activeTabId; \r\n }\r\n\r\n closeTab(id: string,omitWarning:boolean=false) {\r\n if ( this.closeWarning && !omitWarning){\r\n this.tinyAlert.showAlert(this.closeWarning).then(r=>{\r\n if (r.value) this.destroyPanel(id);\r\n });\r\n }else{\r\n this.destroyPanel(id);\r\n }\r\n }\r\n\r\n private destroyPanel(id:string){\r\n const index = this.tabInstances.findIndex(tab => tab.id === id);\r\n if (index === -1) {\r\n return;\r\n }\r\n const [tab] = this.tabInstances.splice(index, 1);\r\n\r\n const viewIndex = this.host.indexOf(tab.componentRef.hostView);\r\n if (viewIndex > -1) {\r\n this.host.detach(viewIndex);\r\n }\r\n tab.componentRef.destroy();\r\n\r\n if (this.activeTabId === id) {\r\n const next = this.tabInstances[index] ?? this.tabInstances[index - 1];\r\n this.activeTabId = next?.id;\r\n this.activeTabTitle = next?.title;\r\n }\r\n if (!this.activeTabId) {\r\n this.isMinimized = true;\r\n }\r\n this.renderActiveTab();\r\n this.emitTabsChange();\r\n this.tabClosed.emit(id);\r\n this.fullViewChange.emit(this.isFullViewActivated());\r\n }\r\n\r\n minimizePanel() {\r\n this.isMinimized = true;\r\n this.activeTabId = '';\r\n this.activeTabTitle = '';\r\n this.fullViewChange.emit(this.isFullViewActivated()); \r\n }\r\n\r\n emitAction(option: ActionMenuOption){\r\n this.actionSelected.emit({...option, panelId:this.activeTabId ?? \"\"});\r\n \r\n }\r\n private createTab(tabConfig: WorkPanelTabConfig, emitChange = true) {\r\n if (!this.host) {\r\n throw new Error('WorkPanel host ViewContainerRef not ready');\r\n }\r\n const id = tabConfig.id ?? `tab-${++this.idCounter}`;\r\n const componentRef = this.host.createComponent(tabConfig.componentType);\r\n Object.assign(componentRef.instance, tabConfig.componentInputs ?? {});\r\n\r\n const viewIndex = this.host.indexOf(componentRef.hostView);\r\n if (viewIndex > -1) {\r\n this.host.detach(viewIndex);\r\n }\r\n\r\n const instance = { ...tabConfig, id, componentRef };\r\n this.tabInstances.push(instance);\r\n\r\n if (!this.activeTabId) {\r\n this.activeTabId = id;\r\n this.activeTabTitle = tabConfig.title;\r\n }\r\n if (emitChange) {\r\n this.emitTabsChange();\r\n }\r\n return instance;\r\n }\r\n\r\n private renderActiveTab() {\r\n while (this.host.length) {\r\n this.host.detach(0);\r\n }\r\n const active = this.tabInstances.find(tab => tab.id === this.activeTabId);\r\n if (active) {\r\n this.host.insert(active.componentRef.hostView);\r\n this.fullViewChange.emit(this.isFullViewActivated())\r\n }\r\n }\r\n\r\n private emitTabsChange() {\r\n const snapshot = this.tabInstances.map(({ componentRef, ...tab }) => ({ ...tab }));\r\n this.tabsChange.emit(snapshot);\r\n }\r\n\r\n private isFullViewActivated(){\r\n return !(this.isMinimized || !this.activeTabId) && this.fullView;\r\n }\r\n}\r\n","<div\r\n [class.dynamic-width]=\"!fullView\"\r\n [class]=\"fullView ? 'open-panel' : 'mid-panel'\"\r\n [class.panel-hidden]=\"isMinimized || !activeTabId\"\r\n>\r\n <div class=\"panel-header\">\r\n @if (activeTabTitle) {\r\n <div class=\"wp-title\">{{activeTabTitle}}</div>\r\n }\r\n @if (moreActions.length > 0) { \r\n <ui-action-button [options]=\"moreActions\" (optionSelected)=\"emitAction($event)\"></ui-action-button>\r\n }\r\n <ui-button class=\"nomob\" (click)=\"minimizePanel()\" size=\"s\" [uiTooltip]=\"'work_panel.minimize' | uicTranslate\" [iconOnly]=\"true\" color=\"black\" type=\"bordered\" rightIcon=\"ri-subtract-fill\"></ui-button>\n @if (fullView) {\r\n <ui-button class=\"nomob\" (click)=\"changeSizeBtn(false)\" size=\"s\" [uiTooltip]=\"'work_panel.reduce' | uicTranslate\" [iconOnly]=\"true\" color=\"black\" type=\"bordered\" rightIcon=\"ri-collapse-diagonal-fill\"></ui-button>\n } @else {\r\n <ui-button class=\"nomob\" (click)=\"changeSizeBtn(true)\" size=\"s\" [uiTooltip]=\"'work_panel.expand' | uicTranslate\" [iconOnly]=\"true\" color=\"black\" type=\"bordered\" rightIcon=\"ri-expand-diagonal-fill\"></ui-button>\n }\r\n <ui-button (click)=\"closeActiveTab()\" size=\"s\" [uiTooltip]=\"'work_panel.close' | uicTranslate\" [iconOnly]=\"true\" color=\"black\" type=\"bordered\" rightIcon=\"ri-close-line\"></ui-button>\n </div>\r\n <div class=\"panel-overflow\">\r\n <!-- contenido dinamico -->\r\n <ng-container #host></ng-container>\r\n </div>\r\n</div>\r\n@if (tabInstances.length > 0) {\r\n <div class=\"panel-nav-bar\">\r\n <div class=\"panel-tabs\">\r\n @for (tab of tabInstances; track tab.id) {\r\n <div class=\"minimized-panel\" [class.active]=\"tab.id === activeTabId\">\r\n <button class=\"min-btn\" type=\"button\" (click)=\"selectTab(tab.id)\">\r\n <i [class]=\"tab.icon?tab.icon : 'ri-dossier-line'\"></i>\r\n <div class=\"min-text\">{{ tab.label }}</div>\r\n </button>\r\n <i (click)=\"closeTab(tab.id)\" class=\"close-btn ri-close-line\"></i>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n","import { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { Component, ElementRef, inject, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ui-overlay-card',\r\n imports: [],\r\n templateUrl: './overlay-card.component.html',\r\n styleUrl: './overlay-card.component.scss'\r\n})\r\nexport class UicOverlayCardComponent {\r\n\r\n @ViewChild('menuTemplate') menuTemplate!: TemplateRef<any>;\r\n private overlayRef!: OverlayRef;\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n selectedSet = new Set<string | number>();\r\n allSelected = false;\r\n\r\n overlayPositions: ConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' },\r\n ];\r\n\r\n openMenu() {\r\n if (this.overlayRef) {\r\n this.close();\r\n return;\r\n }\r\n\r\n const origin = this.host.nativeElement.querySelector('.button-container');\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy =\r\n this.overlay.position()\r\n .flexibleConnectedTo(origin as HTMLElement)\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(false)\r\n .withPush(true);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n });\r\n\r\n const portal = new TemplatePortal(this.menuTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.close());\r\n }\r\n\r\n\r\n\r\n close() {\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n this.overlayRef = null!;\r\n }\r\n }\r\n}\r\n","<!-- Botón -->\r\n <div (click)=\"openMenu()\" class=\"button-container\">\r\n <ng-content select=\"[button]\"></ng-content>\r\n </div>\r\n\r\n<!-- Menú -->\r\n<ng-template #menuTemplate>\r\n <div class=\"action-menu\">\r\n <ng-content select=\"[content]\"></ng-content>\r\n </div>\r\n</ng-template>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { UiBtnTab } from '../tabs-button/tabs-button.component';\n\n\n@Component({\n selector: 'ui-accordion',\n imports: [],\n templateUrl: './accordion.component.html',\n styleUrl: './accordion.component.scss',\n animations: [\n trigger('accordionBody', [\n transition(':enter', [\n style({\n height: 0,\n opacity: 0,\n paddingTop: 0,\n paddingBottom: 0\n }),\n animate('200ms ease', style({ height: '*', opacity: 1, paddingTop: '*', paddingBottom: '*' }))\n ]),\n transition(':leave', [\n style({ height: '*', opacity: 1, paddingTop: '*', paddingBottom: '*' }),\n animate('200ms ease', style({ height: 0, opacity: 0, paddingTop: 0, paddingBottom: 0 }))\n ])\n ])\n ]\n})\n\nexport class UicAccordionComponent {\n @Input() tabs:UiBtnTab[] = [];\n @Input() activeTab = '';\n @Output() activeTabChange = new EventEmitter<string>();\n\n changeTab(key:string) {\n this.activeTab = this.activeTab === key ? '' : key;\n this.activeTabChange.emit(this.activeTab);\n }\n}\n","<div class=\"accordion-reel\">\r\n @for (item of tabs; track $index) {\r\n <div class=\"accordion-item\">\r\n <div class=\"accordion-header\" (click)=\"changeTab(item.key)\">\r\n <div class=\"accordion-header-title\"> \r\n @if (item.icon) {\r\n <i [class]=\"item.icon\"></i> \r\n }\r\n {{item.text}} \r\n </div>\r\n @if (item.subtitle) {\r\n <div class=\"accordion-header-subtitle\">{{item.subtitle}}</div>\r\n }\r\n </div>\r\n @if (activeTab == item.key) {\r\n <div class=\"accordion-body\" [@accordionBody]>\r\n <ng-content></ng-content>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { AfterViewChecked, Component, ElementRef, EventEmitter, inject, Input, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { UicSkeletonLoaderComponent } from '../skeleton-loader/skeleton-loader.component';\r\nimport { UicSwichComponent } from '../inputs/toggle-button/toggle-button.component';\r\nimport { UicPushAlertService } from '../../services/push-alert.service';\r\nimport { UicInputComponent } from '../inputs/input/input.component';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\nimport { UicTranslateService } from '../../services/translate.service';\r\n\r\n@Component({\r\n selector: 'ui-tree-admin',\r\n imports: [\r\n UicInputComponent,\r\n UicButtonComponent,\r\n UicSkeletonLoaderComponent,\r\n UicSwichComponent,\r\n UicTranslatePipe\r\n ],\r\n templateUrl: './tree-admin.component.html',\r\n styleUrl: './tree-admin.component.scss'\r\n})\r\nexport class UicTreeAdminComponent implements AfterViewChecked {\r\n\r\n @Input() searchEnabled = true;\r\n @Input() loading = false;\r\n @Input() emptyMessage = 'tree.empty';\r\n @Input() duplicateNameMessage = 'tree.duplicate_name';\r\n @Output() edit = new EventEmitter<TreeActionEvent>();\r\n @Output() remove = new EventEmitter<TreeActionEvent>();\r\n @Output() deactivate = new EventEmitter<TreeToggleEvent>();\r\n @Output() nameChange = new EventEmitter<TreeNameChangeEvent>();\r\n @Output() create = new EventEmitter<TreeCreateRequestEvent>();\r\n\r\n @Input() tree:TreeData[] = [\r\n {\r\n id:0,\r\n name:'Sin hijos',\r\n enabled:true\r\n },\r\n {\r\n id:1,\r\n name:'Equipo A',\r\n enabled: true,\r\n children:[\r\n {\r\n id:10,\r\n enabled: true,\r\n name:'Miembro 1'\r\n },\r\n {\r\n id:11,\r\n enabled: true,\r\n name:'Miembro 3',\r\n tag:'Admin',\r\n tagColor:'red'\r\n },\r\n {\r\n id:12,\r\n enabled: true,\r\n name:'Miembro 5'\r\n },\r\n {\r\n id:13,\r\n enabled: true,\r\n name:'Miembro 10'\r\n },\r\n {\r\n id:14,\r\n enabled: true,\r\n name:'Miembro 9'\r\n }\r\n ]\r\n },\r\n {\r\n id:2,\r\n name:'Team B',\r\n enabled: true,\r\n children:[\r\n {\r\n id:20,\r\n enabled: true,\r\n name:'Person 1'\r\n },\r\n {\r\n id:21,\r\n enabled: true,\r\n name:'Person 3'\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n @ViewChildren('childNameInput') childNameInputs!: QueryList<ElementRef<HTMLInputElement>>;\r\n @ViewChildren('parentNameInput') parentNameInputs!: QueryList<ElementRef<HTMLInputElement>>;\r\n\r\n private readonly pushAler = inject(UicPushAlertService);\r\n private readonly i18n = inject(UicTranslateService);\r\n\r\n private collapsedIds = new Set<TreeData['id']>();\r\n private editingParentId: TreeData['id'] | null = null;\r\n private editingChildId: TreeData['id'] | null = null;\r\n private pendingFocusParentId: TreeData['id'] | null = null;\r\n private pendingFocusChildId: TreeData['id'] | null = null;\r\n private pendingCreateIds = new Set<TreeData['id']>();\r\n private originalNames = new Map<TreeData['id'], string>();\r\n private tempId = 0;\r\n filterTerm = '';\r\n\r\n ngAfterViewChecked(): void {\r\n this.cleanupPendingCreateIds();\r\n if (this.pendingFocusParentId !== null) {\r\n const targetId = String(this.pendingFocusParentId);\r\n const target = this.parentNameInputs?.find(\r\n (input) => input.nativeElement.dataset['id'] === targetId\r\n );\r\n if (target) {\r\n target.nativeElement.focus();\r\n target.nativeElement.select();\r\n this.pendingFocusParentId = null;\r\n }\r\n }\r\n\r\n if (this.pendingFocusChildId !== null) {\r\n const targetId = String(this.pendingFocusChildId);\r\n const target = this.childNameInputs?.find(\r\n (input) => input.nativeElement.dataset['id'] === targetId\r\n );\r\n if (target) {\r\n target.nativeElement.focus();\r\n target.nativeElement.select();\r\n this.pendingFocusChildId = null;\r\n }\r\n }\r\n }\r\n\r\n isExpanded(item: TreeData): boolean {\r\n return !this.collapsedIds.has(item.id);\r\n }\r\n\r\n toggleItem(item: TreeData): void {\r\n if (this.collapsedIds.has(item.id)) {\r\n this.collapsedIds.delete(item.id);\r\n } else {\r\n this.collapsedIds.add(item.id);\r\n }\r\n }\r\n\r\n startEditParent(item: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n this.editingParentId = item.id;\r\n this.pendingFocusParentId = item.id;\r\n if (!this.originalNames.has(item.id)) {\r\n this.originalNames.set(item.id, item.name);\r\n }\r\n }\r\n\r\n stopEditParent(): void {\r\n this.editingParentId = null;\r\n }\r\n\r\n isEditingParent(item: TreeData): boolean {\r\n return this.editingParentId === item.id;\r\n }\r\n\r\n startEditChild(subitem: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n if (this.pendingCreateIds.has(subitem.id)) {\r\n return;\r\n }\r\n this.editingChildId = subitem.id;\r\n this.pendingFocusChildId = subitem.id;\r\n if (!this.originalNames.has(subitem.id)) {\r\n this.originalNames.set(subitem.id, subitem.name);\r\n }\r\n }\r\n\r\n stopEditChild(): void {\r\n this.editingChildId = null;\r\n }\r\n\r\n isEditingChild(subitem: TreeData): boolean {\r\n return this.editingChildId === subitem.id;\r\n }\r\n\r\n updateParentName(item: TreeData, event: Event): void {\r\n item.name = (event.target as HTMLInputElement).value;\r\n }\r\n\r\n updateChildName(parent: TreeData, subitem: TreeData, event: Event): void {\r\n subitem.name = (event.target as HTMLInputElement).value;\r\n }\r\n\r\n updateFilter(event: Event): void {\r\n this.filterTerm = (event.target as HTMLInputElement).value ?? '';\r\n }\r\n\r\n clearFilter(): void {\r\n this.filterTerm = '';\r\n }\r\n\r\n getVisibleTree(): TreeData[] {\r\n if (!this.hasActiveFilter()) {\r\n return this.tree;\r\n }\r\n return this.tree.filter((item) => this.getFilteredChildren(item).length > 0);\r\n }\r\n\r\n getFilteredChildren(item: TreeData): TreeData[] {\r\n if (!item.children?.length) {\r\n return [];\r\n }\r\n if (!this.hasActiveFilter()) {\r\n return item.children;\r\n }\r\n const term = this.filterTerm.trim().toLowerCase();\r\n return item.children.filter((child) => child.name.toLowerCase().includes(term));\r\n }\r\n\r\n finalizeParentEdit(item: TreeData): void {\r\n const original = this.originalNames.get(item.id);\r\n if (original === undefined || original !== item.name) {\r\n this.nameChange.emit({ kind: 'parent', id: item.id, name: item.name });\r\n }\r\n this.originalNames.delete(item.id);\r\n this.stopEditParent();\r\n }\r\n\r\n finalizeChildEdit(parent: TreeData, subitem: TreeData): void {\r\n const trimmed = subitem.name.trim();\r\n if (!trimmed) {\r\n this.removeChild(parent, subitem);\r\n this.originalNames.delete(subitem.id);\r\n return;\r\n }\r\n subitem.name = trimmed;\r\n const original = this.originalNames.get(subitem.id);\r\n const isNew = this.isNewChild(subitem.id);\r\n \r\n if (isNew) {\r\n if (original !== undefined && original === subitem.name) {\r\n this.originalNames.delete(subitem.id);\r\n this.stopEditChild();\r\n return;\r\n }\r\n if (this.hasDuplicateChildName(parent, subitem)) {\r\n this.pushAler.warning(this.i18n.translate(this.duplicateNameMessage));\r\n this.removeChild(parent, subitem);\r\n this.originalNames.delete(subitem.id);\r\n return;\r\n }\r\n this.pendingCreateIds.add(subitem.id);\r\n this.create.emit({ parentId: parent.id, name: subitem.name, tempId: subitem.id });\r\n } else {\r\n if (original === undefined || original !== subitem.name) {\r\n this.nameChange.emit({ kind: 'child', parentId: parent.id, id: subitem.id, name: subitem.name });\r\n }\r\n }\r\n this.originalNames.delete(subitem.id);\r\n this.stopEditChild();\r\n }\r\n\r\n cancelParentEdit(item: TreeData): void {\r\n const original = this.originalNames.get(item.id);\r\n if (original !== undefined) {\r\n item.name = original;\r\n }\r\n this.originalNames.delete(item.id);\r\n this.stopEditParent();\r\n }\r\n\r\n cancelChildEdit(parent: TreeData, subitem: TreeData): void {\r\n const original = this.originalNames.get(subitem.id);\r\n if (original !== undefined) {\r\n subitem.name = original;\r\n }\r\n this.originalNames.delete(subitem.id);\r\n if (this.isNewChild(subitem.id) && !subitem.name.trim()) {\r\n this.removeChild(parent, subitem);\r\n return;\r\n }\r\n this.stopEditChild();\r\n }\r\n\r\n addSubItem(item: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n if (!item.children) {\r\n item.children = [];\r\n }\r\n const newId = `new-${Date.now()}-${this.tempId++}`;\r\n const newChild: TreeData = { id: newId, name: '', enabled: true };\r\n item.children.unshift(newChild);\r\n this.collapsedIds.delete(item.id);\r\n this.editingChildId = newChild.id;\r\n this.pendingFocusChildId = newChild.id;\r\n }\r\n\r\n emitEditParent(item: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n this.edit.emit({ kind: 'parent', id: item.id });\r\n this.startEditParent(item);\r\n }\r\n\r\n emitEditChild(parent: TreeData, subitem: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n this.edit.emit({ kind: 'child', parentId: parent.id, id: subitem.id });\r\n }\r\n\r\n emitDeleteParent(item: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n this.remove.emit({ kind: 'parent', id: item.id });\r\n }\r\n\r\n emitDeleteChild(parent: TreeData, subitem: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n this.remove.emit({ kind: 'child', parentId: parent.id, id: subitem.id });\r\n }\r\n\r\n emitDeactivateParent(item: TreeData, checked: boolean): void {\r\n item.enabled = checked;\r\n this.deactivate.emit({ kind: 'parent', id: item.id, checked });\r\n }\r\n\r\n emitDeactivateChild(parent: TreeData, subitem: TreeData, checked: boolean): void {\r\n subitem.enabled = checked;\r\n this.deactivate.emit({ kind: 'child', parentId: parent.id, id: subitem.id, checked });\r\n }\r\n\r\n isPendingCreate(subitem: TreeData): boolean {\r\n return this.pendingCreateIds.has(subitem.id);\r\n }\r\n\r\n private removeChild(parent: TreeData, subitem: TreeData): void {\r\n if (!parent.children) {\r\n return;\r\n }\r\n parent.children = parent.children.filter((child) => child.id !== subitem.id);\r\n if (this.editingChildId === subitem.id) {\r\n this.editingChildId = null;\r\n }\r\n this.pendingCreateIds.delete(subitem.id);\r\n }\r\n\r\n private isNewChild(id: TreeData['id']): boolean {\r\n if (id === null || id === undefined) {\r\n return true;\r\n }\r\n if (typeof id === 'string') {\r\n return id.trim() === '' || id.startsWith('new-');\r\n }\r\n return id <= 0;\r\n }\r\n\r\n private hasDuplicateChildName(parent: TreeData, subitem: TreeData): boolean {\r\n const trimmed = subitem.name.trim().toLowerCase();\r\n if (!trimmed || !parent.children) {\r\n return false;\r\n }\r\n return parent.children.some(\r\n (child) => child.id !== subitem.id && child.name.trim().toLowerCase() === trimmed\r\n );\r\n }\r\n\r\n private hasActiveFilter(): boolean {\r\n return this.filterTerm.trim().length > 0;\r\n }\r\n\r\n private cleanupPendingCreateIds(): void {\r\n if (!this.pendingCreateIds.size) {\r\n return;\r\n }\r\n const idsInTree = new Set<TreeData['id']>();\r\n for (const parent of this.tree) {\r\n if (parent.children?.length) {\r\n for (const child of parent.children) {\r\n idsInTree.add(child.id);\r\n }\r\n }\r\n }\r\n for (const pendingId of Array.from(this.pendingCreateIds)) {\r\n if (!idsInTree.has(pendingId)) {\r\n this.pendingCreateIds.delete(pendingId);\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\nexport interface TreeData{\r\n id: number | string;\r\n name: string;\r\n enabled: boolean;\r\n tag?: string;\r\n tagColor?: 'yellow' | 'red' | 'green' | 'blue';\r\n children?:TreeData[];\r\n}\r\n\r\nexport interface TreeActionEvent {\r\n kind: 'parent' | 'child';\r\n id: number | string;\r\n parentId?: number | string;\r\n}\r\n\r\nexport interface TreeToggleEvent extends TreeActionEvent {\r\n checked: boolean;\r\n}\r\n\r\nexport interface TreeNameChangeEvent extends TreeActionEvent {\r\n name: string;\r\n}\r\n\r\nexport interface TreeCreateRequestEvent {\r\n parentId: number | string;\r\n name: string;\r\n tempId: number | string;\r\n}\r\n","@if (loading) {\r\n <div class=\"tree-skeleton\">\r\n <ui-skeleton-loader [inputs]=\"4\" [cols]=\"1\"></ui-skeleton-loader>\r\n </div>\r\n} @else {\r\n @if (searchEnabled) {\r\n <div class=\"filter-bar\">\r\n {{'tree.search_label' | uicTranslate}}\r\n <ui-input>\r\n <input #inp [placeholder]=\"'tree.search_placeholder' | uicTranslate\" [value]=\"filterTerm\" (input)=\"updateFilter($event)\">\r\n </ui-input>\r\n <ui-button\r\n [iconOnly]=\"true\"\r\n icon=\"ri-eraser-line\"\r\n type=\"bordered\"\r\n color=\"black\"\r\n [disabled]=\"!filterTerm\"\r\n (click)=\"clearFilter(); inp.focus()\"\r\n ></ui-button>\r\n </div>\r\n }\r\n @for (item of getVisibleTree(); track item.id) {\r\n <div class=\"tree-item\" [class.is-collapsed]=\"!isExpanded(item)\">\r\n <div class=\"tree-header\" (click)=\"toggleItem(item)\">\r\n <i class=\"ri-arrow-down-s-line tree-arrow\" [class.is-collapsed]=\"!isExpanded(item)\"></i>\r\n <div class=\"tree-header-name\">\r\n @if (isEditingParent(item)) {\r\n <input\r\n #parentNameInput\r\n class=\"tree-name-input\"\r\n [attr.data-id]=\"item.id\"\r\n [value]=\"item.name\"\r\n (input)=\"updateParentName(item, $event)\"\r\n (blur)=\"finalizeParentEdit(item)\"\r\n (keydown.enter)=\"finalizeParentEdit(item)\"\r\n (keydown.escape)=\"cancelParentEdit(item)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n } @else {\r\n <div class=\"tree-name-text\" (click)=\"startEditParent(item, $event)\">\r\n {{item.name}}\r\n </div>\r\n }\r\n <span>{{item.children?.length || 0}}</span>\r\n </div>\r\n <div>\r\n <ui-switch\r\n [checked]=\"item.enabled\"\r\n (click)=\"$event.stopPropagation()\"\r\n (checkedChange)=\"emitDeactivateParent(item, $event)\"\r\n ></ui-switch>\r\n </div>\r\n <ui-button (click)=\"addSubItem(item, $event)\" icon=\"ri-add-line\" type=\"ghost\" [iconOnly]=\"true\" size=\"s\"></ui-button>\r\n <ui-button (click)=\"emitEditParent(item, $event)\" icon=\"ri-edit-line\" type=\"ghost\" [iconOnly]=\"true\" size=\"s\"></ui-button>\r\n @if (!item.children?.length) {\r\n <ui-button (click)=\"emitDeleteParent(item, $event)\" icon=\"ri-delete-bin-line\" type=\"ghost\" [iconOnly]=\"true\" size=\"s\"></ui-button>\r\n }\r\n </div>\r\n <div class=\"tree-body\">\r\n @if (getFilteredChildren(item).length) {\r\n @for (subitem of getFilteredChildren(item); track subitem.id) {\r\n <div\r\n class=\"tree-subitem\"\r\n [class.is-disabled]=\"!subitem.enabled\"\r\n [class.is-pending]=\"isPendingCreate(subitem)\"\r\n [class.is-parent-disabled]=\"!item.enabled\"\r\n >\r\n <div class=\"tree-subitem-name\">\r\n <i\r\n class=\"ri-circle-fill tree-subitem-status\"\r\n [class.is-enabled]=\"subitem.enabled\"\r\n [class.is-disabled]=\"!subitem.enabled\"\r\n ></i>\r\n @if (isEditingChild(subitem)) {\r\n <input\r\n #childNameInput\r\n class=\"tree-name-input tree-name-input--sub\"\r\n [attr.data-id]=\"subitem.id\"\r\n [value]=\"subitem.name\"\r\n (input)=\"updateChildName(item, subitem, $event)\"\r\n (blur)=\"finalizeChildEdit(item, subitem)\"\r\n (keydown.enter)=\"finalizeChildEdit(item, subitem)\"\r\n (keydown.escape)=\"cancelChildEdit(item, subitem)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n } @else {\r\n <span\r\n class=\"tree-name-text\"\r\n (click)=\"!isPendingCreate(subitem) && startEditChild(subitem, $event)\"\r\n >{{subitem.name}}</span> \r\n @if (subitem.tag) {\r\n <span class=\"tree-tag tag-{{subitem.tagColor}}\" >{{subitem.tag}}</span>\r\n }\r\n }\r\n </div>\r\n <div class=\"tree-subitem-actions\">\r\n <ui-switch\r\n [checked]=\"subitem.enabled\"\r\n [disabled]=\"isPendingCreate(subitem)\"\r\n (checkedChange)=\"emitDeactivateChild(item, subitem, $event)\"\r\n ></ui-switch>\r\n <ui-button\r\n (click)=\"emitEditChild(item, subitem, $event)\"\r\n [disabled]=\"isPendingCreate(subitem)\"\r\n icon=\"ri-edit-line\"\r\n type=\"ghost\"\r\n [iconOnly]=\"true\"\r\n size=\"s\"\r\n ></ui-button>\r\n <ui-button \r\n (click)=\"emitDeleteChild(item, subitem, $event)\" \r\n icon=\"ri-delete-bin-line\" \r\n [disabled]=\"isPendingCreate(subitem)\"\r\n type=\"ghost\" \r\n [iconOnly]=\"true\" size=\"s\"></ui-button>\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"tree-empty\">\r\n {{emptyMessage | uicTranslate}}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n}\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, ElementRef, EventEmitter, inject, input, Input, Output, signal } from '@angular/core';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { ActionMenuOption, UicActionButtonComponent } from '../uic-action-button/uic-action-button.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\nimport { UicTinyAlertService } from '../../services/tiny-alert.service';\r\nimport { UicToolTipDirective } from '../../directives/tool-tip.directive';\r\nimport { UicTranslateService } from '../../services/translate.service';\r\n\r\nconst DEFAULT_CONFIG: EditableTableConfig = {\r\n canAddRow: true,\r\n canDeleteRow: true,\r\n canAddColumn: true,\r\n canDeleteColumn: true,\r\n resizeableColumns: true\r\n};\r\n\r\n@Component({\r\n selector: 'ui-editable-table',\r\n imports: [\r\n CommonModule,\r\n UicButtonComponent,\r\n UicActionButtonComponent,\r\n FormsModule,\r\n UicTranslatePipe,\r\n UicToolTipDirective\r\n],\r\n templateUrl: './editable-table.component.html',\r\n styleUrl: './editable-table.component.scss'\r\n})\r\nexport class UicEditableTableComponent {\r\n readonly actionColumnWidth = 30;\r\n\r\n config = input<Partial<EditableTableConfig>>({});\r\n columnsConfig = input<EditableTableColumnsConfig>({});\r\n\r\n resolvedConfig = computed<EditableTableConfig>(() => ({\r\n ...DEFAULT_CONFIG,\r\n ...this.config()\r\n }));\r\n\r\n rowActions = computed<ActionMenuOption[]>(() => {\r\n const actions: ActionMenuOption[] = [];\r\n if (this.resolvedConfig().canAddRow) {\r\n actions.push(\r\n { id: 'TOP', label: 'editable_table.add_row_above' },\r\n { id: 'BOTTOM', label: 'editable_table.add_row_below' }\r\n );\r\n }\r\n if (this.resolvedConfig().canDeleteRow) {\r\n actions.push({ id: 'DELETE', label: 'editable_table.delete_row' });\r\n }\r\n return actions;\r\n });\r\n\r\n constructor(private readonly hostElement: ElementRef<HTMLElement>) {}\r\n private _record: Array<Record<string, unknown>> = [];\r\n private readonly tinyAlert = inject(UicTinyAlertService);\r\n private readonly translateService = inject(UicTranslateService);\r\n private readonly _visibleRowsStep = signal(50);\r\n private readonly rowsSignal = signal<Array<Record<string, unknown>>>([]);\r\n private readonly headersSignal = signal<string[]>([]);\r\n private readonly visibleRowsCountSignal = signal(0);\r\n private readonly columnWidthsSignal = signal<number[]>([]);\r\n private readonly columnConfigsSignal = signal<Record<string, EditableTableColumnConfig>>({});\r\n\r\n @Input()\r\n set visibleRowsStep(value: number | null | undefined) {\r\n const numericValue = Number(value);\r\n this._visibleRowsStep.set(Number.isFinite(numericValue) && numericValue > 0\r\n ? Math.floor(numericValue)\r\n : 50);\r\n this.syncVisibleRows(false);\r\n }\r\n\r\n get visibleRowsStep(): number {\r\n return this._visibleRowsStep();\r\n }\r\n\r\n @Input()\r\n set record(value: Array<Record<string, unknown>> | null | undefined) {\r\n const normalizedRows = Array.isArray(value)\r\n ? value.map((row) => ({ ...row }))\r\n : [];\r\n\r\n this._record = normalizedRows;\r\n this.rows = normalizedRows;\r\n this.headers = this.buildHeadersFromRows(this.rows);\r\n this.syncColumnWidths(this.headers.length);\r\n this.syncVisibleRows(false);\r\n }\r\n\r\n get record(): Array<Record<string, unknown>> {\r\n return this._record;\r\n }\r\n\r\n get headers(): string[] {\r\n return this.headersSignal();\r\n }\r\n\r\n set headers(value: string[]) {\r\n this.headersSignal.set(value);\r\n }\r\n\r\n get rows(): Array<Record<string, unknown>> {\r\n return this.rowsSignal();\r\n }\r\n\r\n set rows(value: Array<Record<string, unknown>>) {\r\n this.rowsSignal.set(value);\r\n }\r\n\r\n get visibleRowsCount(): number {\r\n return this.visibleRowsCountSignal();\r\n }\r\n\r\n set visibleRowsCount(value: number) {\r\n this.visibleRowsCountSignal.set(value);\r\n }\r\n\r\n get columnWidths(): number[] {\r\n return this.columnWidthsSignal();\r\n }\r\n\r\n set columnWidths(value: number[]) {\r\n this.columnWidthsSignal.set(value);\r\n }\r\n readonly defaultColumnWidth = 160;\r\n private readonly minColumnWidth = 80;\r\n private resizingColumn: number | null = null;\r\n\r\n @Output() recordChange = new EventEmitter<Array<Record<string, unknown>>>();\r\n\r\n readonly visibleRows = computed(() => this.rows.slice(0, this.visibleRowsCount));\r\n readonly hasMoreRows = computed(() => this.visibleRowsCount < this.rows.length);\r\n\r\n async deleteColum(header: string): Promise<void> {\r\n const hasData = this.hasDataInColumn(header);\r\n if (hasData) {\r\n const response = await this.tinyAlert.showAlert({\r\n body: this.translateService.translate(\r\n 'editable_table.delete_column_with_data_warning',\r\n { column_name: header }\r\n ),\r\n title: 'editable_table.delete_column',\r\n okButtonText: 'editable_table.delete',\r\n cancelButtonText: 'common.cancel',\r\n okButtonColor: 'red',\r\n showCancelButton: true,\r\n });\r\n\r\n if (!response.value) {\r\n return;\r\n }\r\n }\r\n\r\n const headerIndex = this.headers.indexOf(header);\r\n this.headers = this.headers.filter((item) => item !== header);\r\n this.columnConfigsSignal.update((configs) => {\r\n const next = { ...configs };\r\n delete next[header];\r\n return next;\r\n });\r\n if (headerIndex >= 0) {\r\n this.columnWidths = [\r\n ...this.columnWidths.slice(0, headerIndex),\r\n ...this.columnWidths.slice(headerIndex + 1)\r\n ];\r\n }\r\n this.rows = this.rows.map((row) => {\r\n const { [header]: _removed, ...rest } = row;\r\n return rest;\r\n });\r\n this.emitTableDataChanges();\r\n }\r\n\r\n private hasDataInColumn(header: string): boolean {\r\n return this.rows.some((row) => {\r\n const rawValue = row[header];\r\n if (rawValue === null || rawValue === undefined) {\r\n return false;\r\n }\r\n\r\n return String(rawValue).trim() !== '';\r\n });\r\n }\r\n\r\n pendingColumnIndex: number | null = null;\r\n pendingColumnName = '';\r\n private confirmingPendingColumn = false;\r\n\r\n addColumAfert(idx:number): void {\r\n if (!this.resolvedConfig().canAddColumn) {\r\n return;\r\n }\r\n\r\n const insertAt = Math.min(Math.max(idx + 1, 0), this.headers.length);\r\n\r\n if (this.pendingColumnIndex !== null) {\r\n this.cancelPendingColumn();\r\n }\r\n\r\n this.pendingColumnIndex = insertAt;\r\n this.pendingColumnName = '';\r\n this.headers = [\r\n ...this.headers.slice(0, insertAt),\r\n '',\r\n ...this.headers.slice(insertAt),\r\n ];\r\n this.columnWidths = [\r\n ...this.columnWidths.slice(0, insertAt),\r\n this.defaultColumnWidth,\r\n ...this.columnWidths.slice(insertAt)\r\n ];\r\n\r\n setTimeout(() => {\r\n this.focusPendingColumnInput();\r\n });\r\n }\r\n\r\n async onPendingColumnNameBlur(): Promise<void> {\r\n if (this.pendingColumnIndex === null || this.confirmingPendingColumn) {\r\n return;\r\n }\r\n\r\n const newName = this.pendingColumnName.trim();\r\n if (!newName) {\r\n this.cancelPendingColumn();\r\n return;\r\n }\r\n\r\n this.confirmingPendingColumn = true;\r\n try {\r\n const response = await this.tinyAlert.showAlert({\r\n body: 'editable_table.save_or_discard_column',\r\n title: 'editable_table.save_column',\r\n okButtonText: 'editable_table.save',\r\n cancelButtonText: 'editable_table.delete',\r\n showCancelButton: true,\r\n okButtonColor: 'green'\r\n });\r\n\r\n if (response.value) {\r\n this.confirmPendingColumnName();\r\n } else {\r\n this.cancelPendingColumn();\r\n }\r\n } finally {\r\n setTimeout(() => {\r\n this.confirmingPendingColumn = false;\r\n });\r\n }\r\n }\r\n\r\n onPendingColumnCheckMouseDown(): void {\r\n this.confirmingPendingColumn = true;\r\n }\r\n\r\n onPendingColumnNameKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n this.confirmPendingColumnName();\r\n return;\r\n }\r\n\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.cancelPendingColumn();\r\n return;\r\n }\r\n }\r\n\r\n async confirmPendingColumnName(): Promise<void> {\r\n if (this.pendingColumnIndex === null) {\r\n return;\r\n }\r\n\r\n const newName = this.pendingColumnName.trim();\r\n if (!newName) {\r\n this.cancelPendingColumn();\r\n return;\r\n }\r\n\r\n const exists = this.headers.some((header, index) =>\r\n index !== this.pendingColumnIndex && header.toLowerCase() === newName.toLowerCase()\r\n );\r\n if (exists) {\r\n this.confirmingPendingColumn = true;\r\n await this.tinyAlert.error('editable_table.column_name_must_be_unique');\r\n setTimeout(() => {\r\n this.confirmingPendingColumn = false;\r\n });\r\n setTimeout(() => {\r\n this.focusPendingColumnInput();\r\n });\r\n return;\r\n }\r\n\r\n this.headers = this.headers.map((header, index) => {\r\n if (index === this.pendingColumnIndex) {\r\n return newName;\r\n }\r\n return header;\r\n });\r\n\r\n this.rows = this.rows.map((row) => ({\r\n ...row,\r\n [newName]: ''\r\n }));\r\n this.columnConfigsSignal.update((configs) => ({\r\n ...configs,\r\n [newName]: this.normalizeProvidedColumnConfig(this.columnsConfig()[newName])\r\n }));\r\n\r\n this.pendingColumnIndex = null;\r\n this.pendingColumnName = '';\r\n this.emitTableDataChanges();\r\n }\r\n\r\n onPendingColumnNameChange(value: string): void {\r\n this.pendingColumnName = value;\r\n }\r\n\r\n cancelPendingColumn(): void {\r\n if (this.pendingColumnIndex === null) {\r\n return;\r\n }\r\n\r\n this.headers = [\r\n ...this.headers.slice(0, this.pendingColumnIndex),\r\n ...this.headers.slice(this.pendingColumnIndex + 1)\r\n ];\r\n this.columnWidths = [\r\n ...this.columnWidths.slice(0, this.pendingColumnIndex),\r\n ...this.columnWidths.slice(this.pendingColumnIndex + 1)\r\n ];\r\n\r\n this.pendingColumnIndex = null;\r\n this.pendingColumnName = '';\r\n }\r\n\r\n startColumnResize(event: PointerEvent, headerIndex: number): void {\r\n event.preventDefault();\r\n\r\n const startX = event.clientX;\r\n const startWidth = this.columnWidths[headerIndex] ?? this.defaultColumnWidth;\r\n const pointerId = event.pointerId;\r\n const moveTarget = event.currentTarget as HTMLElement;\r\n\r\n if (!moveTarget) {\r\n return;\r\n }\r\n\r\n this.resizingColumn = headerIndex;\r\n moveTarget.setPointerCapture(pointerId);\r\n\r\n const onMove = (moveEvent: PointerEvent): void => {\r\n if (this.resizingColumn !== headerIndex) {\r\n return;\r\n }\r\n\r\n const nextWidth = Math.max(\r\n this.minColumnWidth,\r\n Math.floor(startWidth + (moveEvent.clientX - startX))\r\n );\r\n const nextColumnWidths = [...this.columnWidths];\r\n nextColumnWidths[headerIndex] = nextWidth;\r\n this.columnWidths = nextColumnWidths;\r\n };\r\n\r\n const onUp = (): void => {\r\n this.resizingColumn = null;\r\n moveTarget.releasePointerCapture(pointerId);\r\n window.removeEventListener('pointermove', onMove);\r\n window.removeEventListener('pointerup', onUp);\r\n };\r\n\r\n window.addEventListener('pointermove', onMove);\r\n window.addEventListener('pointerup', onUp);\r\n }\r\n\r\n readonly columnInputTypeByHeader = computed<Record<string, EditableTableInputType>>(() => {\r\n const headers = this.headers;\r\n const externalConfig = this.columnsConfig();\r\n const localConfig = this.columnConfigsSignal();\r\n\r\n const values: Record<string, EditableTableInputType> = {};\r\n headers.forEach((header) => {\r\n values[header] = this.normalizeColumnInputType(externalConfig[header]?.type)\r\n ?? this.normalizeColumnInputType(localConfig[header]?.type)\r\n ?? 'text';\r\n });\r\n return values;\r\n });\r\n\r\n readonly columnDisabledByHeader = computed<Record<string, boolean>>(() => {\r\n const headers = this.headers;\r\n const externalConfig = this.columnsConfig();\r\n const localConfig = this.columnConfigsSignal();\r\n\r\n const values: Record<string, boolean> = {};\r\n headers.forEach((header) => {\r\n const columnConfig = externalConfig[header] ?? localConfig[header];\r\n values[header] = columnConfig?.disabled ?? false;\r\n });\r\n return values;\r\n });\r\n\r\n private syncColumnWidths(columnCount: number): void {\r\n this.columnWidths = Array.from({ length: columnCount }, (_, index) => {\r\n return this.columnWidths[index] ?? this.defaultColumnWidth;\r\n });\r\n }\r\n\r\n private normalizeProvidedColumnConfig(\r\n config: EditableTableColumnConfig | null | undefined\r\n ): EditableTableColumnConfig {\r\n const normalizedType = this.normalizeColumnInputType(config?.type);\r\n\r\n return {\r\n disabled: config?.disabled ?? false,\r\n type: normalizedType ?? 'text'\r\n };\r\n }\r\n\r\n private normalizeColumnInputType(\r\n type: EditableTableInputType | string | null | undefined\r\n ): EditableTableInputType | null {\r\n if (\r\n type === 'text' ||\r\n type === 'number' ||\r\n type === 'date' ||\r\n type === 'email' ||\r\n type === 'password' ||\r\n type === 'search' ||\r\n type === 'tel' ||\r\n type === 'url' ||\r\n type === 'time' ||\r\n type === 'datetime-local' ||\r\n type === 'month'\r\n ) {\r\n return type;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n onCellBlur(): void {\r\n this.emitTableDataChanges();\r\n }\r\n\r\n onCellKeydown(event: KeyboardEvent, indexRows: number, indexCols: number): void {\r\n let targetRow = indexRows;\r\n let targetCol = indexCols;\r\n\r\n if (event.key === 'ArrowUp') {\r\n targetRow = indexRows - 1;\r\n } else if (event.key === 'ArrowDown') {\r\n targetRow = indexRows + 1;\r\n } else if (event.key === 'ArrowLeft') {\r\n targetCol = indexCols - 1;\r\n } else if (event.key === 'ArrowRight') {\r\n targetCol = indexCols + 1;\r\n } else if (event.key === 'Escape') {\r\n (event.target as HTMLInputElement).blur();\r\n return;\r\n } else {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n if (targetRow < 0 || targetRow >= this.visibleRowsCount || targetCol < 0 || targetCol >= this.headers.length) {\r\n return;\r\n }\r\n\r\n this.focusCell(targetRow, targetCol);\r\n }\r\n\r\n handleRowAction(actionId: string, rowIndex: number): void {\r\n if (actionId === 'DELETE') {\r\n this.deleteRow(rowIndex);\r\n return;\r\n }\r\n\r\n this.addEmptyRow(rowIndex, actionId);\r\n }\r\n\r\n showMoreRows(): void {\r\n this.visibleRowsCount = Math.min(this.visibleRowsCount + this.visibleRowsStep, this.rows.length);\r\n }\r\n\r\n async deleteRow(index: number): Promise<void> {\r\n if (index < 0 || index >= this.rows.length) {\r\n return;\r\n }\r\n\r\n const row = this.rows[index];\r\n const hasData = this.hasDataInRow(row);\r\n if (hasData) {\r\n const response = await this.tinyAlert.showAlert({\r\n body: this.translateService.translate('editable_table.delete_row_with_data_warning'),\r\n title: 'editable_table.delete_row',\r\n okButtonText: 'editable_table.delete',\r\n cancelButtonText: 'common.cancel',\r\n okButtonColor: 'red',\r\n showCancelButton: true,\r\n });\r\n\r\n if (!response.value) {\r\n return;\r\n }\r\n }\r\n\r\n this.rows = this.rows.filter((_, i) => i !== index);\r\n this.emitTableDataChanges();\r\n }\r\n\r\n private hasDataInRow(row: Record<string, unknown>): boolean {\r\n return Object.values(row).some((value) => {\r\n if (value === null || value === undefined) {\r\n return false;\r\n }\r\n\r\n return String(value).trim() !== '';\r\n });\r\n }\r\n\r\n addEmptyRow(index: number, position: string): void {\r\n const emptyRow: Record<string, unknown> = {};\r\n this.headers.forEach((header) => {\r\n emptyRow[header] = '';\r\n });\r\n\r\n const normalizedPosition = position.toLowerCase();\r\n const targetIndex = normalizedPosition === 'top' ? index : index + 1;\r\n const insertIndex = Math.min(Math.max(targetIndex, 0), this.rows.length);\r\n\r\n this.rows = [\r\n ...this.rows.slice(0, insertIndex),\r\n emptyRow,\r\n ...this.rows.slice(insertIndex)\r\n ];\r\n this.emitTableDataChanges();\r\n }\r\n\r\n private emitTableDataChanges(resetVisibleRows = false): void {\r\n const nextValue = this.rows.map((row) => ({ ...row }));\r\n this._record = nextValue;\r\n this.syncVisibleRows(resetVisibleRows);\r\n this.recordChange.emit(nextValue);\r\n }\r\n\r\n private focusCell(row: number, col: number): void {\r\n const cellInput = this.hostElement.nativeElement.querySelector<HTMLInputElement>(\r\n `input[data-row=\"${row}\"][data-col=\"${col}\"]`\r\n );\r\n cellInput?.focus();\r\n }\r\n\r\n private focusPendingColumnInput(): void {\r\n if (this.pendingColumnIndex === null) {\r\n return;\r\n }\r\n\r\n const input = this.hostElement.nativeElement.querySelector<HTMLInputElement>(\r\n `input[data-new-col=\"${this.pendingColumnIndex}\"]`\r\n );\r\n input?.focus();\r\n }\r\n\r\n private buildHeadersFromRows(rows: Array<Record<string, unknown>>): string[] {\r\n const keys = new Set<string>();\r\n\r\n rows.forEach((row) => {\r\n Object.keys(row).forEach((key) => keys.add(key));\r\n });\r\n\r\n return Array.from(keys);\r\n }\r\n\r\n private syncVisibleRows(reset: boolean): void {\r\n const totalRows = this.rows.length;\r\n if (totalRows === 0) {\r\n this.visibleRowsCount = 0;\r\n return;\r\n }\r\n\r\n const initialVisibleRows = Math.min(this.visibleRowsStep, totalRows);\r\n if (reset || this.visibleRowsCount === 0) {\r\n this.visibleRowsCount = initialVisibleRows;\r\n return;\r\n }\r\n\r\n if (totalRows <= this.visibleRowsStep) {\r\n this.visibleRowsCount = totalRows;\r\n return;\r\n }\r\n\r\n this.visibleRowsCount = Math.min(this.visibleRowsCount, totalRows);\r\n }\r\n}\r\n\r\nexport type EditableTableConfig = {\r\n canAddRow: boolean;\r\n canDeleteRow: boolean;\r\n canAddColumn: boolean;\r\n canDeleteColumn: boolean;\r\n resizeableColumns: boolean;\r\n};\r\n\r\nexport type EditableTableInputType = 'text' | 'number' | 'date' | 'email' | 'password' | 'search' | 'tel' | 'url' | 'time' | 'datetime-local' | 'month';\r\nexport type EditableTableColumnConfig = {\r\n type?: EditableTableInputType;\r\n disabled?: boolean;\r\n};\r\nexport type EditableTableColumnsConfig = Record<string, EditableTableColumnConfig>;\r\n","<div class=\"xlstable-overflow\">\n @if (headers.length > 0) {\n <table class=\"xls-table\">\n <colgroup>\n @if (rowActions().length > 0) {\n <col class=\"action-col\" [style.width.px]=\"actionColumnWidth\">\n }\n @for (header of headers; track $index) {\n <col [style.width.px]=\"columnWidths[$index]\">\n }\n </colgroup>\n <thead>\n <tr>\n @if (rowActions().length > 0) {\n <th class=\"action-col\"></th>\n }\n @for (header of headers; track $index) {\n <th>\n @if (pendingColumnIndex === $index) {\n <div class=\"hea-th hea-th-edit\">\n <input\n class=\"new-col-name\"\n type=\"text\"\n [(ngModel)]=\"pendingColumnName\"\n (ngModelChange)=\"onPendingColumnNameChange($event)\"\n (blur)=\"onPendingColumnNameBlur()\"\n (keydown)=\"onPendingColumnNameKeydown($event)\"\n [attr.data-new-col]=\"$index\">\n @if (pendingColumnName.trim()) {\n <ui-button (mousedown)=\"onPendingColumnCheckMouseDown()\" (click)=\"confirmPendingColumnName()\" icon=\"ri-check-line\" color=\"green\" size=\"s\" [iconOnly]=\"true\"></ui-button>\n }\n </div>\n } @else {\n <div class=\"hea-th\">\n <div style=\"flex: 1 1; min-width: 0;\">\n {{ header }} \n </div>\n \n @if (resolvedConfig().canAddColumn) {\n <ui-button [uiTooltip]=\"'editable_table.add_column' | uicTranslate\" (click)=\"addColumAfert($index)\" icon=\"ri-insert-column-right\" size=\"s\" [iconOnly]=\"true\"></ui-button> \n }\n @if (resolvedConfig().canDeleteColumn){\n <ui-button [uiTooltip]=\"'editable_table.delete_column' | uicTranslate\" (click)=\"deleteColum(header)\" icon=\"ri-delete-bin-line\" color=\"red\" size=\"s\" [iconOnly]=\"true\"></ui-button>\n }\n @if (resolvedConfig().resizeableColumns) {\n <span\n class=\"column-resize-handle\"\n (pointerdown)=\"startColumnResize($event, $index)\"\n ></span>\n }\n\n </div>\n }\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of visibleRows(); track $index; let i = $index) {\n <tr>\n @if (rowActions().length > 0) {\n <td class=\"action-col\">\n <div class=\"action-cell\">\n <ui-action-button [options]=\"rowActions()\" (optionSelected)=\"handleRowAction($event.id, i)\"></ui-action-button>\n </div>\n </td>\n }\n @for (header of headers; track $index; let col = $index) {\n <td>\n <input\n [disabled]=\"columnDisabledByHeader()[header]\"\n [type]=\"columnInputTypeByHeader()[header]\"\n [attr.data-row]=\"i\"\n [attr.data-col]=\"col\"\n [(ngModel)]=\"row[header]\"\n (blur)=\"onCellBlur()\"\n (keydown)=\"onCellKeydown($event, i, col)\">\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (hasMoreRows()) {\n <div class=\"show-more\">\n <ui-button color=\"black\" type=\"bordered\" size=\"m\" (click)=\"showMoreRows()\">\n {{'excel_table.see_more' | uicTranslate}}\n </ui-button>\n </div>\n }\n <div class=\"table-counter\">\n {{'excel_table.counter_text' | uicTranslate:{shown: visibleRows().length, total: rows.length} }}\n </div>\n } @else{\n <div class=\"empty-msg\"> {{'excel_table.empty_message' | uicTranslate}} </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { UicButtonComponent } from '../button/button.component';\nimport * as XLSX from 'xlsx';\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\nimport { UicEditableTableComponent } from '../editable-table/editable-table.component';\n\n@Component({\n selector: 'ui-excel-table',\n imports: [\n CommonModule,\n UicButtonComponent,\n UicTranslatePipe,\n UicEditableTableComponent\n ],\n templateUrl: './excel-table.component.html',\n styleUrl: './excel-table.component.scss'\n})\nexport class UicExcelTableComponent {\n @Input() headerFormat: 'lowercase' | 'uppercase' | 'none' = 'none';\n @Input() title = '';\n\n private _visibleRowsStep = 50;\n private _record: Array<Record<string, unknown>> = [];\n\n @Input()\n set visibleRowsStep(value: number | null | undefined) {\n const numericValue = Number(value);\n this._visibleRowsStep = Number.isFinite(numericValue) && numericValue > 0\n ? Math.floor(numericValue)\n : 50;\n }\n\n get visibleRowsStep(): number {\n return this._visibleRowsStep;\n }\n\n @Input()\n set record(value: Array<Record<string, unknown>> | null | undefined) {\n const normalizedRows = Array.isArray(value)\n ? value.map((row) => ({ ...row }))\n : [];\n\n this._record = normalizedRows;\n }\n\n get record(): Array<Record<string, unknown>> {\n return this._record;\n }\n\n fileName = '';\n @Output() recordChange = new EventEmitter<Array<Record<string, unknown>>>();\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (!input.files || input.files.length === 0) {\n return;\n }\n\n const file = input.files[0];\n this.fileName = file.name;\n const reader = new FileReader();\n\n reader.onload = () => {\n const buffer = reader.result as ArrayBuffer;\n const data = new Uint8Array(buffer);\n const workbook = XLSX.read(data, { type: 'array' });\n const sheetName = workbook.SheetNames[0];\n if (!sheetName) {\n this.resetData();\n return;\n }\n\n const sheet = workbook.Sheets[sheetName];\n const sheetData = XLSX.utils.sheet_to_json(sheet, {\n header: 1,\n defval: ''\n }) as unknown[][];\n\n if (!sheetData || sheetData.length === 0) {\n this.resetData();\n return;\n }\n\n const headerRow = sheetData[0] as unknown[];\n const columnCount = Math.max(\n headerRow.length,\n ...sheetData.map((row) => row.length)\n );\n\n const headerFormat = this.normalizeHeaderFormat(this.headerFormat);\n const rawHeaders = Array.from({ length: columnCount }, (_, index) => {\n const value = headerRow[index];\n const header = value === undefined || value === null ? '' : String(value).trim();\n return header !== '' ? header : `Col ${index + 1}`;\n });\n const headers = rawHeaders.map((header) => this.formatHeader(header, headerFormat));\n\n const dataRows = sheetData.slice(1);\n const rows = dataRows.map((row) => {\n const record: Record<string, unknown> = {};\n headers.forEach((header, index) => {\n record[header] = row[index] ?? '';\n });\n return record;\n });\n\n this._record = rows;\n this.recordChange.emit(rows.map((row) => ({ ...row })));\n };\n\n reader.readAsArrayBuffer(file);\n input.value = '';\n }\n\n onEditableRecordChange(value: Array<Record<string, unknown>>): void {\n const normalizedRows = value.map((row) => ({ ...row }));\n this._record = normalizedRows;\n this.recordChange.emit(normalizedRows);\n }\n\n resetData(): void {\n this._record = [];\n this.recordChange.emit([]);\n }\n\n private normalizeHeaderFormat(value: string): 'lowercase' | 'uppercase' | 'none' {\n if (value === 'lowercase' || value === 'uppercase' || value === 'none') {\n return value;\n }\n\n return 'none';\n }\n\n private formatHeader(header: string, format: 'lowercase' | 'uppercase' | 'none'): string {\n if (format === 'uppercase') {\n return header.toUpperCase();\n }\n\n if (format === 'lowercase') {\n return header.toLowerCase();\n }\n\n return header;\n }\n}\n","<input\r\n#fileInput\r\ntype=\"file\"\r\naccept=\".xlsx,.xls,.csv\"\r\n(change)=\"onFileSelected($event)\"\r\nhidden\r\n/>\r\n\r\n<div class=\"xls-title\">\r\n @if (title) {\r\n <h1 style=\"flex: 1 1;\">{{title}}</h1>\r\n }\r\n <div class=\"xls-buttons\">\r\n <ui-button color=\"black\" type=\"bordered\" size=\"m\" (click)=\"resetData()\">{{'excel_table.clear_file' | uicTranslate}}</ui-button>\r\n <ui-button color=\"black\" size=\"m\" (click)=\"fileInput.click()\">{{'excel_table.load_file' | uicTranslate}}</ui-button>\r\n </div>\r\n</div>\r\n<ui-editable-table\r\n [record]=\"record\"\r\n [visibleRowsStep]=\"visibleRowsStep\"\r\n (recordChange)=\"onEditableRecordChange($event)\"\r\n></ui-editable-table>\r\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\r\nimport { UicOverlayCardComponent } from '../overlay-card/overlay-card.component';\r\nimport { UicInputComponent } from '../inputs/input/input.component';\r\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { ButtonColor, UicButtonComponent } from '../button/button.component';\r\nimport { InputWrapperComponent } from '../inputs/input-wrapper/input-wrapper.component';\r\nimport { createValueAccessor } from '../dynamic-form/base-value-accessot';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\n\r\ntype selectId = UicTagData[];\r\nconst base = createValueAccessor<selectId>();\r\n\r\n@Component({\r\n selector: 'ui-tag-selector',\r\n imports: [\r\n UicOverlayCardComponent,\r\n UicInputComponent,\r\n FormsModule,\r\n InputWrapperComponent,\r\n UicButtonComponent,\r\n UicTranslatePipe\r\n],\r\n templateUrl: './tag-selector.component.html',\r\n styleUrl: './tag-selector.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicTagSelectorComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicTagSelectorComponent extends base{\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n // TEXTO\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n\r\n @Input() placeholder = 'common.search_ellipsis';\r\n @Input() buttonText = 'tag_selector.add_tag';\r\n @Input() predefinedTitle = 'tag_selector.predefined_title';\r\n @Input() newTagTitle = 'tag_selector.new_tag_title';\r\n \r\n @Input() predefinedLabels:UicTagData[] = [];\r\n\r\n @Output() createdTag = new EventEmitter<UicTagData>();\r\n @Output() selectTag = new EventEmitter<number>();\r\n @Output() unselectTag = new EventEmitter<number>();\r\n\r\n selectedTags:UicTagData[] = [];\r\n \r\n\r\n filterText = '';\r\n newTagLabel = '';\r\n filterArray:UicTagData[] = [];\r\n\r\n ngOnInit(){\r\n this.filter();\r\n }\r\n\r\n\r\n filter(){\r\n this.filterArray = this.predefinedLabels.filter(f=>f.name.toLocaleLowerCase().includes(this.filterText.toLocaleLowerCase()));\r\n }\r\n select(tag:UicTagData){\r\n const idx = this.selectedTags.findIndex(f=>f.name == tag.name);\r\n if (idx!=-1){\r\n this.selectedTags.splice(idx,1);\r\n this.unselectTag.emit(tag.id);\r\n }else{\r\n this.selectedTags.push(tag);\r\n this.selectTag.emit(tag.id);\r\n }\r\n this.notifyChange(this.selectedTags);\r\n }\r\n \r\n removeTag(tag:UicTagData){\r\n this.select(tag);\r\n }\r\n\r\n createTag(){\r\n const newTag = {\r\n id:0,\r\n color:'blue',\r\n name:this.newTagLabel\r\n };\r\n this.predefinedLabels.push(newTag);\r\n this.filterText = '';\r\n this.filter();\r\n this.select(newTag);\r\n this.newTagLabel = '';\r\n this.createdTag.emit(newTag);\r\n }\r\n\r\n isSelected(name: string): boolean {\r\n return this.selectedTags.some(t => t.name === name);\r\n }\r\n\r\n override writeValue(value: UicTagData[] | null | undefined): void {\r\n const safeValue = Array.isArray(value) ? value : [];\r\n super.writeValue(safeValue);\r\n this.selectedTags = [...safeValue];\r\n }\r\n\r\n}\r\n\r\nexport interface UicTagData{\r\n id:number;\r\n name:string;\r\n color:string;\r\n icon?: string;\r\n}\r\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n<div class=\"tags-reel\">\r\n @for (item of selectedTags; track $index) {\r\n <div [class]=\"'selected-tag lc-'+item.color\" ><i [class]=\"item.icon??'ri-hashtag'\"></i>{{item.name}} <i (click)=\"removeTag(item)\" class=\"ri-close-large-line close-icon\"></i> </div>\r\n }\r\n <ui-overlay-card>\r\n <ui-button button type=\"bordered\" color=\"black\" icon=\"ri-add-line\" size=\"s\">{{buttonText | uicTranslate}}</ui-button>\r\n <ng-container content >\r\n\r\n <ui-input internalIcon=\"ri-search-line\" internalIconColor=\"blue\">\r\n <input [placeholder]=\"placeholder | uicTranslate\" [(ngModel)]=\"filterText\" (ngModelChange)=\"filter()\" >\r\n </ui-input>\r\n <div class=\"tags-overflow\">\r\n <div class=\"tags-title\">{{predefinedTitle | uicTranslate}}</div>\r\n @for(item of filterArray; track $index){\r\n <div (click)=\"select(item)\" class=\"tag-option\"> \r\n <i class=\"ri-circle-fill f-grey\"></i> \r\n <div style=\"flex: 1 1;\">{{item.name}}</div> \r\n @if ( isSelected(item.name) ) {\r\n <i class=\"ri-check-line\"></i> \r\n }\r\n </div>\r\n }\r\n <div class=\"new-tag\"> \r\n <div class=\"new-tag-label\">{{newTagTitle | uicTranslate}}:</div>\r\n <div class=\"input-tag\">\r\n <input [(ngModel)]=\"newTagLabel\" (keydown.enter)=\"createTag()\" type=\"text\">\r\n <ui-button (click)=\"createTag()\" size=\"s\" [iconOnly]=\"true\" icon=\"ri-add-line\"></ui-button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ui-overlay-card>\r\n</div> \r\n</ui-input-wrapper>\r\n","import { Component, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\r\nimport { ButtonColor } from '../button/button.component';\r\n\r\n@Component({\r\n selector: 'ui-progress-bar',\r\n imports: [],\r\n templateUrl: './progress-bar.component.html',\r\n styleUrl: './progress-bar.component.scss'\r\n})\r\nexport class UicProgressBarComponent implements OnChanges, OnDestroy {\r\n @Input() progress = 0; // Progress percentage (0-100)\r\n @Input() color:ButtonColor = 'primary'; // fill var(600) not fill var(200)\r\n @Input() height = 6;\r\n\r\n displayProgress = 0;\r\n private rafId: number | null = null;\r\n\r\n get clampedProgress(): number {\r\n return Math.min(100, Math.max(0, this.progress));\r\n }\r\n\r\n get heightPx(): string {\r\n return `${this.height}px`;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['progress']) {\r\n this.scheduleProgressUpdate();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.rafId !== null) {\r\n cancelAnimationFrame(this.rafId);\r\n }\r\n }\r\n\r\n private scheduleProgressUpdate(): void {\r\n if (this.rafId !== null) {\r\n cancelAnimationFrame(this.rafId);\r\n }\r\n this.rafId = requestAnimationFrame(() => {\r\n this.displayProgress = this.clampedProgress;\r\n this.rafId = null;\r\n });\r\n }\r\n}\r\n","<div [class]=\"'progress-bar pb-' + color\" [style.--pb-height]=\"heightPx\">\r\n <div class=\"progress-bar__fill\" [style.width.%]=\"displayProgress\"></div>\r\n</div>\r\n","import { animate, style, transition, trigger } from \"@angular/animations\";\r\nexport const simpleFade = trigger('simpleFade', [\r\n transition(':enter',[style({opacity:0}), animate('.3s ease', style({opacity:1}))]),\r\n transition(':leave', [animate('.3s ease', style({opacity:0}))])\r\n ]);","import { Observable } from \"rxjs\";\r\nimport { AppSelectOption } from \"../inputs/select/select.component\";\r\nimport { ButtonColor } from \"../button/button.component\";\r\nimport { UicPhoneInputValue } from \"../inputs/phone-input/phone-input.component\";\r\n\r\nexport interface FormStep {\r\n title: string;\r\n form:FormSchema;\r\n required?:boolean;\r\n okButtonText?:string;\r\n cancelButtonText?:string;\r\n}\r\n\r\nexport interface FormSchema {\r\n cols: number;\r\n blocks?: FormBlock[];\r\n}\r\n\r\nexport interface FormBlock {\n subtitle?: string;\n title?: string;\n fields: FormField[];\n}\n\nexport interface SelectOptionsSource {\n key: string;\n idField?: string;\n textField?: string;\n textTemplate?: string;\n dependsOn?: string;\n paramName?: string;\n params?: Record<string, any>;\n}\n\nexport interface SelectOptionsContext {\n field: FormField;\n values: uicFormValuesRecord;\n dependencyValue?: any;\n}\n\nexport type SelectOptionsResolver = (\n source: SelectOptionsSource,\n context: SelectOptionsContext\n) => AppSelectOption[] | unknown[] | Promise<AppSelectOption[] | unknown[]> | Observable<AppSelectOption[] | unknown[]>;\n\nexport interface FormField {\n // REQUERIDOS\r\n name: string; // identificador único del campo, se usará como key en el resultado del formulario\r\n type: FieldType; // tipo de campo, determina el componente a renderizar\r\n required?: boolean; // default false\r\n // CONFIGURACIÓN\r\n icon?: string; // icono externo\r\n label?: string; // etiqueta a mostrar en el formulario\r\n tip?: string; // subtexto o descripción\r\n newLine?: boolean; // Saltar linea en el grid\r\n colSpan?: number; // para campos que ocupan más de una columna, default 1\r\n iconColor?:ButtonColor; // color del icono externo\r\n tooltip?: string; // texto del tooltip al hoverear el campo\r\n // UTILITARIOS\r\n disabled?: boolean; \r\n loading?:boolean;\r\n clearValueOnHide?: boolean;\r\n // input y selects\r\n internalIcon?:string;\r\n internalIconColor?:ButtonColor;\r\n internalColorScale?:number[];\r\n internalColorScaleOrder?:'asc'|'desc';\r\n selectSearchEnabled?:boolean;\r\n selectNullable?:boolean;\r\n // Para inputs/textareas\r\n placeholder?:string;\r\n minLength?: number;\r\n maxLength?: number;\r\n showCounter?:boolean;\r\n voiceToTextEnabled?:boolean;\r\n textareaResize?:boolean;\r\n resizeMinRows?:number;\r\n resizeMaxRows?:number;\r\n // Para inputs numéricos\r\n min?: number;\r\n max?: number;\r\n step?:number; \r\n // Para slider\r\n sliderInterval?:number;\r\n sliderMarks?:number;\r\n // Para datepicker\r\n monthMode?:boolean;\r\n monthDay?:'first'|'last';\r\n minDate?:string;\r\n maxDate?:string;\r\n // para timepicker\r\n timeInterval?:number;\r\n // Para file-input\r\n fileTypes?: string[] | string;\r\n // para pools\r\n poolEnabledListView?:boolean;\r\n poolTitle?:string;\r\n // select\n options?: AppSelectOption[]; \n optionsSource?: SelectOptionsSource;\n multyEnabled?: boolean;\n // para searcher \r\n searchApi?: string;\r\n searchFn?: (query: string) => Observable<any[]>;\r\n searchDisplayFn?: (item: any) => string;\r\n searchIsEnabledFn?: (item: any) => boolean;\r\n pattern?:RegExp;\r\n // REGLAS DE VISIBILIDAD\r\n visibilityRules?: FieldVisibilityRule[]|null; \r\n // Para el admin de formularios\r\n iaValidation?: boolean;\r\n iaValidationPrompt?: string;\r\n}\r\n\r\nexport interface FieldVisibilityRule{\n fieldName: string; // el campo del que depende la visibilidad\n fieldLabel?: string; // etiqueta del campo dependiente, solo para mostrar en builders/admins\n operator: VisibilityOperators; // operador de comparación\n value: any; // valor a comparar\n}\n\r\nexport type VisibilityOperators = 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' | 'includes' | 'notIncludes';\r\n\r\nexport interface FieldConfig { value:FieldType; icon: string; detail: string; label:string; properties:string[]};\r\n\r\nexport const FIELDS_CONFIG:FieldConfig[] = [\r\n { value:'text', icon:'ri-text', detail: 'Campo de texto en una sola linea', label:'Texto corto', properties: ['placeholder','minLength','maxLength','showCounter']},\r\n { value:'textarea', icon:'ri-file-text-line', detail: 'Texto multilinea con ajuste de altura', label:'Area de texto', properties: ['placeholder','minLength','maxLength','showCounter','voiceToTextEnabled','textareaResize','resizeMinRows','resizeMaxRows']},\r\n { value:'number', icon:'ri-hashtag', detail: 'Campo numerico con control de paso', label:'Numero', properties: ['placeholder','step','min','max']},\r\n { value:'phone', icon:'ri-phone-line', detail: 'Telefono con pais y codigo', label:'Telefono', properties: ['placeholder']},\r\n { value:'select', icon:'ri-list-unordered', detail: 'Seleccion simple desde opciones', label:'Selector', properties: ['options','selectSearchEnabled','selectNullable']},\n { value:'multyselect', icon:'ri-list-check-2', detail: 'Seleccion multiple desde opciones', label:'Selector multiple', properties: ['options']},\n { value:'date', icon:'ri-calendar-2-line', detail: 'Selector de fecha o mes', label:'Fecha', properties: ['monthMode','monthDay','minDate','maxDate']},\r\n { value:'time', icon:'ri-timer-2-line', detail: 'Selector de hora', label:'Hora', properties: ['timeInterval']},\r\n { value:'radio', icon:'ri-radio-button-line', detail: 'Seleccion unica entre opciones', label:'Radio', properties: ['options']},\n { value:'checkbox', icon:'ri-checkbox-line', detail: 'Campo booleano tipo check', label:'Checkbox', properties: ['placeholder']},\r\n { value:'switch', icon:'ri-toggle-line', detail: 'Campo booleano tipo switch', label:'Switch', properties: ['placeholder']},\r\n { value:'pool', icon:'ri-list-indefinite', detail: 'Seleccion con lista y detalle por item', label:'Multiopciones', properties: ['options','multyEnabled','poolEnabledListView','poolTitle']},\n { value:'file', icon:'ri-attachment-line', detail: 'Carga de archivos', label:'Archivo', properties: ['multyEnabled','fileTypes','iaValidation','iaValidationPrompt']},\r\n { value:'searcher', icon:'ri-seo-line', detail: 'Buscador con fuente de datos externa', label:'Buscador', properties: ['placeholder','searchApi']},\r\n { value:'slider', icon:'ri-equalizer-2-line', detail: 'Control deslizante continuo', label:'Deslizador', properties: ['min','max','sliderInterval','sliderMarks']}\r\n]; \r\n\r\nexport type FieldType = \r\n 'text' | \r\n 'number' | \r\n 'phone' | \r\n 'date' | \r\n 'time' | \r\n 'select' | \r\n 'radio' |\r\n 'checkbox' | \r\n 'switch' | \r\n 'textarea' | \r\n 'pool' | \r\n 'file' |\r\n 'multyselect'| \r\n 'searcher' | \r\n 'slider' ;\r\n\r\nexport interface FormResult{\r\n result: boolean;\r\n form: uicFormValuesRecord|null;\r\n}\r\n\r\nexport type uicFormValuesRecord = Record<string,any>;\r\n\r\nexport const BASE_FORM_FIELDS: FormField[] = [\r\n {\r\n name: 'name',\r\n internalIcon:'ri-key-line',\r\n tip:'ID',\r\n label: 'form_builder.base.name',\r\n type: 'text',\r\n required: true\r\n },\r\n {\r\n name: 'label',\r\n internalIcon:'ri-price-tag-3-line',\r\n label: 'form_builder.base.label',\r\n type: 'text',\r\n required: true\r\n },\r\n {\r\n name: 'required',\r\n placeholder: 'form_builder.base.required',\r\n type: 'checkbox'\r\n }\r\n];\r\nexport const LAYOUT_FORM_FIELDS: FormField[] = [\r\n {\r\n name: 'icon',\r\n label: 'form_builder.base.icon',\r\n placeholder: 'ri-name-type',\r\n newLine: true,\r\n internalIcon: 'ri-remixicon-line',\r\n tip:'https://remixicon.com/',\r\n type: 'text'\r\n },\r\n {\r\n name: 'iconColor',\r\n label: 'form_builder.extra.iconColor',\r\n internalIcon: 'ri-palette-line',\r\n type: 'select',\r\n options: [\r\n { id: 'primary', text: 'primary' },\r\n { id: 'secondary', text: 'secondary' },\r\n { id: 'red', text: 'red' },\r\n { id: 'green', text: 'green' },\r\n { id: 'blue', text: 'blue' },\r\n { id: 'yellow', text: 'yellow' },\r\n { id: 'black', text: 'black' },\r\n { id: 'grey', text: 'grey' },\r\n { id: 'white', text: 'white' }\r\n ]\r\n },\r\n {\r\n name: 'internalIcon',\r\n label: 'form_builder.extra.internalIcon',\r\n placeholder: 'ri-name-type',\r\n tip:'https://remixicon.com/',\r\n type: 'text',\r\n internalIcon: 'ri-remixicon-line',\r\n },\r\n {\r\n name: 'internalIconColor',\r\n label: 'form_builder.extra.internalIconColor',\r\n internalIcon: 'ri-palette-line',\r\n type: 'select',\r\n options: [\r\n { id: 'primary', text: 'primary' },\r\n { id: 'secondary', text: 'secondary' },\r\n { id: 'red', text: 'red' },\r\n { id: 'green', text: 'green' },\r\n { id: 'blue', text: 'blue' },\r\n { id: 'yellow', text: 'yellow' },\r\n { id: 'black', text: 'black' },\r\n { id: 'grey', text: 'grey' },\r\n { id: 'white', text: 'white' }\r\n ]\r\n },\r\n {\r\n name: 'tip',\r\n internalIcon: 'ri-lightbulb-line',\r\n label: 'form_builder.base.tip',\r\n tip: 'form_builder.base.tip_tip',\r\n type: 'text'\r\n },\r\n {\r\n name: 'colSpan',\r\n tip:'form_builder.base.col_span_tip',\r\n label: 'form_builder.base.col_span',\r\n internalIcon:'ri-layout-line',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'newLine',\r\n placeholder: 'form_builder.base.new_line',\r\n type: 'checkbox'\r\n }\r\n];\r\nexport const EXTRA_FORM_FIELDS: FormField[] = [\r\n {\r\n name: 'placeholder',\r\n label: 'form_builder.extra.placeholder',\r\n internalIcon: 'ri-edit-box-line',\r\n tip: 'form_builder.extra.placeholder_tip',\r\n type: 'text'\r\n },\r\n {\n name: 'searchApi',\n label: 'form_builder.extra.searchApi',\n internalIcon: 'ri-api-line',\n tip: 'form_builder.extra.searchApi_tip',\n type: 'text'\n },\n {\n name: 'optionsSource.key',\n label: 'form_builder.extra.optionsSourceKey',\n internalIcon: 'ri-database-2-line',\n tip: 'form_builder.extra.optionsSourceKey_tip',\n type: 'text'\n },\n {\n name: 'optionsSource.idField',\n label: 'form_builder.extra.optionsSourceIdField',\n internalIcon: 'ri-key-line',\n tip: 'form_builder.extra.optionsSourceIdField_tip',\n type: 'text',\n visibilityRules: [\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: ''\n },\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: null\n }\n ]\n },\n {\n name: 'optionsSource.textField',\n label: 'form_builder.extra.optionsSourceTextField',\n internalIcon: 'ri-text',\n tip: 'form_builder.extra.optionsSourceTextField_tip',\n type: 'text',\n visibilityRules: [\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: ''\n },\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: null\n }\n ]\n },\n {\n name: 'optionsSource.textTemplate',\n label: 'form_builder.extra.optionsSourceTextTemplate',\n internalIcon: 'ri-braces-line',\n tip: 'form_builder.extra.optionsSourceTextTemplate_tip',\n type: 'text',\n visibilityRules: [\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: ''\n },\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: null\n }\n ]\n },\n {\n name: 'optionsSource.dependsOn',\n label: 'form_builder.extra.optionsSourceDependsOn',\n internalIcon: 'ri-git-branch-line',\n tip: 'form_builder.extra.optionsSourceDependsOn_tip',\n type: 'text',\n visibilityRules: [\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: ''\n },\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: null\n }\n ]\n },\n {\n name: 'optionsSource.paramName',\n label: 'form_builder.extra.optionsSourceParamName',\n internalIcon: 'ri-code-line',\n tip: 'form_builder.extra.optionsSourceParamName_tip',\n type: 'text',\n visibilityRules: [\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: ''\n },\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: null\n }\n ]\n },\n {\r\n name: 'iaValidation',\r\n label: 'form_builder.extra.iaValidation',\r\n internalIcon: 'ri-api-line',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'iaValidationPrompt',\r\n label: 'form_builder.extra.iaValidationPrompt',\r\n internalIcon: 'ri-api-line',\r\n type: 'textarea',\r\n visibilityRules: [\r\n {\r\n fieldName: 'iaValidation',\r\n operator: 'equals',\r\n value: true\r\n }\r\n ]\r\n },\r\n {\r\n name: 'minDate',\r\n label: 'form_builder.extra.minDate',\r\n internalIcon: 'ri-calendar-todo-line',\r\n tip: 'form_builder.extra.minDate_tip',\r\n type: 'text'\r\n },\r\n {\r\n name: 'maxDate',\r\n label: 'form_builder.extra.maxDate',\r\n internalIcon: 'ri-calendar-close-line',\r\n tip: 'form_builder.extra.maxDate_tip',\r\n type: 'text'\r\n },\r\n {\r\n name: 'fileTypes',\r\n label: 'form_builder.extra.fileTypes',\r\n internalIcon: 'ri-file-upload-line',\r\n type: 'select',\r\n options:[\r\n { id: 'ALL', text: 'Todos' },\r\n { id: 'image/*', text: 'Imagen' },\r\n { id: '.doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/pdf', text: 'DOCS' },\r\n { id: '.csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel', text: 'Excel' },\r\n { id: 'application/vnd.ms-powerpoint', text: 'PPT' },\r\n ]\r\n },\r\n {\r\n name: 'selectNullable',\r\n label: 'form_builder.extra.selectNullable',\r\n internalIcon: 'ri-checkbox-multiple-blank-line',\r\n tip: 'form_builder.extra.selectNullable_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'selectSearchEnabled',\r\n label: 'form_builder.extra.selectSearchEnabled',\r\n internalIcon: 'ri-search-line',\r\n tip: 'form_builder.extra.selectSearchEnabled_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'poolTitle',\r\n label: 'form_builder.extra.poolTitle',\r\n internalIcon: 'ri-stack-line',\r\n tip: 'form_builder.extra.poolTitle_tip',\r\n type: 'text'\r\n },\r\n {\r\n name: 'internalColorScale',\r\n label: 'form_builder.extra.internalColorScale',\r\n internalIcon: 'ri-palette-line',\r\n tip: 'form_builder.extra.internalColorScale_tip',\r\n type: 'textarea'\r\n },\r\n {\r\n name: 'internalColorScaleOrder',\r\n label: 'form_builder.extra.internalColorScaleOrder',\r\n internalIcon: 'ri-sort-asc',\r\n tip: 'form_builder.extra.internalColorScaleOrder_tip',\r\n type: 'select',\r\n options: [\r\n { id: 'asc', text: 'asc' },\r\n { id: 'desc', text: 'desc' }\r\n ]\r\n },\r\n {\r\n name: 'minLength',\r\n label: 'form_builder.extra.minLength',\r\n internalIcon: 'ri-text-wrap',\r\n tip: 'form_builder.extra.minLength_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'maxLength',\r\n label: 'form_builder.extra.maxLength',\r\n internalIcon: 'ri-text-wrap',\r\n tip: 'form_builder.extra.maxLength_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'resizeMinRows',\r\n label: 'form_builder.extra.resizeMinRows',\r\n internalIcon: 'ri-layout-row-line',\r\n tip: 'form_builder.extra.resizeMinRows_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'resizeMaxRows',\r\n label: 'form_builder.extra.resizeMaxRows',\r\n internalIcon: 'ri-layout-row-line',\r\n tip: 'form_builder.extra.resizeMaxRows_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'min',\r\n label: 'form_builder.extra.min',\r\n internalIcon: 'ri-arrow-down-line',\r\n tip: 'form_builder.extra.min_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'max',\r\n label: 'form_builder.extra.max',\r\n internalIcon: 'ri-arrow-up-line',\r\n tip: 'form_builder.extra.max_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'step',\r\n label: 'form_builder.extra.step',\r\n internalIcon: 'ri-add-line',\r\n tip: 'form_builder.extra.step_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'sliderInterval',\r\n label: 'form_builder.extra.sliderInterval',\r\n internalIcon: 'ri-slideshow-line',\r\n tip: 'form_builder.extra.sliderInterval_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'sliderMarks',\r\n label: 'form_builder.extra.sliderMarks',\r\n internalIcon: 'ri-git-branch-line',\r\n tip: 'form_builder.extra.sliderMarks_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'monthDay',\r\n label: 'form_builder.extra.monthDay',\r\n internalIcon: 'ri-calendar-2-line',\r\n tip: 'form_builder.extra.monthDay_tip',\r\n type: 'select',\r\n options: [\r\n { id: 'first', text: 'first' },\r\n { id: 'last', text: 'last' }\r\n ]\r\n },\r\n {\r\n name: 'timeInterval',\r\n label: 'form_builder.extra.timeInterval',\r\n internalIcon: 'ri-timer-line',\r\n tip: 'form_builder.extra.timeInterval_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'showCounter',\r\n placeholder: 'form_builder.extra.showCounter',\r\n internalIcon: 'ri-bar-chart-line',\r\n tip: 'form_builder.extra.showCounter_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'voiceToTextEnabled',\r\n placeholder: 'form_builder.extra.voiceToTextEnabled',\r\n internalIcon: 'ri-mic-line',\r\n tip: 'form_builder.extra.voiceToTextEnabled_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'textareaResize',\r\n label: '_',\r\n placeholder: 'form_builder.extra.textareaResize',\r\n internalIcon: 'ri-resize-line',\r\n tip: 'form_builder.extra.textareaResize_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'monthMode',\r\n label: '_',\r\n placeholder: 'form_builder.extra.monthMode',\r\n internalIcon: 'ri-calendar-event-line',\r\n tip: 'form_builder.extra.monthMode_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'poolEnabledListView',\r\n label: '_',\r\n placeholder: 'form_builder.extra.poolEnabledListView',\r\n internalIcon: 'ri-layout-grid-line',\r\n tip: 'form_builder.extra.poolEnabledListView_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'multyEnabled',\r\n label: '_',\r\n placeholder: 'form_builder.extra.multyEnabled',\r\n internalIcon: 'ri-folder-add-line',\r\n tip: 'form_builder.extra.multyEnabled_tip',\r\n type: 'checkbox'\r\n }\r\n]\r\nexport const BRANCH_FORM_FIELDS: FormField[] = [\r\n {\r\n name: 'fieldName',\r\n internalIcon:'ri-key-line',\r\n label: 'form_builder.field_editor.parent',\r\n type: 'select',\r\n required: true\r\n },\r\n {\r\n name: 'operator',\r\n internalIcon:'ri-price-tag-3-line',\r\n label: 'form_builder.field_editor.operator',\r\n type: 'select',\r\n options: [\r\n { id: 'equals', text: 'equals' },\r\n { id: 'notEquals', text: 'notEquals' },\r\n { id: 'greaterThan', text: 'greaterThan' },\r\n { id: 'lessThan', text: 'lessThan' },\r\n { id: 'includes', text: 'includes' },\r\n { id: 'notIncludes', text: 'notIncludes' }\r\n ],\r\n required: true\r\n },\r\n {\r\n name: 'value',\r\n label: 'form_builder.field_editor.value',\r\n placeholder: 'form_builder.field_editor.expected_value',\r\n type: 'text'\r\n }\r\n];\r\n","import { Component, Inject } from '@angular/core';\nimport { FormResult, FormSchema, SelectOptionsResolver } from '../../dynamic-form/form.models';\nimport { UicFormWrapperComponent } from '../../dynamic-form/form-wrapper/form-wrapper.component';\r\nimport { MODAL_DATA } from '../../../services/modal.constant';\r\n\r\n@Component({\r\n selector: 'lib-form-preview',\r\n imports: [UicFormWrapperComponent],\r\n templateUrl: './form-preview.component.html',\r\n styleUrl: './form-preview.component.scss'\r\n})\r\nexport class FormPreviewComponent {\n\n schema: FormSchema = { cols: 2, blocks: [] };\n selectOptionsResolver?: SelectOptionsResolver;\n\n constructor(@Inject(MODAL_DATA) public data: { schema: FormSchema; selectOptionsResolver?: SelectOptionsResolver }) { \n this.schema = data.schema;\n this.selectOptionsResolver = data.selectOptionsResolver;\n }\n\r\n save(fr:FormResult){\r\n console.log(fr.form);\r\n }\r\n}\r\n","<ui-form-wrapper \n [schema]=\"schema\" \n [selectOptionsResolver]=\"selectOptionsResolver\"\n [showButtons]=\"true\"\n (formSubmit)=\"save($event)\">\n</ui-form-wrapper>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { AppSelectOption } from '../../../../inputs/select/select.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UicButtonComponent } from '../../../../button/button.component';\r\nimport { InputWrapperComponent } from '../../../../inputs/input-wrapper/input-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'ui-field-options-editor',\r\n imports: [FormsModule, UicButtonComponent, InputWrapperComponent, UicTranslatePipe],\r\n templateUrl: './field-options-editor.component.html',\r\n styleUrl: './field-options-editor.component.scss'\r\n})\r\nexport class UicFieldOptionsEditorComponent {\r\n\r\n @Output() optionsChange = new EventEmitter<AppSelectOption[]>();\n\n @Input() options:AppSelectOption[] = [\n { id: '', text: '' }\n ];\n\n addOption() {\n this.options = [...this.options, { id: '', text: '' }];\n this.optionsChange.emit(this.options);\n }\n dropOption(index: number) {\n this.options = this.options.filter((_, idx) => idx !== index);\n this.optionsChange.emit(this.options);\n }\n\n updateCode(name:string, idx:number){\n const option = this.options[idx];\n if (!option) return;\n\n if ( option.id === '' ) {\n const nextOptions = [...this.options];\n nextOptions[idx] = { ...option, id: name };\n this.options = nextOptions;\n }\n this.optionsChange.emit(this.options);\n }\n}\n","<ui-input-wrapper [label]=\"'form_builder.options_editor.title' | uicTranslate\">\n <div class=\"optbody\">\n <div class=\"option-row\">\n <div>{{'form_builder.options_editor.code_label' | uicTranslate}}</div>\n <div>{{'form_builder.options_editor.name_label' | uicTranslate}}</div>\n </div>\n @for (item of options; track $index) {\n <div class=\"option-row\">\n @if (true) {\n <input (blur)=\"optionsChange.emit(options)\" [(ngModel)]=\"item.id\" [placeholder]=\"'form_builder.options_editor.code_placeholder' | uicTranslate\" type=\"text\">\n }\n <input [(ngModel)]=\"item.text\" (blur)=\"updateCode(item.text,$index)\" [placeholder]=\"'form_builder.options_editor.display_name_placeholder' | uicTranslate\" type=\"text\">\n <ui-button (click)=\"dropOption($index)\" size=\"s\" type=\"ghost\" icon=\"ri-delete-bin-line\" [iconOnly]=\"true\" color=\"red\"></ui-button>\n </div>\n }\n <ui-button (click)=\"addOption()\" color=\"black\" type=\"bordered\" icon=\"ri-add-line\" size=\"s\">{{'form_builder.options_editor.add_option' | uicTranslate}}</ui-button>\n </div>\n</ui-input-wrapper>\n","import { Component, ElementRef, computed, effect, inject, input, output, signal } from '@angular/core';\nimport { BASE_FORM_FIELDS, BRANCH_FORM_FIELDS, EXTRA_FORM_FIELDS, FIELDS_CONFIG, FieldVisibilityRule, FormField, LAYOUT_FORM_FIELDS, uicFormValuesRecord } from '../../../dynamic-form/form.models';\r\nimport { UicFormWrapperComponent } from '../../../dynamic-form/form-wrapper/form-wrapper.component';\r\nimport { UicTranslateService } from '../../../../services/translate.service';\r\nimport { UicFieldOptionsEditorComponent } from './field-options-editor/field-options-editor.component';\r\nimport { AppSelectOption } from '../../../inputs/select/select.component';\r\nimport { EditableField } from '../../user-formbuilder.component';\r\nimport { UicTranslatePipe } from '../../../../pipes/translate.pipe';\nimport { UicButtonComponent } from '../../../button/button.component';\n\nconst OPTIONS_SOURCE_FIELD_NAMES = [\n 'optionsSource.key',\n 'optionsSource.idField',\n 'optionsSource.textField',\n 'optionsSource.textTemplate',\n 'optionsSource.dependsOn',\n 'optionsSource.paramName'\n];\n\n@Component({\n selector: 'lib-field-editor',\r\n imports: [\r\n UicFormWrapperComponent, \r\n UicButtonComponent,\r\n UicTranslatePipe, \r\n UicFieldOptionsEditorComponent],\r\n templateUrl: './field-editor.component.html',\r\n styleUrl: './field-editor.component.scss'\r\n})\r\nexport class FieldEditorComponent {\n \n private readonly translateService = inject(UicTranslateService);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private currentFieldCode: string | null = null;\n hasOptions = computed(() => {\n const fieldType = this.fieldType();\n return !!fieldType?.properties.includes('options');\n });\n hasExternalOptionsSource = computed(() => !!this.localField().optionsSource?.key);\n config = input.required<EditableField>();\n focusRequiredField = input(false);\n options = input<Record<string,AppSelectOption[]>>( {} );\n\r\n hiddenSections = signal<string[]>([]);\r\n\r\n\r\n fieldChange = output<FormField>(); \r\n \r\n localField = signal<FormField>({name:'',type:'text'});\r\n\r\n /* FORM FIELDS */\r\n requiredFields:FormField[] = this.buildRequiredFields();\n optionsSourceFields = computed<FormField[]>(() => this.buildOptionsSourceFields());\n advancedFields = computed<FormField[]>(() => (this.buildAdvancedBlocks()));\n styleFields = computed<FormField[]>(() => (this.buildDesignBlocks()));\r\n branchFields:FormField[] = this.buildBranchFields();\r\n\r\n\r\n initialValues = computed(() => {\r\n const fieldData = this.config().fieldData;\r\n return fieldData ?? {} \r\n });\r\n\r\n branchInitialValues = computed<uicFormValuesRecord>(() => {\r\n const firstRule = this.localField().visibilityRules?.[0];\r\n if (!firstRule) return {};\r\n\r\n return {\r\n fieldName: firstRule.fieldName ?? null,\r\n operator: firstRule.operator ?? null,\r\n value: firstRule.value ?? null\r\n };\r\n });\r\n\r\n /*\r\n {\r\n fieldName : [\r\n {id:field_name, text: field_label},\r\n {id:field2_name, text: field2_label}\r\n ]\r\n }\r\n */ \r\n\r\n\r\n fieldType = computed(() => FIELDS_CONFIG.find(f => f.value === this.config().fieldData?.type));\r\n \r\n constructor(){\n effect(() => {\n const config = this.config();\n const field = config.fieldData;\n this.localField.set(field);\n\n if (this.currentFieldCode !== config.code) {\n this.currentFieldCode = config.code;\n this.scrollPropertiesToTop();\n }\n });\n }\n\n private scrollPropertiesToTop(): void {\n requestAnimationFrame(() => {\n const scrollContainer = this.elementRef.nativeElement.closest('.formeditor-properties-form');\n scrollContainer?.scrollTo({ top: 0 });\n });\n }\n\r\n updateRuleValue(fr:uicFormValuesRecord){\r\n const fieldName = fr['fieldName'];\r\n const operator = fr['operator'];\r\n const value = fr['value'];\r\n\r\n // Ignore partial emissions while the dependency form is still incomplete.\r\n if (!fieldName || !operator) return;\r\n\r\n const visibilityRules:FieldVisibilityRule = {\n fieldName,\n fieldLabel: this.getDependencyFieldLabel(fieldName),\n operator,\n value\n };\n\r\n const currentRule = this.localField().visibilityRules?.[0];\r\n if (\r\n currentRule &&\r\n currentRule.fieldName === visibilityRules.fieldName &&\r\n currentRule.operator === visibilityRules.operator &&\r\n currentRule.value === visibilityRules.value\r\n ) {\r\n return;\r\n }\r\n\r\n const updatedField:FormField = {\r\n ...this.localField(),\r\n visibilityRules: [visibilityRules]\r\n }\r\n this.localField.set(updatedField);\r\n this.fieldChange.emit(updatedField);\r\n }\r\n\r\n addRule(){\r\n const updatedField = {\r\n ...this.localField(),\r\n visibilityRules: []\r\n }\r\n this.localField.set(updatedField);\r\n this.fieldChange.emit(updatedField);\r\n }\r\n \r\n removeRule(){\r\n const updatedField = {\r\n ...this.localField(),\r\n visibilityRules: null\r\n }\r\n this.localField.set(updatedField);\r\n this.fieldChange.emit(updatedField);\r\n }\r\n\r\n updateFieldValues(fr:uicFormValuesRecord){\r\n const updatedField = {\r\n ...this.localField(),\r\n ...fr\r\n }\r\n this.localField.set(updatedField);\r\n this.fieldChange.emit(updatedField);\r\n }\r\n\r\n updateOptions(options: AppSelectOption[]){\n const updatedField = {\r\n ...this.localField(),\r\n options: options\r\n }\r\n this.localField.set(updatedField);\r\n this.fieldChange.emit(updatedField);\n }\n\n private getDependencyFieldLabel(fieldName: string): string {\n return this.options()['fieldName']?.find(option => option.id === fieldName)?.text ?? fieldName;\n }\n\n toggleSection(section:string){\n const currentHidden = this.hiddenSections();\r\n if (currentHidden.includes(section)){\r\n this.hiddenSections.set(currentHidden.filter(s => s !== section));\r\n } else {\r\n this.hiddenSections.set([...currentHidden, section]);\r\n } \r\n }\r\n\r\n private buildRequiredFields():FormField[]{\r\n return BASE_FORM_FIELDS.map(field => ({\r\n ...field,\r\n label: this.translateService.translate(field.label ?? ''),\r\n placeholder: field.placeholder ? this.translateService.translate(field.placeholder) : this.translateService.translate(field.label ?? ''),\r\n tip: field.tip ? this.translateService.translate(field.tip) : field.tip\r\n }));\r\n }\r\n\r\n private buildDesignBlocks():FormField[]{\r\n const fieldType = this.fieldType();\r\n if (!fieldType) return [];\r\n return [...LAYOUT_FORM_FIELDS.map(field => ({\r\n ...field,\r\n label: this.translateService.translate(field.label ?? ''),\r\n placeholder: field.placeholder ? this.translateService.translate(field.placeholder) : this.translateService.translate(field.label ?? ''),\r\n tip: field.tip ? this.translateService.translate(field.tip) : field.tip\r\n }))];\r\n }\r\n\r\n private buildAdvancedBlocks():FormField[]{\n const fieldType = this.fieldType();\n if (!fieldType) return [];\n\n const extraFields = EXTRA_FORM_FIELDS.filter(f => fieldType.properties.includes(f.name));\n return [...extraFields.map(field => ({\n ...field,\n label: this.translateService.translate(field.label ?? ''),\n placeholder: field.placeholder ? this.translateService.translate(field.placeholder) : this.translateService.translate(field.label ?? ''),\n tip: field.tip ? this.translateService.translate(field.tip) : field.tip\n }))];\n }\n\n private buildOptionsSourceFields(): FormField[] {\n return EXTRA_FORM_FIELDS\n .filter(field => OPTIONS_SOURCE_FIELD_NAMES.includes(field.name))\n .map(field => ({\n ...this.prepareOptionsSourceField(field),\n label: this.translateService.translate(field.label ?? ''),\n placeholder: field.placeholder ? this.translateService.translate(field.placeholder) : this.translateService.translate(field.label ?? ''),\n tip: field.tip ? this.translateService.translate(field.tip) : field.tip\n }));\n }\n\n private prepareOptionsSourceField(field: FormField): FormField {\n const options = this.options()[field.name];\n\n if ((field.name === 'optionsSource.key' || field.name === 'optionsSource.dependsOn') && options?.length) {\n return {\n ...field,\n type: 'select',\n options,\n selectNullable: true\n };\n }\n\n return field;\n }\n\n private buildBranchFields():FormField[]{\n return BRANCH_FORM_FIELDS.map(field => ({\r\n ...field,\r\n label: this.translateService.translate(field.label ?? ''),\r\n placeholder: field.placeholder ? this.translateService.translate(field.placeholder) : this.translateService.translate(field.label ?? '')\r\n }));\r\n }\r\n}\r\n","<div class=\"props-title\">{{'form_builder.field_editor.basic' | uicTranslate}} <i (click)=\"toggleSection('basic')\" class=\"{{hiddenSections().includes('basic') ? 'ri-arrow-down-s-line' : 'ri-arrow-up-s-line'}}\"></i> </div>\n<div class=\"props-inputs\" [class.hidden]=\"hiddenSections().includes('basic')\">\n <ui-form-wrapper\n [fields]=\"requiredFields\" \n [initialValues]=\"initialValues()\"\n [focusFieldName]=\"focusRequiredField() ? 'label' : null\"\n [focusFieldTrigger]=\"focusRequiredField() ? config().code : null\"\n [cols]=\"1\" \n (formChange)=\"updateFieldValues($event)\">\n </ui-form-wrapper>\n @if (hasOptions()) {\n <ui-form-wrapper\n [fields]=\"optionsSourceFields()\"\n [initialValues]=\"initialValues()\"\n [externalData]=\"options()\"\n [cols]=\"1\"\n (formChange)=\"updateFieldValues($event)\">\n </ui-form-wrapper>\n @if (!hasExternalOptionsSource()) {\n <ui-field-options-editor [options]=\"localField().options ?? []\" (optionsChange)=\"updateOptions($event)\"></ui-field-options-editor>\n }\n }\n</div>\n\n<div class=\"props-title\">{{'form_builder.field_editor.advanced' | uicTranslate}} <i (click)=\"toggleSection('advanced')\" class=\"{{hiddenSections().includes('advanced') ? 'ri-arrow-down-s-line' : 'ri-arrow-up-s-line'}}\"></i> </div>\n<div class=\"props-inputs\" [class.hidden]=\"hiddenSections().includes('advanced')\">\n <ui-form-wrapper\n [fields]=\"advancedFields()\" \n [initialValues]=\"initialValues()\"\n [cols]=\"1\" \n (formChange)=\"updateFieldValues($event)\">\n </ui-form-wrapper>\n</div>\n\n<div class=\"props-title\">{{'form_builder.field_editor.style' | uicTranslate}} <i (click)=\"toggleSection('style')\" class=\"{{hiddenSections().includes('style') ? 'ri-arrow-down-s-line' : 'ri-arrow-up-s-line'}}\"></i> </div>\n<div class=\"props-inputs\" [class.hidden]=\"hiddenSections().includes('style')\">\n <ui-form-wrapper\n [fields]=\"styleFields()\" \n [initialValues]=\"initialValues()\"\n [cols]=\"1\" \n (formChange)=\"updateFieldValues($event)\"> \n </ui-form-wrapper>\n</div>\n\n<div class=\"props-title\">{{'form_builder.field_editor.dependency_title' | uicTranslate}} <i (click)=\"toggleSection('dependency')\" class=\"{{hiddenSections().includes('dependency') ? 'ri-arrow-down-s-line' : 'ri-arrow-up-s-line'}}\"></i> </div>\n<div class=\"props-inputs\" [class.hidden]=\"hiddenSections().includes('dependency')\">\n @if (localField().visibilityRules ) {\n <p>{{'form_builder.field_editor.dependency_description' | uicTranslate}}</p>\n <ui-form-wrapper\n [fields]=\"branchFields\" \n [initialValues]=\"branchInitialValues()\"\n [externalData]=\"options()\"\n [cols]=\"1\" \n (formChange)=\"updateRuleValue($event)\">\n </ui-form-wrapper>\n <ui-button color=\"black\" size=\"s\" (click)=\"removeRule()\">{{'form_builder.field_editor.remove_relation' | uicTranslate}}</ui-button>\n }@else {\n <ui-button color=\"black\" size=\"s\" (click)=\"addRule()\">{{'form_builder.field_editor.add_relation' | uicTranslate}}</ui-button>\n }\n</div>\n","import { Component, output } from '@angular/core';\r\nimport { UicToolTipDirective } from '../../../../directives/tool-tip.directive';\r\nimport { UicTranslatePipe } from '../../../../pipes/translate.pipe';\r\nimport { FieldConfig, FIELDS_CONFIG } from '../../../dynamic-form/form.models';\r\n\r\n@Component({\r\n selector: 'lib-field-type-selector',\r\n imports: [UicToolTipDirective, UicTranslatePipe],\r\n templateUrl: './field-type-selector.component.html',\r\n styleUrl: './field-type-selector.component.scss'\r\n})\r\nexport class FieldTypeSelectorComponent {\r\n\r\n types: FieldConfig[] = [...FIELDS_CONFIG];\r\n\r\n selectType = output<FieldConfig>();\r\n\r\n addField(type: FieldConfig){\r\n this.selectType.emit(type);\r\n }\r\n \r\n}\r\n","@for (type of types; track $index) {\r\n <div [uiTooltip]=\"type.label | uicTranslate\" (click)=\"addField(type)\" class=\"field-type\">\n <i [class]=\"type.icon\"></i>\r\n <!-- <div>\r\n <b>{{type.label}}</b>\r\n <p>{{type.detail}}</p>\r\n </div> -->\r\n </div>\r\n}\n","import { Component, input, Input, output } from '@angular/core';\r\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { UicToolTipDirective } from '../../../directives/tool-tip.directive';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FieldTypeSelectorComponent } from './field-type-selector/field-type-selector.component';\r\nimport { EditableBlock, EditableField } from '../user-formbuilder.component';\r\nimport { FieldConfig } from '../../dynamic-form/form.models';\r\n\r\n@Component({\r\n selector: 'lib-block-editor',\r\n imports: [\r\n UicButtonComponent,\r\n UicToolTipDirective,\r\n UicTranslatePipe,\r\n DragDropModule,\r\n FormsModule,\r\n FieldTypeSelectorComponent\r\n ],\r\n templateUrl: './block-editor.component.html',\r\n styleUrl: './block-editor.component.scss'\r\n})\r\nexport class BlockEditorComponent {\r\n\r\n block = input<EditableBlock>({\n title: '',\n code:'',\n order:1,\n subtitle: '',\n fields: []\n });\n blockChange = output<EditableBlock>();\n addFieldRequest = output<FieldConfig>();\r\n\r\n deleteBlock = output<string>();\r\n notifySelectedField = output<EditableField|null>();\r\n @Input() selectedFieldId: string | null = null;\r\n\r\n \r\n selectField(field: EditableField){\r\n this.notifySelectedField.emit(field);\r\n }\r\n\r\n changeTitle(newTitle: string){\r\n this.blockChange.emit({...this.block(), title: newTitle});\r\n }\r\n\r\n changeSubtitle(newSubtitle: string){\r\n this.blockChange.emit({...this.block(), subtitle: newSubtitle});\r\n }\r\n\r\n \r\n addField(newFieldType: FieldConfig){\r\n this.addFieldRequest.emit(newFieldType);\r\n }\r\n\r\n deleteField(fieldCode:string, e:Event){\r\n e.stopPropagation();\r\n this.blockChange.emit({...this.block(), fields: this.block().fields.filter(f => f.code !== fieldCode)});\r\n if(this.selectedFieldId === fieldCode){\r\n this.notifySelectedField.emit(null);\r\n }\r\n }\r\n\r\n reorderFields(event: CdkDragDrop<EditableField[]>) {\r\n if (event.previousIndex === event.currentIndex) return;\r\n\r\n const nextFields = [...this.block().fields];\r\n moveItemInArray(nextFields, event.previousIndex, event.currentIndex);\r\n this.blockChange.emit({ ...this.block(), fields: nextFields });\r\n }\r\n}\r\n","<div class=\"form-block-card\">\n <div class=\"form-block-card-header\">\n <div>\n <input [placeholder]=\"'form_builder.block_title' | uicTranslate\" [ngModel]=\"block().title\" (ngModelChange)=\"changeTitle($event)\">\n <input [placeholder]=\"'form_builder.block_subtitle' | uicTranslate\" [ngModel]=\"block().subtitle\" (ngModelChange)=\"changeSubtitle($event)\">\n </div>\n <ui-button [uiTooltip]=\"'form_builder.delete_block' | uicTranslate\" (click)=\"deleteBlock.emit(block().code)\" size=\"s\" icon=\"ri-delete-bin-line\" color=\"red\" type=\"ghost\" [iconOnly]=\"true\"></ui-button>\n </div>\n <div\n class=\"form-block-card-body\"\n cdkDropList\n [cdkDropListData]=\"block().fields\"\n (cdkDropListDropped)=\"reorderFields($event)\">\n \n <!-- FIELDS -->\n @for(edtField of block().fields; track edtField.code; let i = $index) {\n <div\n class=\"xfield-card\"\n cdkDrag\n [class.selected-field]=\"selectedFieldId === edtField.code\"\n (click)=\"selectField(edtField)\">\n <i class=\"ri-draggable field-drag-handle\" cdkDragHandle></i>\n\n <div class=\"xfield-card-icon\">\n <i [class]=\"edtField.field?.icon ?? ''\"></i> \n </div>\n <div class=\"xfield-card-body\">\n <b> {{edtField.fieldData.label}} \n @if(edtField.fieldData.visibilityRules) {\n <i class=\"branched-field ri-git-merge-line\"></i> \n <span class=\"vs-rule\"> {{edtField.fieldData.visibilityRules[0]?.fieldLabel ?? edtField.fieldData.visibilityRules[0]?.fieldName ?? '-'}} </span>\n }\n </b>\n <p> {{edtField.field?.label ?? edtField.type ?? edtField.fieldData.type}} </p>\n </div>\n <div class=\"xfield-card-actions\">\n <ui-button (click)=\"deleteField(edtField.code, $event)\" size=\"s\" icon=\"ri-delete-bin-line\" color=\"red\" type=\"ghost\" [iconOnly]=\"true\"></ui-button>\n </div>\n </div>\n\n }\n\n </div>\n <div class=\"new-field\">\n {{'form_builder.add_new_field' | uicTranslate}}\n <lib-field-type-selector (selectType)=\"addField($event)\"></lib-field-type-selector>\n </div>\n</div>\n","import { Component, computed, effect, HostListener, inject, Input, input, output, signal } from '@angular/core';\nimport { FIELDS_CONFIG, FieldConfig, FormField, FormSchema, SelectOptionsResolver } from '../dynamic-form/form.models';\nimport { UicButtonComponent } from '../button/button.component';\nimport { UicModalService } from '../../services/modal.service';\nimport { FormPreviewComponent } from './form-preview/form-preview.component';\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\nimport { FieldEditorComponent } from \"./block-editor/field-editor/field-editor.component\";\nimport { FormsModule } from '@angular/forms';\nimport { BlockEditorComponent } from './block-editor/block-editor.component';\nimport { AppSelectOption, UicSelectComponent } from '../inputs/select/select.component';\nimport { helperShowFormFromBuilder } from '../../helpers';\nimport { UicFormWrapperComponent } from '../dynamic-form/form-wrapper/form-wrapper.component';\nimport { UicTinyAlertService } from '../../services/tiny-alert.service';\nimport { UicTranslateService } from '../../services/translate.service';\n\nexport type EditableField = {\n id?: number | null;\n code: string;\n order: number;\n type?: string;\n field?: FieldConfig;\n fieldData: FormField;\n};\n\nexport type EditableBlock = {\n id?: number | null;\n code: string;\n order: number;\n title?: string;\n subtitle?: string;\n fields: EditableField[];\n};\n\nexport type EditableForm = {\n cols: number;\n blocks: EditableBlock[];\n};\n\n@Component({\n selector: 'ui-user-formbuilder',\n imports: [\n UicButtonComponent,\n UicFormWrapperComponent,\n UicTranslatePipe,\n FieldEditorComponent,\n FormsModule,\n BlockEditorComponent,\n UicSelectComponent\n ],\n templateUrl: './user-formbuilder.component.html',\n styleUrl: './user-formbuilder.component.scss'\n})\nexport class UicUserFormbuilderComponent {\n\n private readonly modalService = inject(UicModalService);\n private readonly tinyAlertService = inject(UicTinyAlertService);\n private readonly translateService = inject(UicTranslateService);\n\n @Input() disabled = false;\n @Input() formTitle = 'Nuevo formulario';\n @Input() optionSources: AppSelectOption[] = [];\n @Input() selectOptionsResolver?: SelectOptionsResolver;\n readOnly = input(true);\n editableFormInput = input<EditableForm>({ cols: 2, blocks: [] }, { alias: 'editableForm' });\n submitFormRequest = output<EditableForm>();\n\n nextBlockId = 1;\n nextFieldId = 1;\n\n editableCols = signal<number>(2);\n editableBlocks = signal<EditableBlock[]>([]);\n editingSnapshot = signal<EditableForm | null>(null);\n isReadOnly = signal(true);\n selectedField = signal<EditableField | null>(null);\n focusNewFieldCode = signal<string | null>(null);\n propertiesWidth = signal(250);\n previewSchema = computed<FormSchema>(() => helperShowFormFromBuilder(this.editableBlocks(), this.editableCols()));\n\n private isResizingProperties = false;\n private resizeStartX = 0;\n private resizeStartWidth = 0;\n\n dependencyOptions = computed<Record<string, AppSelectOption[]>>(() => {\n const currentSelected = this.selectedField();\n const fieldOptions = this.editableBlocks()\n .flatMap(block => block.fields)\n .filter(field => field.code !== currentSelected?.code)\n .map(field => ({\n id: field.code,\n text: field.fieldData.label || field.fieldData.name\n }));\n\n return {\n fieldName: fieldOptions,\n 'optionsSource.key': this.optionSources,\n 'optionsSource.dependsOn': fieldOptions\n };\n });\n\n constructor() {\n effect(() => {\n const readOnly = this.readOnly();\n this.isReadOnly.set(readOnly);\n\n if (readOnly) {\n this.editingSnapshot.set(null);\n }\n });\n\n effect(() => {\n const sourceForm = this.editableFormInput();\n if (!this.isReadOnly() && this.editingSnapshot()) {\n return;\n }\n\n this.editableCols.set(sourceForm.cols ?? 2);\n this.editableBlocks.set(this.prepareBlocksForLocalState(sourceForm.blocks ?? []));\n });\n\n effect(() => {\n const blocks = this.editableBlocks();\n const hydratedBlocks = this.hydrateBlocks(blocks);\n\n if (hydratedBlocks !== blocks) {\n this.editableBlocks.set(hydratedBlocks);\n return;\n }\n\n this.syncLocalCounters(blocks);\n\n const selectedCode = this.selectedField()?.code;\n if (!selectedCode) return;\n\n const selectedField = blocks\n .flatMap(block => block.fields)\n .find(field => field.code === selectedCode);\n\n if (!selectedField) {\n this.selectedField.set(null);\n return;\n }\n\n if (selectedField !== this.selectedField()) {\n this.selectedField.set(selectedField);\n }\n });\n }\n\n addBlock() {\n const newBlockId = this.nextBlockId++;\n this.editableBlocks.update(blocks => [...blocks, {\n title: '',\n order: blocks.length + 1,\n code: `block_${newBlockId}`,\n subtitle: '',\n fields: []\n }]);\n }\n\n deleteBlock(code: string) {\n const removedBlock = this.editableBlocks().find(block => block.code === code);\n if (removedBlock && this.selectedField() && removedBlock.fields.some(field => field.code === this.selectedField()?.code)) {\n this.selectedField.set(null);\n this.focusNewFieldCode.set(null);\n }\n\n this.editableBlocks.update(blocks => blocks.filter(block => block.code !== code));\n }\n\n addField(blockCode: string, newFieldType: FieldConfig) {\n const fieldCode = `field_${this.nextFieldId++}`;\n const updatedField: EditableField = {\n code: fieldCode,\n order: 0,\n type: newFieldType.value,\n field: newFieldType,\n fieldData: {\n name: fieldCode,\n label: 'New field',\n type: newFieldType.value\n }\n };\n\n this.editableBlocks.update(blocks => blocks.map(block =>\n block.code === blockCode\n ? { ...block, fields: [...block.fields, updatedField] }\n : block\n ));\n\n this.selectedField.set(updatedField);\n this.focusNewFieldCode.set(updatedField.code);\n }\n\n selectField(field: EditableField | null): void {\n this.selectedField.set(field);\n this.focusNewFieldCode.set(null);\n }\n\n startPropertiesResize(event: MouseEvent): void {\n event.preventDefault();\n this.isResizingProperties = true;\n this.resizeStartX = event.clientX;\n this.resizeStartWidth = this.propertiesWidth();\n }\n\n @HostListener('document:mousemove', ['$event'])\n onPropertiesResize(event: MouseEvent): void {\n if (!this.isResizingProperties) return;\n\n const nextWidth = this.resizeStartWidth + (this.resizeStartX - event.clientX);\n this.propertiesWidth.set(Math.min(Math.max(nextWidth, 250), 600));\n }\n\n @HostListener('document:mouseup')\n stopPropertiesResize(): void {\n this.isResizingProperties = false;\n }\n\n printForm() {\n this.modalService.openFloatingModal(FormPreviewComponent, {\n data: {\n schema: helperShowFormFromBuilder(this.editableBlocks(), this.editableCols(), true),\n selectOptionsResolver: this.selectOptionsResolver\n },\n size: 'medium'\n });\n }\n\n submitForm() {\n const duplicatedFieldName = this.getDuplicatedFieldName();\n if (duplicatedFieldName) {\n this.tinyAlertService.warning(\n this.translateService.translate('form_builder.validation.duplicate_identifier', {\n identifier: duplicatedFieldName\n })\n );\n return;\n }\n const blocksWithOrderedFields = this.editableBlocks().map(block => ({\n ...block,\n fields: block.fields.map((field, index) => ({\n ...field,\n order: index + 1,\n fieldData: this.prepareFieldDataForSubmit(field.fieldData)\n }))\n }));\n this.editableBlocks.set(blocksWithOrderedFields);\n this.isReadOnly.set(true);\n this.editingSnapshot.set(null);\n this.submitFormRequest.emit(\n {\n cols: this.editableCols(),\n blocks: blocksWithOrderedFields.map(block => ({\n ...block,\n fields: block.fields.map(({ field, ...restField }) => restField)\n }))\n }\n );\n }\n\n private getDuplicatedFieldName(): string | null {\n const usedNames = new Set<string>();\n\n for (const field of this.editableBlocks().flatMap(block => block.fields)) {\n const fieldName = field.fieldData.name?.trim();\n if (!fieldName) continue;\n\n if (usedNames.has(fieldName)) {\n return fieldName;\n }\n usedNames.add(fieldName);\n }\n return null;\n }\n\n enableEditMode() {\n this.editingSnapshot.set(this.deepClone({\n cols: this.editableCols(),\n blocks: this.editableBlocks()\n }));\n this.isReadOnly.set(false);\n }\n\n discardChanges() {\n const snapshot = this.editingSnapshot();\n if (!snapshot) return;\n\n this.editableCols.set(snapshot.cols ?? 2);\n this.editableBlocks.set(this.prepareBlocksForLocalState(snapshot.blocks ?? []));\n this.selectedField.set(null);\n this.focusNewFieldCode.set(null);\n this.editingSnapshot.set(null);\n this.isReadOnly.set(true);\n }\n\n onBlockChange(index: number, updated: EditableBlock) {\n this.editableBlocks.update(blocks => blocks.map((block, currentIndex) =>\n currentIndex === index ? updated : block\n ));\n }\n\n onFieldChange(updatedField: FormField) {\n const selected = this.selectedField();\n if (!selected) return;\n\n const fieldCode = selected.code;\n let updatedSelected: EditableField | null = null;\n\n this.editableBlocks.update(blocks => blocks.map(block => ({\n ...block,\n fields: block.fields.map(field => {\n if (field.code !== fieldCode) return field;\n\n const updated = {\n ...field,\n type: updatedField.type,\n fieldData: updatedField\n };\n updatedSelected = updated;\n return updated;\n })\n })));\n\n if (updatedSelected) {\n this.selectedField.set(updatedSelected);\n }\n }\n\n private prepareBlocksForLocalState(blocks: EditableBlock[]): EditableBlock[] {\n return this.hydrateBlocks(this.deepClone(blocks));\n }\n\n private syncLocalCounters(blocks: EditableBlock[]): void {\n this.nextBlockId = this.getNextCodeId(blocks.map(block => block.code), 'block_');\n this.nextFieldId = this.getNextCodeId(\n blocks.flatMap(block => block.fields.map(field => field.code)),\n 'field_'\n );\n }\n\n private getNextCodeId(codes: string[], prefix: string): number {\n const maxId = codes.reduce((max, code) => {\n if (!code.startsWith(prefix)) return max;\n const value = Number(code.slice(prefix.length));\n return Number.isNaN(value) ? max : Math.max(max, value);\n }, 0);\n\n return maxId + 1;\n }\n\n private hydrateBlocks(blocks: EditableBlock[]): EditableBlock[] {\n let changed = false;\n const dependencyLabelByName = new Map(\n blocks\n .flatMap(block => block.fields)\n .map(field => [\n field.fieldData.name,\n field.fieldData.label || field.fieldData.name\n ])\n );\n\n const hydratedBlocks = blocks.map(block => {\n let blockChanged = false;\n const hydratedFields = block.fields.map(field => {\n let hydratedField = field;\n\n if (!field.field && field.type) {\n const fieldConfig = FIELDS_CONFIG.find(config => config.value === field.type);\n if (fieldConfig) {\n changed = true;\n blockChanged = true;\n hydratedField = {\n ...hydratedField,\n field: fieldConfig\n };\n }\n }\n\n const visibilityRules = hydratedField.fieldData.visibilityRules;\n if (!visibilityRules?.length) return hydratedField;\n\n let rulesChanged = false;\n const hydratedRules = visibilityRules.map(rule => {\n const dependencyLabel = dependencyLabelByName.get(rule.fieldName) ?? rule.fieldName;\n if (rule.fieldLabel === dependencyLabel) return rule;\n\n changed = true;\n blockChanged = true;\n rulesChanged = true;\n return {\n ...rule,\n fieldLabel: dependencyLabel\n };\n });\n\n return !rulesChanged\n ? hydratedField\n : {\n ...hydratedField,\n fieldData: {\n ...hydratedField.fieldData,\n visibilityRules: hydratedRules\n }\n };\n });\n\n return blockChanged ? { ...block, fields: hydratedFields } : block;\n });\n\n return changed ? hydratedBlocks : blocks;\n }\n\n private removeNullProperties<T>(value: T): T {\n if (value === null) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value\n .filter(item => item !== null)\n .map(item => this.removeNullProperties(item)) as T;\n }\n\n if (typeof value === 'object' && value !== undefined) {\n return Object.fromEntries(\n Object.entries(value)\n .filter(([, entryValue]) => entryValue !== null)\n .map(([key, entryValue]) => [key, this.removeNullProperties(entryValue)])\n ) as T;\n }\n\n return value;\n }\n\n private prepareFieldDataForSubmit(fieldData: FormField): FormField {\n const cleanFieldData = this.removeNullProperties(fieldData) as FormField;\n const optionsSource = cleanFieldData.optionsSource;\n\n if (!optionsSource) {\n return cleanFieldData;\n }\n\n const cleanOptionsSource = Object.fromEntries(\n Object.entries(optionsSource)\n .filter(([, value]) => value !== null && value !== undefined && value !== '')\n );\n\n if (!cleanOptionsSource['key']) {\n const { optionsSource: _optionsSource, ...restFieldData } = cleanFieldData;\n return restFieldData;\n }\n\n return {\n ...cleanFieldData,\n optionsSource: cleanOptionsSource as FormField['optionsSource']\n };\n }\n\n private deepClone<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map(item => this.deepClone(item)) as T;\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, entryValue]) => [key, this.deepClone(entryValue)])\n ) as T;\n }\n\n return value;\n }\n}\n","<div class=\"formeditor\" [class.focused]=\"!isReadOnly()\">\r\n <div class=\"formeditor-header\">\r\n <div style=\"flex: 1 1;\">\r\n {{formTitle}} \r\n \r\n <div class=\"cols-selector\"> \r\n @if (isReadOnly()) {\r\n {{editableCols()}}\r\n }@else {\r\n <ui-select [options]=\"[{id: 1, text: '1'}, {id: 2, text: '2'}, {id: 3, text: '3'}, {id: 4, text: '4'}]\" [ngModel]=\"editableCols()\" (ngModelChange)=\"editableCols.set($event)\"></ui-select> \r\n }\r\n col(s)</div>\r\n </div>\r\n @if (isReadOnly()) {\r\n @if (!disabled) {\r\n <ui-button color=\"black\" icon=\"ri-edit-line\" text=\"Editar\" (click)=\"enableEditMode()\"></ui-button>\r\n }\r\n } @else {\r\n <ui-button color=\"black\" type=\"bordered\" icon=\"ri-eye-line\" [text]=\"'form_builder.preview_form' | uicTranslate\" (click)=\"printForm()\"></ui-button>\r\n <ui-button color=\"black\" type=\"bordered\" icon=\"ri-close-line\" text=\"Descartar cambios\" (click)=\"discardChanges()\"></ui-button>\r\n <ui-button color=\"black\" icon=\"ri-check-line\" [text]=\"'form_builder.submit_form' | uicTranslate\" (click)=\"submitForm()\"></ui-button>\r\n }\r\n </div>\r\n @if (!isReadOnly()) {\r\n <div class=\"formeditor-body\">\r\n \r\n <!-- BLOCKS -->\r\n <div class=\"formeditor-overflow\">\r\n <div class=\"formeditor-workarea\">\r\n @for (block of editableBlocks(); track block.code; let i = $index) {\r\n <lib-block-editor \r\n [block]=\"block\"\r\n [selectedFieldId]=\"selectedField()?.code ?? null\"\n (blockChange)=\"onBlockChange(i, $event)\"\n (addFieldRequest)=\"addField(block.code, $event)\"\n (notifySelectedField)=\"selectField($event)\"\n (deleteBlock)=\"deleteBlock($event)\">\n </lib-block-editor>\n }\r\n <ui-button type=\"bordered\" icon=\"ri-add-line\" color=\"black\" [text]=\"'form_builder.add_block' | uicTranslate\" (click)=\"addBlock()\"></ui-button>\r\n </div>\r\n </div>\r\n <!-- PROPERTIES -->\r\n <div class=\"formeditor-properties\" [style.width.px]=\"propertiesWidth()\">\n <div\n class=\"formeditor-properties-resize\"\n (mousedown)=\"startPropertiesResize($event)\">\n </div>\n <h3>Propiedades</h3>\n <div class=\"formeditor-properties-form\">\n @if (selectedField() ) {\r\n <lib-field-editor \n [config]=\"selectedField()!\"\n [focusRequiredField]=\"focusNewFieldCode() === selectedField()?.code\"\n [options]=\"dependencyOptions()\"\n (fieldChange)=\"onFieldChange($event)\">\n </lib-field-editor>\n }@else{\r\n <div class=\"no-selected-field\">\r\n <i class=\"ri-edit-box-line\"></i>\r\n <p>{{'form_builder.select_field_to_edit' | uicTranslate}}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }@else {\r\n <div class=\"form-preview\">\r\n <ui-form-wrapper \n [schema]=\"previewSchema()\"\n [selectOptionsResolver]=\"selectOptionsResolver\"\n [showButtons]=\"false\">\n </ui-form-wrapper>\n </div>\r\n }\r\n </div>\r\n\r\n","import { Component, Inject, OnDestroy, ViewChild, ViewChildren, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { AppSelectOption } from '../../inputs/select/select.component';\nimport { MODAL_DATA } from '../../../services/modal.constant';\nimport { UicFormWrapperComponent } from '../../dynamic-form/form-wrapper/form-wrapper.component';\nimport { FormField, FormResult, uicFormValuesRecord } from '../../dynamic-form/form.models';\nimport { ConditionField, UicConditionDefinition } from '../rule-builder.component';\nimport { UicButtonComponent } from '../../button/button.component';\nimport { UicInputComponent } from '../../inputs/input/input.component';\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\nimport { UicTranslateService } from '../../../services/translate.service';\nimport { UiModalRef } from '../../../services/modaRef';\n\n@Component({\n selector: 'lib-rule-definirion',\n imports: [\n FormsModule,\n UicFormWrapperComponent,\n UicInputComponent,\n UicButtonComponent,\n UicTranslatePipe\n ],\n templateUrl: './rule-definirion.component.html',\n styleUrl: './rule-definirion.component.scss'\n})\nexport class RuleDefinirionComponent implements OnDestroy {\n\n newRule = false;\n fields: FormField[];\n\n conditions: UicConditionDefinition[] = [];\n selectedConditionReference: string | null = null;\n searchTerm = '';\n currentPage = 1;\n readonly pageSize = 5;\n customNamesEnabled;\n private readonly translate = inject(UicTranslateService);\n private readonly ref = inject(UiModalRef);\n private readonly languageSubscription: Subscription;\n\n mainConditionFieldsData: ConditionField[] = [];\n\n constructor(@Inject(MODAL_DATA) public data: {\n conditions: UicConditionDefinition[],\n customNamesEnabled: boolean,\n conditionOperators: AppSelectOption[],\n conditionFields: ConditionField[],\n selectedConditionReference?: string | number | null\n }) {\n this.customNamesEnabled = data.customNamesEnabled;\n this.conditions = data.conditions;\n this.mainConditionFieldsData = data.conditionFields;\n\n this.selectedConditionReference = data.selectedConditionReference == null\n ? null\n : String(data.selectedConditionReference);\n this.fields = this.buildFields();\n this.languageSubscription = this.translate.language$.subscribe(() => {\n this.fields = this.buildFields();\n });\n }\n\n ngOnDestroy(): void {\n this.languageSubscription.unsubscribe();\n }\n\n trackingField = '';\n initialValues = {};\n updateFormNewRule(fr:uicFormValuesRecord){\n const fcode = fr['fieldCode'];\n if ( this.trackingField === fcode) return;\n this.trackingField = fcode;\n this.initialValues = {...fr,value:''};\n const field = this.mainConditionFieldsData.find(f => f.id === fcode);\n \n this.fields = [...this.buildFields(field?.type||'text',field?.options)];\n }\n\n get filteredConditions(): UicConditionDefinition[] {\n const normalizedSearch = this.normalizeText(this.searchTerm);\n const conditions = !normalizedSearch\n ? this.conditions\n : this.conditions.filter(condition =>\n this.normalizeText(condition.description).includes(normalizedSearch) ||\n this.normalizeText(condition.fieldName).includes(normalizedSearch) ||\n this.normalizeText(condition.fieldCode).includes(normalizedSearch) ||\n this.normalizeText(condition.operatorName).includes(normalizedSearch) ||\n this.normalizeText(condition.operatorCode).includes(normalizedSearch) ||\n this.normalizeText(condition.value).includes(normalizedSearch)\n );\n\n return [...conditions].sort((left, right) => {\n const leftSelected = this.isSelected(left) ? 1 : 0;\n const rightSelected = this.isSelected(right) ? 1 : 0;\n return rightSelected - leftSelected;\n });\n }\n\n get paginatedConditions(): UicConditionDefinition[] {\n const start = (this.currentPage - 1) * this.pageSize;\n return this.filteredConditions.slice(start, start + this.pageSize);\n }\n\n get totalPages(): number {\n return Math.max(1, Math.ceil(this.filteredConditions.length / this.pageSize));\n }\n\n get canGoToPreviousPage(): boolean {\n return this.currentPage > 1;\n }\n\n get canGoToNextPage(): boolean {\n return this.currentPage < this.totalPages;\n }\n\n onSearchTermChange(): void {\n this.currentPage = 1;\n }\n\n goToPreviousPage(): void {\n if (!this.canGoToPreviousPage) {\n return;\n }\n\n this.currentPage -= 1;\n }\n\n goToNextPage(): void {\n if (!this.canGoToNextPage) {\n return;\n }\n\n this.currentPage += 1;\n }\n\n createAndSelectRule(fr:FormResult) {\n if (fr.result && fr.form){\n const fieldCode = fr.form['fieldCode'];\n const operatoCode = fr.form['operatorCode'];\n const nf: UicConditionDefinition = {\n id: 0,\n description: fr.form['description'] ?? `${this.data.conditionFields.find(f => f.id === fieldCode)?.text ?? fieldCode} ${this.data.conditionOperators.find(o => o.id === operatoCode)?.text ?? operatoCode} ${fr.form['value']}`,\n fieldCode: fieldCode,\n fieldName: this.data.conditionFields.find(f => f.id === fieldCode)?.text ?? '',\n operatorCode: operatoCode,\n operatorName: this.data.conditionOperators.find(o => o.id === operatoCode)?.text ?? '',\n value: fr.form['value']\n };\n this.ref.closeFloating(nf);\n }\n }\n\n select(condition: UicConditionDefinition){\n this.ref.closeFloating(condition);\n }\n\n isSelected(condition: UicConditionDefinition): boolean {\n return this.selectedConditionReference === String(this.getConditionReference(condition));\n }\n\n highlightSearch(value: string | null | undefined): string {\n const text = String(value ?? '');\n const query = this.searchTerm.trim();\n if (!query) {\n return this.escapeHtml(text);\n }\n\n const escapedQuery = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escapedQuery})`, 'gi');\n return this.escapeHtml(text).replace(regex, '<mark>$1</mark>');\n }\n\n private buildFields(type:'text'|'number'|'date'|'catalog' = 'text', options?:AppSelectOption[]): FormField[] {\n const fields:FormField[] = [\n {\n name: 'fieldCode',\n label: this.translate.translate('rule_builder.definition.form.field'),\n type: 'select',\n options: this.data.conditionFields,\n required: true,\n selectSearchEnabled: true,\n colSpan: 2\n },\n {\n name: 'operatorCode',\n label: this.translate.translate('rule_builder.definition.form.operator'),\n type: 'select',\n options: this.data.conditionOperators,\n required: true\n }\n ];\n if (this.customNamesEnabled) {\n fields.unshift({\n name: 'description',\n label: this.translate.translate('rule_builder.definition.form.description'),\n type: 'text',\n required: true,\n colSpan: 2\n });\n }\n \n if (type === 'catalog'){\n fields.push(\n {\n name: 'value',\n label: this.translate.translate('rule_builder.definition.form.value'),\n type: 'select',\n options: options,\n required: true\n });\n } else{\n fields.push(\n {\n name: 'value',\n label: this.translate.translate('rule_builder.definition.form.value'),\n type,\n required: true\n });\n }\n\n return fields;\n }\n\n private normalizeText(value: string | null | undefined): string {\n return String(value ?? '')\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .trim()\n .toLowerCase();\n }\n\n private escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n private getConditionReference(condition: UicConditionDefinition): string | number {\n return condition.id === 0 ? (condition.temporalId ?? '') : condition.id;\n }\n}\n","\n@if (newRule) {\n <ui-form-wrapper #formWrapper \n (formChange)=\"updateFormNewRule($event)\"\n (formSubmit)=\"createAndSelectRule($event)\" \n [initialValues]=\"initialValues\"\n [fields]=\"fields\" \n [cols]=\"2\"></ui-form-wrapper>\n <div class=\"condition-btns\">\n <ui-button icon=\"ri-arrow-left-line\" (click)=\"newRule = false\" color=\"black\" type=\"bordered\">{{ 'rule_builder.definition.cancel_and_back' | uicTranslate }}</ui-button>\n <ui-button (click)=\"formWrapper.submit()\" icon=\"ri-check-line\" color=\"black\">{{ 'rule_builder.definition.create_and_select' | uicTranslate }}</ui-button>\n </div>\n} @else {\n <div class=\"condition-searcher\">\n <ui-input>\n <input [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchTermChange()\" [placeholder]=\"'rule_builder.definition.search_placeholder' | uicTranslate\" type=\"text\">\n </ui-input>\n <ui-button (click)=\"newRule = true\" color=\"black\">{{ 'rule_builder.definition.new_rule' | uicTranslate }}</ui-button>\n </div>\n\n @if (paginatedConditions.length > 0) {\n @for (condition of paginatedConditions; track $index) {\n <div class=\"condition\" [class.condition-selected]=\"isSelected(condition)\">\n <i class=\"ri-align-item-horizontal-center-line\"></i>\n <div style=\"flex: 1 1;\">\n <div class=\"condition-title\"><span [innerHTML]=\"highlightSearch(condition.description)\"></span></div>\n @if (customNamesEnabled) {\n <div class=\"condition-body\">\n <span class=\"condition-field\" [innerHTML]=\"highlightSearch(condition.fieldName)\"></span>\n <span class=\"condition-operator\" [innerHTML]=\"highlightSearch(condition.operatorName)\"></span>\n <span class=\"condition-value\" [innerHTML]=\"highlightSearch(condition.value)\"></span>\n </div>\n }\n </div>\n @if (!isSelected(condition)) {\n <ui-button (click)=\"select(condition)\" color=\"primary\" size=\"s\" type=\"bordered\">{{ 'common.select' | uicTranslate }}</ui-button>\n }\n </div>\n }\n } @else {\n <div class=\"condition\">\n <div class=\"condition-emptytext\">\n {{ 'rule_builder.definition.no_results' | uicTranslate }}\n </div>\n </div>\n }\n\n <div class=\"condition-pagination\">\n <ui-button [disabled]=\"!canGoToPreviousPage\" (click)=\"goToPreviousPage()\" color=\"black\" size=\"s\" type=\"bordered\">{{ 'rule_builder.definition.previous' | uicTranslate }}</ui-button>\n <div><b>{{ currentPage }}</b> / {{ totalPages }}</div>\n <ui-button [disabled]=\"!canGoToNextPage\" (click)=\"goToNextPage()\" color=\"black\" size=\"s\" type=\"bordered\">{{ 'rule_builder.definition.next' | uicTranslate }}</ui-button>\n </div>\n}\n","import { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { AppSelectOption } from '../inputs/select/select.component';\r\nimport { UicToolTipDirective } from '../../directives/tool-tip.directive';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\nimport { UicTranslateService } from '../../services/translate.service';\r\nimport { UicModalService } from '../../services/modal.service';\r\nimport { RuleDefinirionComponent } from './rule-definirion/rule-definirion.component';\r\n\r\n@Component({\r\n selector: 'ui-rule-builder',\r\n imports: [\r\n CommonModule,\r\n UicButtonComponent,\r\n FormsModule,\r\n UicToolTipDirective,\r\n UicTranslatePipe\r\n ],\r\n templateUrl: './rule-builder.component.html',\r\n styleUrl: './rule-builder.component.scss'\r\n})\r\nexport class UicRuleBuilderComponent implements OnInit {\r\n private conditionsInitialized = false;\r\n private emitConditionsOnInit = false;\r\n private emitRuleDefinitionOnInit = false;\r\n private conditionsEmitScheduled = false;\r\n private ruleDefinitionEmitScheduled = false;\r\n private _conditions: UicConditionDefinition[] = [];\r\n \r\n @Input() disabled = false;\r\n @Input() customNamesEnabled = false;\r\n @Input()\r\n set conditions(value: UicConditionDefinition[] | null | undefined) {\r\n this._conditions = Array.isArray(value) ? value.map(condition => ({ ...condition })) : [];\r\n const conditionsNormalized = this.refreshAvailableConditions();\r\n const syncResult = this.syncConditionsWithPersistedConditions();\r\n this.syncNextTemporalConditionId();\r\n if (this.conditionsInitialized && (conditionsNormalized || syncResult.conditionsCleaned)) {\r\n this.scheduleConditionsStateEmit();\r\n }\r\n if (!this.conditionsInitialized && (conditionsNormalized || syncResult.conditionsCleaned)) {\r\n this.emitConditionsOnInit = true;\r\n }\r\n if (this.conditionsInitialized && syncResult.referencesUpdated) {\r\n this.scheduleRuleDefinitionStateEmit();\r\n }\r\n if (!this.conditionsInitialized && syncResult.referencesUpdated) {\r\n this.emitRuleDefinitionOnInit = true;\r\n }\r\n this.conditionsInitialized = true;\r\n }\r\n\r\n get conditions(): UicConditionDefinition[] {\r\n return this._conditions;\r\n }\r\n\r\n @Input() conditionOperators: AppSelectOption[] = [];\r\n @Input() conditionFields: ConditionField[] = [];\r\n \r\n conditionLabels: Record<string, string> = {};\r\n editing = false;\r\n private nextTemporalConditionId = 1;\r\n private externalRuleDefinition: RuleBuilderValue = this.createEmptyRuleBuilderValue();\r\n\r\n @Input() ruleTitle = '';\r\n @Input()\r\n set ruleDefinition(value: RuleBuilderValue | null | undefined) {\r\n const normalizedValue = this.normalizeRuleBuilderValue(value);\r\n if (this.areRuleBuilderValuesEqual(normalizedValue, this.externalRuleDefinition)) {\r\n return;\r\n }\r\n\r\n this.externalRuleDefinition = normalizedValue;\r\n this.editorRules = this.getRulesFromDefinition(normalizedValue.definition);\r\n const syncResult = this.syncConditionsWithPersistedConditions();\r\n this.syncNextTemporalConditionId();\r\n if (this.conditionsInitialized && syncResult.conditionsCleaned) {\r\n this.scheduleConditionsStateEmit();\r\n }\r\n if (this.conditionsInitialized && syncResult.referencesUpdated) {\r\n this.scheduleRuleDefinitionStateEmit();\r\n }\r\n if (!this.conditionsInitialized && syncResult.conditionsCleaned) {\r\n this.emitConditionsOnInit = true;\r\n }\r\n if (!this.conditionsInitialized && syncResult.referencesUpdated) {\r\n this.emitRuleDefinitionOnInit = true;\r\n }\r\n }\r\n\r\n get ruleDefinition(): RuleBuilderValue {\r\n return this.externalRuleDefinition;\r\n }\r\n\r\n @Output() ruleDefinitionChange = new EventEmitter<RuleBuilderValue>();\r\n @Output() conditionsChange = new EventEmitter<UicConditionDefinition[]>();\r\n\r\n editorRules: Rule[] = [];\r\n\r\n private readonly translate = inject(UicTranslateService);\r\n private readonly modal = inject(UicModalService);\r\n\r\n get resolvedTitle(): string {\r\n return this.ruleTitle || this.translate.translate('rule_builder.title');\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.conditionsInitialized) {\r\n this.emitConditionsOnInit = this.refreshAvailableConditions();\r\n this.conditionsInitialized = true;\r\n }\r\n if (this.editorRules.length === 0 && this.ruleDefinition.definition.trim()) {\r\n this.editorRules = this.getRulesFromDefinition(this.ruleDefinition.definition);\r\n }\r\n const syncResult = this.syncConditionsWithPersistedConditions();\r\n this.syncNextTemporalConditionId();\r\n if (syncResult.conditionsCleaned) {\r\n this.emitConditionsOnInit = true;\r\n }\r\n if (syncResult.referencesUpdated) {\r\n this.emitRuleDefinitionOnInit = true;\r\n }\r\n if (this.emitConditionsOnInit) {\r\n this.scheduleConditionsStateEmit();\r\n this.emitConditionsOnInit = false;\r\n }\r\n if (this.emitRuleDefinitionOnInit) {\r\n this.scheduleRuleDefinitionStateEmit();\r\n this.emitRuleDefinitionOnInit = false;\r\n }\r\n }\r\n\r\n addRule(rules: Rule[] = this.editorRules): void {\r\n const newRuleIndex = this.appendExpression(rules, this.createConditionRule());\r\n this.syncRuleDefinition();\r\n this.manageRules(this.editorRules, newRuleIndex);\r\n }\r\n\r\n addGroup(rules: Rule[] = this.editorRules): void {\r\n const newRuleIndex = this.appendExpression(rules, this.createGroupRule());\r\n this.syncRuleDefinition();\r\n const createdGroup = this.editorRules[newRuleIndex];\r\n if (createdGroup?.type === 'group') {\r\n this.manageRules(createdGroup.rules ?? [], 0);\r\n }\r\n }\r\n\r\n changeOperator(rules: Rule[], idx: number): void {\r\n const rule = rules[idx];\r\n if (rule?.type !== 'operator') {\r\n return;\r\n }\r\n\r\n rule.value = rule.value === 'AND' ? 'OR' : 'AND';\r\n }\r\n\r\n removeRule(rules: Rule[], idx: number): void {\r\n const rule = rules[idx];\r\n if (!rule || rule.type === 'operator') {\r\n return;\r\n }\r\n\r\n rules.splice(idx, 1);\r\n this.syncRuleDefinition();\r\n }\r\n\r\n manageRules(rules: Rule[], idx: number): void {\r\n const targetRule = rules[idx];\r\n if (targetRule?.type !== 'condition') {\r\n return;\r\n }\r\n\r\n this.modal.openFloatingModal(RuleDefinirionComponent, {\r\n title: this.translate.translate('rule_builder.rules_management'),\r\n data: {\r\n conditions: this.conditions,\r\n conditionOperators: this.conditionOperators,\r\n conditionFields: this.conditionFields,\r\n selectedConditionReference: targetRule.value ?? null,\r\n },\r\n size:'medium'\r\n }).afterClosed().subscribe( r => {\r\n if (r.status) {\r\n const condition = r.data as UicConditionDefinition;\r\n const conditionId = this.upsertCondition(condition);\r\n targetRule.value = conditionId;\r\n this.syncRuleDefinition();\r\n }\r\n });\r\n }\r\n\r\n print(): void {\r\n const normalizedRules = this.normalizeRules(this.cloneRules(this.editorRules));\r\n this.editorRules = normalizedRules;\r\n this.markRulesAsSaved(this.editorRules);\r\n this.emitRuleDefinitionState();\r\n this.editing = false;\r\n }\r\n\r\n reset(): void {\r\n this.editorRules = this.getRulesFromDefinition(this.ruleDefinition.definition);\r\n this.editing = false;\r\n }\r\n\r\n getOutput(): RuleOutput {\r\n this.editorRules = this.normalizeRules(this.cloneRules(this.editorRules));\r\n return this.buildRuleOutput();\r\n }\r\n\r\n getConditionLabel(value: string | number | null | undefined): string {\r\n return this.resolveConditionLabel(value) ?? '';\r\n }\r\n\r\n isConditionLabelPending(value: string | number | null | undefined): boolean {\r\n if (value == null || value === '') {\r\n return false;\r\n }\r\n\r\n return !this.hasConditionReference(value);\r\n }\r\n\r\n getConditionDetailTip(value: string | number | null | undefined): string {\r\n const matchedCondition = this.conditions.find(condition => String(this.getConditionReference(condition)) === String(value));\r\n if (!matchedCondition) {\r\n return '';\r\n }\r\n\r\n return [\r\n matchedCondition.fieldName,\r\n matchedCondition.operatorName,\r\n matchedCondition.value\r\n ].filter(Boolean).join(' ');\r\n }\r\n\r\n getOperatorLabel(value: Rule['value']): string {\r\n const normalizedValue = value === 'OR' ? 'OR' : 'AND';\r\n const translationKey = normalizedValue === 'AND'\r\n ? 'rule_builder.operators.and'\r\n : 'rule_builder.operators.or';\r\n return this.translate.translate(translationKey);\r\n }\r\n\r\n private appendExpression(rules: Rule[], expression: Rule): number {\r\n const normalizedRules = this.normalizeRules(rules, true);\r\n rules.length = 0;\r\n rules.push(...normalizedRules);\r\n\r\n if (rules.length > 0) {\r\n rules.push({ type: 'operator', value: 'AND' });\r\n }\r\n\r\n rules.push(expression);\r\n return rules.length - 1;\r\n }\r\n\r\n private syncRuleDefinition(): void {\r\n this.editorRules = this.normalizeRules(this.editorRules, true);\r\n }\r\n\r\n private createConditionRule(): Rule {\r\n return {\r\n type: 'condition',\r\n value: null,\r\n unsaved: true\r\n };\r\n }\r\n\r\n private createGroupRule(): Rule {\r\n return {\r\n type: 'group',\r\n rules: [this.createConditionRule()],\r\n unsaved: true\r\n };\r\n }\r\n\r\n private collectConditionValues(rules: Rule[]): string[] {\r\n return rules.flatMap(rule => {\r\n if (rule.type === 'condition' && rule.value) {\r\n return [String(rule.value)];\r\n }\r\n\r\n if (rule.type === 'group' && rule.rules) {\r\n return this.collectConditionValues(rule.rules);\r\n }\r\n\r\n return [];\r\n });\r\n }\r\n\r\n private normalizeRules(rules: Rule[], preserveIncompleteUnsaved = false): Rule[] {\r\n const normalized: Rule[] = [];\r\n let expectsExpression = true;\r\n\r\n for (const rule of rules) {\r\n if (rule.type === 'condition') {\r\n const rawValue = rule.value;\r\n const normalizedValue = typeof rawValue === 'string' ? rawValue.trim() : rawValue;\r\n if (!expectsExpression) {\r\n continue;\r\n }\r\n\r\n if (normalizedValue == null || normalizedValue === '') {\r\n if (preserveIncompleteUnsaved && rule.unsaved) {\r\n normalized.push({\r\n ...rule,\r\n value: normalizedValue\r\n });\r\n expectsExpression = false;\r\n }\r\n continue;\r\n }\r\n\r\n rule.value = normalizedValue;\r\n normalized.push(rule);\r\n expectsExpression = false;\r\n continue;\r\n }\r\n\r\n if (rule.type === 'group') {\r\n const groupRules = this.normalizeRules(rule.rules ?? [], preserveIncompleteUnsaved);\r\n if (groupRules.length === 0 || !this.isExpression(groupRules[0]) || !expectsExpression) {\r\n continue;\r\n }\r\n\r\n rule.rules = groupRules;\r\n normalized.push(rule);\r\n expectsExpression = false;\r\n continue;\r\n }\r\n\r\n if (rule.type === 'operator') {\r\n const value = rule.value === 'OR' ? 'OR' : 'AND';\r\n if (expectsExpression) {\r\n continue;\r\n }\r\n\r\n rule.value = value;\r\n normalized.push(rule);\r\n expectsExpression = true;\r\n }\r\n }\r\n\r\n if (normalized.at(-1)?.type === 'operator') {\r\n normalized.pop();\r\n }\r\n\r\n return normalized;\r\n }\r\n\r\n private cloneRules(rules: Rule[]): Rule[] {\r\n return rules.map(rule => ({\r\n ...rule,\r\n rules: rule.rules ? this.cloneRules(rule.rules) : undefined\r\n }));\r\n }\r\n\r\n private buildExpression(rules: Rule[]): string {\r\n return this.normalizeRules(rules)\r\n .map(rule => {\r\n if (rule.type === 'condition') {\r\n return `{{${rule.value}}}`;\r\n }\r\n\r\n if (rule.type === 'operator') {\r\n return rule.value ?? 'AND';\r\n }\r\n\r\n const innerExpression = this.buildExpression(rule.rules ?? []);\r\n return `( ${innerExpression} )`;\r\n })\r\n .join(' ');\r\n }\r\n\r\n private isExpression(rule: Rule): boolean {\r\n return rule.type === 'condition' || rule.type === 'group';\r\n }\r\n\r\n private parseExpression(expression: string): Rule[] {\r\n const tokens = this.tokenizeExpression(expression);\r\n const { rules } = this.parseTokens(tokens);\r\n return this.normalizeRules(rules);\r\n }\r\n\r\n private getRulesFromDefinition(definition: string): Rule[] {\r\n const rules = definition.trim()\r\n ? this.parseExpression(definition)\r\n : this.normalizeRules([]);\r\n this.markRulesAsSaved(rules);\r\n return rules;\r\n }\r\n\r\n private markRulesAsSaved(rules: Rule[]): void {\r\n for (const rule of rules) {\r\n rule.unsaved = false;\r\n if (rule.type === 'group' && rule.rules) {\r\n this.markRulesAsSaved(rule.rules);\r\n }\r\n }\r\n }\r\n\r\n private tokenizeExpression(expression: string): string[] {\r\n const matches = expression.match(/\\{\\{[^}]+\\}\\}|\\(|\\)|\\bAND\\b|\\bOR\\b/gi);\r\n return matches ?? [];\r\n }\r\n\r\n private parseTokens(tokens: string[], startIndex = 0): { rules: Rule[]; nextIndex: number } {\r\n const rules: Rule[] = [];\r\n let index = startIndex;\r\n\r\n while (index < tokens.length) {\r\n const token = tokens[index];\r\n const normalizedToken = token.toUpperCase();\r\n\r\n if (token === ')') {\r\n break;\r\n }\r\n\r\n if (token === '(') {\r\n const groupResult = this.parseTokens(tokens, index + 1);\r\n rules.push({ type: 'group', rules: groupResult.rules });\r\n index = groupResult.nextIndex + 1;\r\n continue;\r\n }\r\n\r\n if (normalizedToken === 'AND' || normalizedToken === 'OR') {\r\n rules.push({ type: 'operator', value: normalizedToken });\r\n index++;\r\n continue;\r\n }\r\n\r\n const conditionMatch = token.match(/^\\{\\{\\s*(.*?)\\s*\\}\\}$/);\r\n if (conditionMatch) {\r\n rules.push({ type: 'condition', value: this.resolveConditionValue(conditionMatch[1]) });\r\n }\r\n\r\n index++;\r\n }\r\n\r\n return { rules, nextIndex: index };\r\n }\r\n\r\n private resolveConditionValue(rawValue: string): string | number {\r\n const trimmedValue = rawValue.trim();\r\n const matchedCondition = this.conditions.find(condition => String(this.getConditionReference(condition)) === trimmedValue);\r\n return matchedCondition ? this.getConditionReference(matchedCondition) : trimmedValue;\r\n }\r\n\r\n private resolveConditionLabel(value: string | number | null | undefined): string | null {\r\n const matchedCondition = this.conditions.find(condition => String(this.getConditionReference(condition)) === String(value));\r\n return matchedCondition?.description ?? null;\r\n }\r\n\r\n private hasConditionReference(value: string | number): boolean {\r\n return this.conditions.some(condition => String(this.getConditionReference(condition)) === String(value));\r\n }\r\n\r\n private upsertCondition(condition: UicConditionDefinition): string | number {\r\n const normalizedCondition = { ...condition };\r\n\r\n if (normalizedCondition.id === 0) {\r\n // Buscar si ya existe una condición con los mismos valores\r\n const existingCondition = this.conditions.find(c => \r\n c.fieldCode === normalizedCondition.fieldCode &&\r\n c.operatorCode === normalizedCondition.operatorCode &&\r\n c.value === normalizedCondition.value\r\n );\r\n\r\n if (existingCondition) {\r\n // Si existe, retornar la referencia de la condición existente\r\n return this.getConditionReference(existingCondition);\r\n }\r\n\r\n // Si no existe, generar un nuevo temporalId\r\n normalizedCondition.temporalId = normalizedCondition.temporalId ?? this.getNextTemporalConditionId();\r\n }\r\n\r\n const conditionReference = this.getConditionReference(normalizedCondition);\r\n const existingIndex = this.conditions.findIndex(item => String(this.getConditionReference(item)) === String(conditionReference));\r\n if (existingIndex >= 0) {\r\n this._conditions[existingIndex] = normalizedCondition;\r\n } else {\r\n this._conditions = [...this._conditions, normalizedCondition];\r\n }\r\n\r\n this.refreshAvailableConditions();\r\n this.scheduleConditionsStateEmit();\r\n\r\n return conditionReference;\r\n }\r\n\r\n private buildRuleOutput(): RuleOutput {\r\n const definition = this.buildExpression(this.editorRules);\r\n const usedConditionReferences = new Set(this.collectConditionValues(this.editorRules));\r\n const rulesToCreate = this.conditions\r\n .filter(condition => condition.id === 0 && !!condition.temporalId && usedConditionReferences.has(String(this.getConditionReference(condition))))\r\n .map(condition => ({\r\n temporalId: condition.temporalId as string,\r\n fieldCode: condition.fieldCode,\r\n operatorCode: condition.operatorCode,\r\n value: condition.value,\r\n description: condition.description\r\n }));\r\n\r\n return {\r\n definition,\r\n rulesToCreate\r\n };\r\n }\r\n\r\n private emitRuleDefinitionState(): void {\r\n const output = this.buildRuleOutput();\r\n this.externalRuleDefinition = output;\r\n this.ruleDefinitionChange.emit(output);\r\n }\r\n\r\n private emitConditionsState(): void {\r\n this.conditionsChange.emit(this._conditions.map(condition => ({ ...condition })));\r\n }\r\n\r\n private scheduleRuleDefinitionStateEmit(): void {\r\n if (this.ruleDefinitionEmitScheduled) {\r\n return;\r\n }\r\n\r\n this.ruleDefinitionEmitScheduled = true;\r\n queueMicrotask(() => {\r\n this.ruleDefinitionEmitScheduled = false;\r\n this.emitRuleDefinitionState();\r\n });\r\n }\r\n\r\n private scheduleConditionsStateEmit(): void {\r\n if (this.conditionsEmitScheduled) {\r\n return;\r\n }\r\n\r\n this.conditionsEmitScheduled = true;\r\n queueMicrotask(() => {\r\n this.conditionsEmitScheduled = false;\r\n this.emitConditionsState();\r\n });\r\n }\r\n\r\n private normalizeRuleBuilderValue(value: RuleBuilderValue | null | undefined): RuleBuilderValue {\r\n if (!value) {\r\n return this.createEmptyRuleBuilderValue();\r\n }\r\n\r\n return {\r\n definition: String(value.definition ?? ''),\r\n rulesToCreate: Array.isArray(value.rulesToCreate)\r\n ? value.rulesToCreate.map(rule => ({ ...rule }))\r\n : []\r\n };\r\n }\r\n\r\n private createEmptyRuleBuilderValue(): RuleBuilderValue {\r\n return {\r\n definition: '',\r\n rulesToCreate: []\r\n };\r\n }\r\n\r\n private areRuleBuilderValuesEqual(left: RuleBuilderValue, right: RuleBuilderValue): boolean {\r\n return left.definition === right.definition\r\n && JSON.stringify(left.rulesToCreate) === JSON.stringify(right.rulesToCreate);\r\n }\r\n\r\n private refreshAvailableConditions(): boolean {\r\n let changed = false;\r\n\r\n this._conditions = this._conditions.map(condition => {\r\n if (condition.id !== 0 || condition.temporalId) {\r\n return condition;\r\n }\r\n\r\n changed = true;\r\n return {\r\n ...condition,\r\n temporalId: this.getNextTemporalConditionId()\r\n };\r\n });\r\n\r\n this.conditionLabels = this._conditions.reduce<Record<string, string>>((labels, condition) => {\r\n labels[String(this.getConditionReference(condition))] = condition.description;\r\n return labels;\r\n }, {});\r\n\r\n return changed;\r\n }\r\n\r\n private syncConditionsWithPersistedConditions(): {\r\n referencesUpdated: boolean;\r\n conditionsCleaned: boolean;\r\n } {\r\n const persistedConditionsByTemporalId = new Map<string, UicConditionDefinition>(\r\n this._conditions\r\n .filter(condition => condition.id !== 0 && !!condition.temporalId)\r\n .map(condition => [String(condition.temporalId), condition])\r\n );\r\n\r\n if (persistedConditionsByTemporalId.size === 0) {\r\n return {\r\n referencesUpdated: false,\r\n conditionsCleaned: false\r\n };\r\n }\r\n\r\n const referencesUpdated = this.replaceConditionReferences(this.editorRules, persistedConditionsByTemporalId);\r\n const previousLength = this._conditions.length;\r\n this._conditions = this._conditions.filter(condition => {\r\n return condition.id !== 0\r\n || !condition.temporalId\r\n || !persistedConditionsByTemporalId.has(String(condition.temporalId));\r\n });\r\n\r\n return {\r\n referencesUpdated,\r\n conditionsCleaned: previousLength !== this._conditions.length\r\n };\r\n }\r\n\r\n private replaceConditionReferences(\r\n rules: Rule[],\r\n persistedConditionsByTemporalId: Map<string, UicConditionDefinition>\r\n ): boolean {\r\n let updated = false;\r\n\r\n for (const rule of rules) {\r\n if (rule.type === 'condition' && typeof rule.value === 'string') {\r\n const persistedCondition = persistedConditionsByTemporalId.get(rule.value);\r\n if (persistedCondition) {\r\n rule.value = persistedCondition.id;\r\n rule.unsaved = false;\r\n updated = true;\r\n }\r\n }\r\n\r\n if (rule.type === 'group' && rule.rules) {\r\n updated = this.replaceConditionReferences(rule.rules, persistedConditionsByTemporalId) || updated;\r\n }\r\n }\r\n\r\n return updated;\r\n }\r\n\r\n private getConditionReference(condition: UicConditionDefinition): string | number {\r\n return condition.id === 0 ? (condition.temporalId ?? '') : condition.id;\r\n }\r\n\r\n private getNextTemporalConditionId(): string {\r\n const temporalId = `temp_${this.nextTemporalConditionId}`;\r\n this.nextTemporalConditionId += 1;\r\n return temporalId;\r\n }\r\n\r\n private syncNextTemporalConditionId(): void {\r\n const references = [\r\n ...this.conditions\r\n .flatMap(condition => [String(this.getConditionReference(condition)), String(condition.temporalId ?? '')])\r\n .filter(reference => reference !== ''),\r\n ...this.collectConditionValues(this.editorRules)\r\n ];\r\n\r\n const nextId = references.reduce((maxId, reference) => {\r\n const match = reference.match(/^temp_(\\d+)$/);\r\n if (!match) {\r\n return maxId;\r\n }\r\n\r\n return Math.max(maxId, Number(match[1]) || 0);\r\n }, 0);\r\n\r\n this.nextTemporalConditionId = nextId + 1;\r\n }\r\n}\r\nexport interface RuleBuilderValue{\r\n definition: string;\r\n rulesToCreate: RuleToCreate[];\r\n}\r\nexport type RuleOutput = RuleBuilderValue;\r\nexport interface RuleToCreate{\r\n temporalId: string;\r\n fieldCode: string;\r\n operatorCode: string;\r\n value: string;\r\n description: string;\r\n}\r\nexport interface Rule {\r\n type: 'condition' | 'operator' | 'group';\r\n value?: 'AND' | 'OR' | string | number | null;\r\n rules?: Rule[];\r\n unsaved?: boolean;\r\n}\r\n\r\nexport interface UicConditionDefinition{\r\n id: number;\r\n fieldName: string;\r\n fieldCode: string;\r\n operatorName: string;\r\n operatorCode: string;\r\n value: string;\r\n description: string;\r\n temporalId?: string;\r\n}\r\n\r\nexport interface ConditionField{ \r\n id:number|string; \r\n text:string; \r\n type?:'number'|'text'|'date'|'catalog'; \r\n options?:AppSelectOption[]\r\n}","\r\n<div class=\"rule-tools\">\r\n <div class=\"rule-tools-title\">\r\n {{resolvedTitle}}\r\n </div>\r\n @if (editing) {\r\n <ui-button [uiTooltip]=\"'rule_builder.add_rule_tip' | uicTranslate\" (click)=\"addRule()\" size=\"s\" type=\"bordered\" icon=\"ri-add-line\">{{'rule_builder.add_rule' | uicTranslate}}</ui-button>\r\n <ui-button [uiTooltip]=\"'rule_builder.add_group_tip' | uicTranslate\" (click)=\"addGroup()\" size=\"s\" type=\"bordered\" icon=\"ri-add-line\">{{'rule_builder.add_group' | uicTranslate}}</ui-button>\r\n }@else {\r\n @if (!disabled) {\r\n <ui-button [uiTooltip]=\"'rule_builder.edit_tip' | uicTranslate\" (click)=\"editing=true\" size=\"s\" type=\"bordered\" icon=\"ri-edit-line\">{{'rule_builder.edit' | uicTranslate}}</ui-button>\r\n }\r\n }\r\n</div>\r\n<div class=\"rule-container\" [class.focused-box]=\"editing\">\r\n <div class=\"rule-container-workspace\">\r\n @if (editing) {\r\n <ng-container\r\n *ngTemplateOutlet=\"rulesTemplate; context: { rules: editorRules, isGroup: false }\">\r\n </ng-container>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"readOnlyTemplate\"></ng-container>\r\n }\r\n @if (editorRules.length==0) {\r\n <div class=\"empty-rule-msg\">{{'rule_builder.no_rules' | uicTranslate}}</div>\r\n }\r\n </div>\r\n @if (editing) {\r\n <div class=\"rule-btns\">\r\n <ui-button color=\"black\" type=\"bordered\" [uiTooltip]=\"'rule_builder.reset_tip' | uicTranslate\" (click)=\"reset()\" >{{'rule_builder.reset' | uicTranslate}}</ui-button>\r\n <ui-button color=\"black\" [uiTooltip]=\"'rule_builder.save_tip' | uicTranslate\" (click)=\"print()\">{{'rule_builder.save' | uicTranslate}}</ui-button>\r\n </div>\r\n }\r\n</div>\r\n\r\n<ng-template #rulesTemplate let-rules=\"rules\" let-isGroup=\"isGroup\">\r\n @for (rule of rules; track $index; let i = $index) {\r\n @if (rule.type === 'condition') {\r\n <div class=\"rule-condition\" [class.rule-unsaved]=\"rule.unsaved\">\r\n <div [uiTooltip]=\"'rule_builder.edit_condition_tip' | uicTranslate\" (click)=\"manageRules(rules, i)\">\r\n <div\r\n class=\"condition-box\"\r\n [class.condition-box-empty]=\"rule.value == null || rule.value === ''\"\r\n [class.condition-box-loading]=\"isConditionLabelPending(rule.value)\">\r\n @if (rule.value == null || rule.value === '') {\r\n {{ 'rule_builder.select_condition' | uicTranslate }}\r\n } @else if (isConditionLabelPending(rule.value)) {\r\n <span class=\"condition-box-loader\" aria-hidden=\"true\"></span>\r\n } @else {\r\n {{ getConditionLabel(rule.value) }}\r\n }\r\n </div>\r\n </div>\r\n <ui-button [uiTooltip]=\"'rule_builder.delete_rule_tip' | uicTranslate\" (click)=\"removeRule(rules, i)\" [iconOnly]=\"true\" size=\"s\" type=\"ghost\" icon=\"ri-delete-bin-line\" color=\"red\"></ui-button>\r\n </div>\r\n }\r\n @if (rule.type === 'operator') {\r\n <div [uiTooltip]=\"'rule_builder.toggle_operator_tip' | uicTranslate\"\r\n (click)=\"changeOperator(rules, i)\"\r\n class=\"rule-operator {{rule.value === 'AND' ? 'op-and' : 'op-or'}}\">\r\n {{ getOperatorLabel(rule.value) }}\r\n </div>\r\n }\r\n @if (rule.type === 'group') {\r\n <div class=\"rule-groups\" [class.rule-unsaved]=\"rule.unsaved\">\r\n <div class=\"rule-groups-tools\">\r\n <ui-button [uiTooltip]=\"'rule_builder.add_rule_tip' | uicTranslate\" (click)=\"addRule(rule.rules ?? [])\" size=\"s\" type=\"bordered\" icon=\"ri-add-line\">{{'rule_builder.add_rule' | uicTranslate}}</ui-button>\r\n <ui-button [uiTooltip]=\"'rule_builder.add_group_tip' | uicTranslate\" (click)=\"addGroup(rule.rules ?? [])\" size=\"s\" type=\"bordered\" icon=\"ri-add-line\">{{'rule_builder.add_group' | uicTranslate}}</ui-button>\r\n <ui-button [uiTooltip]=\"'rule_builder.delete_group_tip' | uicTranslate\" (click)=\"removeRule(rules, i)\" [iconOnly]=\"true\" size=\"s\" type=\"ghost\" icon=\"ri-delete-bin-line\" color=\"red\"></ui-button>\r\n </div>\r\n <div class=\"rule-groups-items\">\r\n <ng-container\r\n *ngTemplateOutlet=\"rulesTemplate; context: { rules: rule.rules ?? [], isGroup: true }\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n }\r\n }\r\n</ng-template>\r\n\r\n<ng-template #readOnlyTemplate>\r\n @if (editorRules.length > 0) {\r\n <div class=\"rule-friendly-output\">\r\n <ng-container\r\n *ngTemplateOutlet=\"readOnlyRulesTemplate; context: { rules: editorRules, isGroup: false }\">\r\n </ng-container>\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #readOnlyRulesTemplate let-rules=\"rules\" let-isGroup=\"isGroup\">\r\n <div class=\"readonly\">\r\n @if (isGroup) {\r\n <div class=\"readonly-group\">(</div>\r\n }\r\n \r\n @for (rule of rules; track $index) {\r\n @if (rule.type === 'condition') {\r\n <div class=\"readonly-condition\" [class.readonly-condition-loading]=\"isConditionLabelPending(rule.value)\" [uiTooltip]=\"getConditionDetailTip(rule.value)\">\r\n @if (isConditionLabelPending(rule.value)) {\r\n <span class=\"condition-box-loader\" aria-hidden=\"true\"></span>\r\n } @else {\r\n {{ getConditionLabel(rule.value) }}\r\n }\r\n </div>\r\n }\r\n \r\n @if (rule.type === 'operator') {\r\n <div class=\"readonly-operator\">{{ getOperatorLabel(rule.value) }}</div>\r\n }\r\n \r\n @if (rule.type === 'group') {\r\n <div class=\"readonly-group\">\r\n <ng-container\r\n *ngTemplateOutlet=\"readOnlyRulesTemplate; context: { rules: rule.rules ?? [], isGroup: true }\">\r\n </ng-container>\r\n </div>\r\n }\r\n }\r\n \r\n @if (isGroup) {\r\n <div class=\"readonly-group\">)</div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'firstCapital'\r\n})\r\nexport class FirstCapitalPipe implements PipeTransform {\r\n\r\n transform(str: string, max = 0): string {\r\n \r\n if (str == null) {\r\n return '-';\r\n }\r\n if ( str.length < 4 ){\r\n return str;\r\n }\r\n if (max != 0 && str.length > max) {\r\n str = str.substring(0, max) + '...';\r\n }\r\n return str.replace(/\\b(\\p{L}+)(\\p{L}*)/gu, (match, firstChar, rest) => {\r\n const capitalizedFirstChar = firstChar.normalize('NFD').charAt(0).toUpperCase() + firstChar.slice(1).toLowerCase();\r\n const lowerRest = rest.toLowerCase();\r\n return capitalizedFirstChar + lowerRest;\r\n });\r\n }\r\n\r\n}\r\n","// COMPONENTS\r\nexport * from './lib/components/button/button.component';\r\nexport * from './lib/components/inputs/checkbox/checkbox.component';\r\nexport * from './lib/components/inputs/toggle-button/toggle-button.component';\r\nexport * from './lib/components/dynamic-form/form-wrapper/form-wrapper.component';\r\nexport * from './lib/components/dynamic-form/steps-form/steps-form.component';\r\nexport * from './lib/components/dynamic-form/steps-form/step-tabs/step-tabs.component';\r\nexport * from './lib/components/inputs/input/input.component';\r\nexport * from './lib/components/inputs/date-picker/date-picker.component';\r\nexport * from './lib/components/inputs/multy-searcher/multy-searcher.component';\r\nexport * from './lib/components/inputs/uic-searcher/uic-searcher.component';\r\nexport * from './lib/components/inputs/file-input/file-input.component';\r\nexport * from './lib/components/inputs/select/select.component';\r\nexport * from './lib/components/inputs/phone-input/phone-input.component';\r\nexport * from './lib/components/inputs/multy-select/multy-select.component';\r\nexport * from './lib/components/inputs/ui-radio/ui-radio.component';\r\nexport * from './lib/components/dropdown-container/dropdown-container.component';\r\nexport * from './lib/components/dropdown-container/dropdown-close.directive';\r\nexport * from './lib/components/inputs/time-picker/time-picker.component';\r\nexport * from './lib/components/table/table.component';\r\nexport * from './lib/components/short-table/short-table.component';\r\nexport * from './lib/components/table/table.models';\r\nexport * from './lib/components/skeleton-loader/skeleton-loader.component';\r\nexport * from './lib/components/skeleton-cards/skeleton-cards.component';\r\nexport * from './lib/components/push-alerts/alert-container/alert-container.component';\r\nexport * from './lib/components/inputs/ui-slider/ui-slider.component';\r\nexport * from './lib/components/uic-action-button/uic-action-button.component';\r\nexport * from './lib/components/signature-pad/signature-pad.component';\r\nexport * from './lib/components/dropdown-container/dropdown-container.component';\r\nexport * from './lib/components/kpi-card/kpi-card.component';\r\nexport * from './lib/components/uic-portlet-card/uic-portlet-card.component';\r\nexport * from './lib/components/tabs-button/tabs-button.component';\r\nexport * from './lib/components/work-panel/work-panel.component';\r\nexport * from './lib/components/overlay-card/overlay-card.component';\r\nexport * from './lib/components/accordion/accordion.component';\r\nexport * from './lib/components/pool-options/pool-options.component';\r\nexport * from './lib/components/tree-admin/tree-admin.component';\r\nexport * from './lib/components/excel-table/excel-table.component';\r\nexport * from './lib/components/editable-table/editable-table.component';\r\nexport * from './lib/components/tag-selector/tag-selector.component';\r\nexport * from './lib/components/progress-bar/progress-bar.component';\r\n\r\n// ANIMATIONS\r\nexport * from './lib/animations/animatios.index';\r\n\r\n// FORMULARIOS\r\nexport * from './lib/components/dynamic-form/form.models';\r\nexport * from './lib/components/user-formbuilder/user-formbuilder.component';\r\nexport * from './lib/components/rule-builder/rule-builder.component';\r\n\r\n\r\n\r\n// SERVICIOS\r\nexport * from './lib/services/modal.service';\r\nexport * from './lib/services/modaRef';\r\nexport * from './lib/services/modal.constant';\r\nexport * from './lib/services/tiny-alert.service';\r\nexport * from './lib/components/tiny-alert/tiny-alert.model';\r\nexport * from './lib/services/push-alert.service';\r\nexport * from './lib/services/translate.service';\r\n// PIPES\r\nexport * from './lib/pipes/name-inits.pipe';\r\nexport * from './lib/pipes/first-capital.pipe';\r\nexport * from './lib/pipes/translate.pipe';\r\n\r\n// DIRECTIVES\r\nexport * from './lib/directives/tool-tip.directive';\r\nexport * from './lib/directives/textarea-autoresize.directive';\r\nexport * from './lib/directives/textarea-autoresize-min-rows.directive';\r\nexport * from './lib/directives/textarea-autoresize-max-rows.directive';\r\n\r\n// HELPERS\r\nexport * from './lib/helpers';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["base","nextId","i2","i1.UicTextareaAutoresizeDirective","i1","i1.UicModalService","i1.UicPushAlertService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ui-core-abv.mjs","sources":["../../../projects/ui-core/src/lib/components/button/button.component.ts","../../../projects/ui-core/src/lib/components/button/button.component.html","../../../projects/ui-core/src/lib/components/dynamic-form/base-value-accessot.ts","../../../projects/ui-core/src/lib/components/inputs/input-wrapper/input-wrapper.component.ts","../../../projects/ui-core/src/lib/components/inputs/input-wrapper/input-wrapper.component.html","../../../projects/ui-core/src/lib/components/inputs/checkbox/checkbox.component.ts","../../../projects/ui-core/src/lib/components/inputs/checkbox/checkbox.component.html","../../../projects/ui-core/src/lib/components/inputs/toggle-button/toggle-button.component.ts","../../../projects/ui-core/src/lib/components/inputs/toggle-button/toggle-button.component.html","../../../projects/ui-core/src/lib/components/skeleton-loader/skeleton-loader.component.ts","../../../projects/ui-core/src/lib/components/skeleton-loader/skeleton-loader.component.html","../../../projects/ui-core/src/lib/translate/dictionary.en.ts","../../../projects/ui-core/src/lib/translate/dictionary.es.ts","../../../projects/ui-core/src/lib/services/translate.service.ts","../../../projects/ui-core/src/lib/pipes/translate.pipe.ts","../../../projects/ui-core/src/lib/components/inputs/date-picker/date-picker.component.ts","../../../projects/ui-core/src/lib/components/inputs/date-picker/date-picker.component.html","../../../projects/ui-core/src/lib/components/push-alerts/alert.helpers.ts","../../../projects/ui-core/src/lib/services/push-alert.service.ts","../../../projects/ui-core/src/lib/components/inputs/file-input/file-input.component.ts","../../../projects/ui-core/src/lib/components/inputs/file-input/file-input.component.html","../../../projects/ui-core/src/lib/components/inputs/input/input.component.ts","../../../projects/ui-core/src/lib/components/inputs/input/input.component.html","../../../projects/ui-core/src/lib/components/inputs/multy-select/multy-select.component.ts","../../../projects/ui-core/src/lib/components/inputs/multy-select/multy-select.component.html","../../../projects/ui-core/src/lib/components/inputs/phone-input/phone-countries.data.ts","../../../projects/ui-core/src/lib/components/inputs/phone-input/phone-input.component.ts","../../../projects/ui-core/src/lib/components/inputs/phone-input/phone-input.component.html","../../../projects/ui-core/src/lib/animations/fadeAndRise.animation.ts","../../../projects/ui-core/src/lib/components/tooltip/tooltip.component.ts","../../../projects/ui-core/src/lib/components/tooltip/tooltip.component.html","../../../projects/ui-core/src/lib/directives/tool-tip.directive.ts","../../../projects/ui-core/src/lib/components/inputs/uic-searcher/uic-searcher.component.ts","../../../projects/ui-core/src/lib/components/inputs/uic-searcher/uic-searcher.component.html","../../../projects/ui-core/src/lib/components/inputs/select/select.component.ts","../../../projects/ui-core/src/lib/components/inputs/select/select.component.html","../../../projects/ui-core/src/lib/components/inputs/ui-slider/ui-slider.component.ts","../../../projects/ui-core/src/lib/components/inputs/ui-slider/ui-slider.component.html","../../../projects/ui-core/src/lib/components/inputs/ui-radio/ui-radio.component.ts","../../../projects/ui-core/src/lib/components/inputs/ui-radio/ui-radio.component.html","../../../projects/ui-core/src/lib/components/inputs/time-picker/time-picker.component.ts","../../../projects/ui-core/src/lib/components/inputs/time-picker/time-picker.component.html","../../../projects/ui-core/src/lib/components/pool-options/pool-options.component.ts","../../../projects/ui-core/src/lib/components/pool-options/pool-options.component.html","../../../projects/ui-core/src/lib/directives/textarea-autoresize.directive.ts","../../../projects/ui-core/src/lib/directives/textarea-autoresize-max-rows.directive.ts","../../../projects/ui-core/src/lib/directives/textarea-autoresize-min-rows.directive.ts","../../../projects/ui-core/src/lib/components/dynamic-form/form-state.service.ts","../../../projects/ui-core/src/lib/components/dynamic-form/form/dynamic-form.component.ts","../../../projects/ui-core/src/lib/components/dynamic-form/form/dynamic-form.component.html","../../../projects/ui-core/src/lib/components/dynamic-form/form-wrapper/form-wrapper.component.ts","../../../projects/ui-core/src/lib/components/dynamic-form/form-wrapper/form-wrapper.component.html","../../../projects/ui-core/src/lib/components/dynamic-form/steps-form/step-tabs/step-tabs.component.ts","../../../projects/ui-core/src/lib/components/dynamic-form/steps-form/step-tabs/step-tabs.component.html","../../../projects/ui-core/src/lib/components/dynamic-form/steps-form/steps-form.component.ts","../../../projects/ui-core/src/lib/components/dynamic-form/steps-form/steps-form.component.html","../../../projects/ui-core/src/lib/components/inputs/multy-searcher/multy-searcher.component.ts","../../../projects/ui-core/src/lib/components/inputs/multy-searcher/multy-searcher.component.html","../../../projects/ui-core/src/lib/components/dropdown-container/dropdown-container.component.ts","../../../projects/ui-core/src/lib/components/dropdown-container/dropdown-container.component.html","../../../projects/ui-core/src/lib/components/dropdown-container/dropdown-close.directive.ts","../../../projects/ui-core/src/lib/components/table/table-searcher/table-searcher.component.ts","../../../projects/ui-core/src/lib/components/table/table-searcher/table-searcher.component.html","../../../projects/ui-core/src/lib/components/table/table-pagination/table-pagination.component.ts","../../../projects/ui-core/src/lib/components/table/table-pagination/table-pagination.component.html","../../../projects/ui-core/src/lib/animations/highlightRow.animation.ts","../../../projects/ui-core/src/lib/animations/animatedRow.animation.ts","../../../projects/ui-core/src/lib/components/uic-action-button/uic-action-button.component.ts","../../../projects/ui-core/src/lib/components/uic-action-button/uic-action-button.component.html","../../../projects/ui-core/src/lib/components/table/table-list/table-list.component.ts","../../../projects/ui-core/src/lib/components/table/table-list/table-list.component.html","../../../projects/ui-core/src/lib/pipes/name-inits.pipe.ts","../../../projects/ui-core/src/lib/components/table/table-user/table-user.component.ts","../../../projects/ui-core/src/lib/components/table/table-user/table-user.component.html","../../../projects/ui-core/src/lib/components/status-label/status-label.component.ts","../../../projects/ui-core/src/lib/components/status-label/status-label.component.html","../../../projects/ui-core/src/lib/services/modal.constant.ts","../../../projects/ui-core/src/lib/services/modaRef.ts","../../../projects/ui-core/src/lib/components/tiny-alert/tiny-alert.component.ts","../../../projects/ui-core/src/lib/components/tiny-alert/tiny-alert.component.html","../../../projects/ui-core/src/lib/animations/pushTop.animation.ts","../../../projects/ui-core/src/lib/components/modal/floating-modal/modal.component.ts","../../../projects/ui-core/src/lib/components/modal/floating-modal/modal.component.html","../../../projects/ui-core/src/lib/animations/sideModal.animation.ts","../../../projects/ui-core/src/lib/components/modal/side-modal/side-modal.component.ts","../../../projects/ui-core/src/lib/components/modal/side-modal/side-modal.component.html","../../../projects/ui-core/src/lib/services/modal.service.ts","../../../projects/ui-core/src/lib/components/push-alerts/tynyalert.helpers.ts","../../../projects/ui-core/src/lib/services/tiny-alert.service.ts","../../../projects/ui-core/src/lib/components/item-value/item-value.component.ts","../../../projects/ui-core/src/lib/components/item-value/item-value.component.html","../../../projects/ui-core/src/lib/components/uic-portlet-card/uic-portlet-card.component.ts","../../../projects/ui-core/src/lib/components/uic-portlet-card/uic-portlet-card.component.html","../../../projects/ui-core/src/lib/components/short-table/short-table.component.ts","../../../projects/ui-core/src/lib/components/short-table/short-table.component.html","../../../projects/ui-core/src/lib/helpers.ts","../../../projects/ui-core/src/lib/components/table/table.component.ts","../../../projects/ui-core/src/lib/components/table/table.component.html","../../../projects/ui-core/src/lib/components/table/table.models.ts","../../../projects/ui-core/src/lib/components/skeleton-cards/skeleton-cards.component.ts","../../../projects/ui-core/src/lib/components/skeleton-cards/skeleton-cards.component.html","../../../projects/ui-core/src/lib/components/push-alerts/alert/alert.component.ts","../../../projects/ui-core/src/lib/components/push-alerts/alert/alert.component.html","../../../projects/ui-core/src/lib/components/push-alerts/alert-container/alert-container.component.ts","../../../projects/ui-core/src/lib/components/push-alerts/alert-container/alert-container.component.html","../../../projects/ui-core/src/lib/components/signature-pad/signature-pad.component.ts","../../../projects/ui-core/src/lib/components/signature-pad/signature-pad.component.html","../../../projects/ui-core/src/lib/components/kpi-card/kpi-card.component.ts","../../../projects/ui-core/src/lib/components/kpi-card/kpi-card.component.html","../../../projects/ui-core/src/lib/components/tabs-button/tabs-button.component.ts","../../../projects/ui-core/src/lib/components/tabs-button/tabs-button.component.html","../../../projects/ui-core/src/lib/components/work-panel/work-panel.component.ts","../../../projects/ui-core/src/lib/components/work-panel/work-panel.component.html","../../../projects/ui-core/src/lib/components/overlay-card/overlay-card.component.ts","../../../projects/ui-core/src/lib/components/overlay-card/overlay-card.component.html","../../../projects/ui-core/src/lib/components/accordion/accordion.component.ts","../../../projects/ui-core/src/lib/components/accordion/accordion.component.html","../../../projects/ui-core/src/lib/components/tree-admin/tree-admin.component.ts","../../../projects/ui-core/src/lib/components/tree-admin/tree-admin.component.html","../../../projects/ui-core/src/lib/components/editable-table/editable-table.component.ts","../../../projects/ui-core/src/lib/components/editable-table/editable-table.component.html","../../../projects/ui-core/src/lib/components/excel-table/excel-table.component.ts","../../../projects/ui-core/src/lib/components/excel-table/excel-table.component.html","../../../projects/ui-core/src/lib/components/tag-selector/tag-selector.component.ts","../../../projects/ui-core/src/lib/components/tag-selector/tag-selector.component.html","../../../projects/ui-core/src/lib/components/progress-bar/progress-bar.component.ts","../../../projects/ui-core/src/lib/components/progress-bar/progress-bar.component.html","../../../projects/ui-core/src/lib/animations/simpleFade.animation.ts","../../../projects/ui-core/src/lib/components/dynamic-form/form.models.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/form-preview/form-preview.component.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/form-preview/form-preview.component.html","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/field-editor/field-options-editor/field-options-editor.component.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/field-editor/field-options-editor/field-options-editor.component.html","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/field-editor/field-editor.component.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/field-editor/field-editor.component.html","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/field-type-selector/field-type-selector.component.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/field-type-selector/field-type-selector.component.html","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/block-editor.component.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/block-editor/block-editor.component.html","../../../projects/ui-core/src/lib/components/user-formbuilder/user-formbuilder.component.ts","../../../projects/ui-core/src/lib/components/user-formbuilder/user-formbuilder.component.html","../../../projects/ui-core/src/lib/components/rule-builder/rule-definirion/rule-definirion.component.ts","../../../projects/ui-core/src/lib/components/rule-builder/rule-definirion/rule-definirion.component.html","../../../projects/ui-core/src/lib/components/rule-builder/rule-builder.component.ts","../../../projects/ui-core/src/lib/components/rule-builder/rule-builder.component.html","../../../projects/ui-core/src/lib/pipes/first-capital.pipe.ts","../../../projects/ui-core/src/public-api.ts","../../../projects/ui-core/src/ui-core-abv.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { Component, Input, SimpleChange, SimpleChanges } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ui-button',\r\n imports: [CommonModule],\r\n templateUrl: './button.component.html',\r\n styleUrl: './button.component.scss'\r\n})\r\nexport class UicButtonComponent {\r\n @Input() text='';\r\n @Input() icon='';\r\n @Input() rightIcon='';\r\n @Input() iconOnly=false;\r\n @Input() disabled=false;\r\n @Input() loading=false; \r\n @Input() size: ButtonSize = 'm';\r\n @Input() type: ButtonType = 'filled'; \r\n @Input() color:ButtonColor = 'primary';\r\n \r\n buttonTypeClass = \"\";\r\n \r\n ngOnInit(){\r\n this.buttonTypeClass = 'btn-' + this.type + ' btn-' + this.color + \"-\" + this.type;\r\n }\r\n\r\n ngOnChange(sc:SimpleChanges){\r\n if ( sc['type'] ){\r\n this.buttonTypeClass = 'btn-' + this.type + ' btn-' + this.color + \"-\" + this.type;\r\n }\r\n }\r\n}\r\nexport type ButtonColor = 'primary'|'secondary'|'red'|'green'|'blue'|'yellow' | 'black' | 'grey' | 'white';\r\nexport type ButtonSize = 't' | 's'|'m'|'l'| 'g';\r\nexport type ButtonType = 'filled' | 'bordered' | 'ghost';","<button\r\n type=\"button\"\r\n [class]=\"'main-btn ' + buttonTypeClass\"\r\n [disabled]=\"disabled\"\r\n [ngClass]=\"{\r\n 'btn-tiny' :size=='t',\r\n 'btn-small' :size=='s', \r\n 'btn-medium' :size=='m',\r\n 'btn-large' :size=='l', \r\n 'btn-gigant' :size=='g'\r\n }\" >\r\n \r\n @if (icon!='' && !loading ) {\r\n <i class=\"{{icon}}\"></i>\r\n }\r\n @if (loading) {\r\n <div class=\"uic-loader-container\"> <div class=\"uic-loader\"></div> </div>\r\n }\r\n @if (!iconOnly) {\r\n <div class=\"btn-text\" [class.norighticon]=\"rightIcon==''\" [class.noicon]=\"icon==''\">\r\n {{text}}\r\n <ng-content ></ng-content>\r\n </div>\r\n }\r\n @if (rightIcon!='' ) {\r\n <i class=\"{{rightIcon}}\"></i>\r\n }\r\n</button>","import { ControlValueAccessor } from '@angular/forms';\r\nimport { Directive, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nexport function createValueAccessor<T>() {\r\n @Directive()\r\n abstract class BaseValueAccessor implements ControlValueAccessor {\r\n @Input() value!: T;\r\n @Output() valueChange = new EventEmitter<T>();\r\n\r\n onChange: (value: T) => void = () => {};\r\n onTouched: () => void = () => {};\r\n\r\n writeValue(obj: T): void {\r\n this.value = obj;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n (this as any).disabled = isDisabled;\r\n }\r\n\r\n notifyChange(value: T) {\r\n this.value = value;\r\n this.valueChange.emit(value);\r\n this.onChange(value);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n return BaseValueAccessor;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { ButtonColor } from '../../button/button.component';\r\n\r\n@Component({\r\n selector: 'ui-input-wrapper',\r\n imports: [CommonModule],\r\n templateUrl: './input-wrapper.component.html',\r\n styleUrl: '../input.component.scss'\r\n})\r\nexport class InputWrapperComponent {\r\n @Input() icon = ''; \r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n @Input() disabled = false;\r\n}\r\n","<div class=\"input-wrapper\">\r\n @if (icon) {\r\n <i class=\"input-externalicon f-{{iconColor}} {{icon}}\"></i>\r\n }\r\n <div class=\"input-elements\" [style]=\"icon?'max-width: calc(100% - 34px);':''\">\r\n \r\n @if (label) {\r\n <div class=\"label inputlabel\" [class.font-error]=\"error\">\r\n {{label!='_'?label:''}} \r\n </div>\r\n }\r\n <ng-content></ng-content>\r\n @if (error) {\r\n <div class=\"fakeinput-alert f-red\">{{error}}</div>\r\n }\r\n @if (tip) {\r\n <div class=\"fakeinput-alert tip\">{{tip}}</div>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, forwardRef, Input } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { ButtonColor } from '../../button/button.component';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\n\r\nconst base = createValueAccessor<boolean>();\r\n\r\n@Component({\r\n selector: 'ui-checkbox',\r\n imports: [InputWrapperComponent],\r\n templateUrl: './checkbox.component.html',\r\n styleUrls: ['./checkbox.component.scss','../input.component.scss'],\r\n providers:[\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicCheckboxComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicCheckboxComponent extends base{\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() label = '';\r\n @Input() tip = '';\r\n @Input() type: 'checkbox'|'switch' = 'checkbox';\r\n @Input() placeholder = '';\r\n @Input() loading = false;\r\n @Input() noPadding = false;\r\n \r\n @Input() disabled = false;\r\n\r\n toggle() {\r\n if (!this.disabled && !this.loading){\r\n this.notifyChange(!this.value);\r\n }\r\n }\r\n \r\n}\r\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\"\r\n>\r\n <div [class.check-form-container]=\"!noPadding\">\r\n <div (click)=\"toggle()\" class=\"check-wrapper\">\r\n @if (type=='checkbox') {\r\n <button\r\n type=\"button\"\r\n class=\"checkbox\"\r\n [disabled]=\"disabled\"\r\n [class.checked]=\"value\"\r\n [class.placeholder-space]=\"placeholder!=''\"\r\n [disabled]=\"disabled\"\r\n (keydown.enter)=\"toggle()\"\r\n (keydown.space)=\"toggle()\"\r\n >\r\n <span class=\"icon\">\r\n @if (value) {\r\n ✔\r\n }@else {\r\n −\r\n }\r\n </span>\r\n </button>\r\n }@else{\r\n <button\r\n type=\"button\"\r\n class=\"toggle\"\r\n [class.checked]=\"value\"\r\n [disabled]=\"disabled\"\r\n >\r\n <span class=\"thumb\"></span>\r\n </button>\r\n }\r\n @if (placeholder) {\r\n <span class=\"check-placeholder\">{{placeholder}}</span>\r\n }\r\n \r\n <ng-content></ng-content> \r\n </div>\r\n </div>\r\n</ui-input-wrapper>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ui-switch',\r\n imports: [],\r\n templateUrl: './toggle-button.component.html',\r\n styleUrls: ['./toggle-button.component.scss','../input.component.scss']\r\n})\r\nexport class UicSwichComponent {\r\n @Input() checked = false;\r\n @Output() checkedChange = new EventEmitter<boolean>();\r\n @Input() disabled = false;\r\n @Input() placeholder = '';\r\n @Input() label = '';\r\n\r\n \r\n\r\n toggle() {\r\n if (this.disabled) return;\r\n this.checked = !this.checked;\r\n this.checkedChange.emit(this.checked);\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n class=\"toggle\"\r\n [class.checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n (click)=\"toggle()\"\r\n>\r\n <span class=\"thumb\"></span>\r\n</button>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ui-skeleton-loader',\r\n imports: [ CommonModule ],\r\n templateUrl: './skeleton-loader.component.html',\r\n styleUrl: './skeleton-loader.component.scss'\r\n})\r\nexport class UicSkeletonLoaderComponent {\r\n @Input() inputs: number = 3; \r\n @Input() cols: number = 3; \r\n\r\n get gridStyle() {\r\n return {\r\n 'grid-template-columns': `repeat(${this.cols}, 1fr)`\r\n };\r\n }\r\n}\r\n","<div class=\"skeleton-form\" [ngStyle]=\"gridStyle\">\r\n @for (r of [].constructor(inputs); track $index) {\r\n <div class=\"skeleton-input-container\">\r\n <div class=\"skeleton-gradient skeleton-label\"></div>\r\n <div class=\"skeleton-gradient skeleton-input\"></div>\r\n </div>\r\n }\r\n</div>","export const DICTIONARY_EN = {\n common: {\n open: 'Open',\n close: 'Close',\n save: 'Save',\n clear: 'Clear',\n cancel: 'Cancel',\n apply: 'Apply',\n continue: 'Continue',\n back: 'Back',\n next: 'Next',\n send: 'Send',\n today: 'Today',\n search: 'Search',\n search_ellipsis: 'Search...',\n all: 'All',\n select: 'Select',\n selected: 'Selected',\n detail: 'Detail',\n },\n table: {\n search_label: 'Search',\n search_placeholder: 'Search',\n empty: 'No items found',\n next_short: 'Next',\n previous_short: 'Prev',\n },\n select: {\n non_selected: '- Select -',\n multy_non_selected: '-- Select --',\n multy_all_selected: '-- All --',\n none: '- None -',\n empty: 'No items to show',\n without_options: 'No options available',\n pending_text: 'PENDING TEXT',\n search_placeholder: 'Search...',\n },\n tree: {\n search_label: 'Search subcategories:',\n search_placeholder: 'Search...',\n empty: 'No subcategories',\n duplicate_name: 'Subcategory already exists',\n without_children: 'No children',\n },\n tag_selector: {\n add_tag: 'Add tag',\n predefined_title: 'Predefined tags',\n new_tag_title: 'New tag',\n },\n phone_input: {\n placeholder: 'Enter a number',\n search_country: 'Search country or code',\n clear_search: 'Clear search',\n no_results: 'No results found',\n aria_country_code: '{{country}} code {{dialCode}}',\n },\n time_picker: {\n placeholder: 'hh:mm am/pm',\n },\n excel_table: {\n load_file: 'Upload excel',\n empty_message: 'No data to show',\n clear_file: 'Clear',\n see_more: 'See more',\n counter_text: 'Viewing {{shown}} items of {{total}} total',\n },\n editable_table: {\n add_row_above: 'Add row above',\n add_row_below: 'Add row below',\n delete_row: 'Delete row',\n add_column: 'Add column',\n delete_column: 'Delete column',\n delete_row_with_data_warning: 'This row has data. If you delete it, all values will be lost.',\n delete_column_with_data_warning: 'The column \"{{column_name}}\" has data. If you delete it, these values will be lost.',\n save_or_discard_column: 'Do you want to save this new column or delete it?',\n save_column: 'Save column',\n save: 'Save',\n delete: 'Delete',\n column_name_must_be_unique: 'Column name must be unique',\n },\n rule_builder: {\n title: 'Rule',\n add_rule: 'Condition',\n add_rule_tip: 'Add condition',\n add_group: 'Group',\n add_group_tip: 'Add group',\n reset: 'Reset',\n reset_tip: 'Discard unsaved changes',\n save: 'Save rule',\n save_tip: 'Save built rule',\n delete_rule_tip: 'Delete condition',\n delete_group_tip: 'Delete group',\n toggle_operator_tip: 'Click to change operator',\n no_rules: 'No conditions added',\n rules_management: 'Select condition',\n edit: 'Edit rule',\n edit_tip: 'Edit rule',\n edit_condition_tip: 'Click to edit condition',\n select_condition: '- select condition -',\n operators: {\n and: 'AND',\n or: 'OR',\n },\n validation: {\n single_condition_not_allowed: 'Rules cannot be created with a single condition',\n },\n definition: {\n cancel_and_back: 'Cancel and go back',\n create_and_select: 'Create and select condition',\n search_placeholder: 'Search condition',\n new_rule: 'New condition',\n no_results: 'No conditions found',\n previous: 'Previous',\n next: 'Next',\n form: {\n description: 'Description',\n field: 'Field',\n operator: 'Operator',\n value: 'Value',\n },\n },\n },\n step_form: {\n back: 'Back',\n next: 'Next',\n submit: 'Send',\n },\n work_panel: {\n minimize: 'Minimize',\n expand: 'Expand',\n reduce: 'Reduce',\n close: 'Close',\n },\n modal: {\n cancel: 'Cancel',\n next: 'Next',\n },\n searcher: {\n clear_tip: 'Clear',\n empty: 'No items to show',\n without_selected: 'No selected items',\n },\n alerts: {\n success_title: 'Operation successful',\n error_title: 'An error occurred',\n delete_title: 'Action confirmation',\n delete_confirm: 'Yes, delete',\n warning_title: 'Alert!',\n },\n voice: {\n browser_incompatibility_title: 'Browser incompatibility',\n browser_incompatibility_message: 'This browser does not support this feature.',\n voice_error: 'Error while starting voice dictation',\n },\n form_builder: {\n block_title: 'Title',\n add_new_field: 'Add new field',\n block_subtitle: 'Subtitle',\n add_block: 'Add block',\n delete_block: 'Delete block', \n preview_form: 'Preview',\n submit_form: 'Submit',\n select_field_to_edit: 'Select a field to edit its properties',\n no_fields: 'Add fields to your form',\n base: {\n name: 'Key',\n required: 'Required',\n icon: 'Icon',\n label: 'Label',\n tip: 'Hint',\n tip_tip: 'Shown below',\n new_line: 'New line',\n col_span: 'Column span',\n col_span_tip: 'How many columns the field occupies',\n },\n extra: {\n iconColor: 'Icon color',\n tooltip: 'Tooltip',\n internalIcon: 'Internal icon',\n internalIconColor: 'Internal icon color',\n internalColorScale: 'Internal color scale',\n internalColorScale_tip: 'Values for rendering the scale',\n internalColorScaleOrder: 'Color scale order',\n internalColorScaleOrder_tip: 'Ascending or descending',\n placeholder: 'Placeholder',\n placeholder_tip: 'Default field text',\n minLength: 'Minimum length',\n minLength_tip: 'Least allowed chars',\n maxLength: 'Maximum length',\n maxLength_tip: 'Most allowed chars',\n showCounter: 'Show counter',\n showCounter_tip: 'Show typed character count',\n voiceToTextEnabled: 'Enable voice to text',\n voiceToTextEnabled_tip: 'Enable speech input',\n textareaResize: 'Autosize textarea',\n textareaResize_tip: 'Grow or shrink by content',\n resizeMinRows: 'Minimum rows',\n resizeMinRows_tip: 'Initial minimum rows',\n resizeMaxRows: 'Maximum rows',\n resizeMaxRows_tip: 'Initial maximum rows',\n min: 'Minimum',\n min_tip: 'Smallest accepted value',\n max: 'Maximum',\n max_tip: 'Largest accepted value',\n step: 'Step',\n step_tip: 'Increment between values',\n sliderInterval: 'Slider interval',\n sliderInterval_tip: 'Spacing between marks',\n sliderMarks: 'Slider marks',\n sliderMarks_tip: 'Number of scale marks',\n monthMode: 'Month mode',\n monthMode_tip: 'Select a month date',\n monthDay: 'Month day',\n monthDay_tip: 'Pick first or last day',\n minDate: 'Minimum date',\n minDate_tip: 'Earliest allowed date',\n maxDate: 'Maximum date',\n maxDate_tip: 'Latest allowed date',\n timeInterval: 'Time interval',\n timeInterval_tip: 'Minute step',\n fileTypes: 'File types',\n fileTypes_tip: 'Comma-separated extensions',\n poolEnabledListView: 'Enable list view',\n poolEnabledListView_tip: 'Show pool in list mode',\n poolTitle: 'List title',\n poolTitle_tip: 'Title for list header',\n options: 'Options',\n options_tip: 'JSON list: [{id:1,text:\"A\"}]',\n multyEnabled: 'Multiple',\n multyEnabled_tip: 'Allow multi-select',\n searchFn: 'Search function',\n searchFn_tip: 'Function called to search',\n searchDisplayFn: 'Display function',\n searchDisplayFn_tip: 'Function to render option text',\n searchIsEnabledFn: 'Enabled function',\n searchIsEnabledFn_tip: 'Function to enable or disable option',\n pattern: 'Pattern',\n pattern_tip: 'Regular expression in text',\n iaValidation: 'IA Validation',\n iaValidationPrompt: 'IA Validation Prompt',\n searchApi: 'Search API',\n searchApi_tip: 'URL to fetch search options',\n optionsSourceKey: 'Options source',\n optionsSourceKey_tip: 'Logical key registered by the consuming application',\n optionsSourceIdField: 'Option ID field',\n optionsSourceIdField_tip: 'Path used as the option id. Example: id',\n optionsSourceTextField: 'Option text field',\n optionsSourceTextField_tip: 'Path used as the option text. Example: name',\n optionsSourceTextTemplate: 'Text template',\n optionsSourceTextTemplate_tip: 'Example: {{name}} ({{id}})',\n optionsSourceDependsOn: 'Depends on',\n optionsSourceDependsOn_tip: 'Parent field identifier that triggers reloads',\n optionsSourceParamName: 'Parameter name',\n optionsSourceParamName_tip: 'Name used to send the dependent value',\n selectNullable_tip: 'Allows selecting an empty option',\n selectSearchEnabled_tip: 'Enables search among options',\n selectNullable: 'Allow empty option',\n selectSearchEnabled: 'Enable search',\n },\n options_editor: {\n title: 'Options',\n code_label: 'Code',\n name_label: 'Label',\n code_placeholder: 'ID',\n display_name_placeholder: 'Display name',\n add_option: 'Add option',\n },\n field_editor: {\n dependency_title: 'Dependency',\n dependency_description: 'This field is shown only if the rule is met:',\n add_relation: 'Add relation',\n remove_relation: 'Remove relation',\n basic: 'Basic',\n parent: 'Parent',\n operator: 'Operator',\n value: 'Value',\n expected_value: 'Expected value',\n style: 'Style',\n advanced: 'Advanced',\n duplicate: 'Duplicate',\n delete: 'Delete',\n show_advanced: 'Show advanced',\n hide_advanced: 'Hide advanced',\n },\n validation: {\n duplicate_identifier: 'The identifier \"{{identifier}}\" is used more than once.',\n duplicate_identifier_title: 'Validation error',\n }\n },\n validation: {\n invalid: '{{field}} is invalid.',\n required: '{{field}} is required.',\n min: '{{field}} must be greater than or equal to {{min}}.',\n max: '{{field}} must be less than or equal to {{max}}.',\n minlength: '{{field}} must have at least {{requiredLength}} characters.',\n maxlength: '{{field}} cannot exceed {{requiredLength}} characters.',\n pattern: '{{field}} has an invalid format.',\n },\n clipboard: {\n copy_error: 'Could not copy:',\n },\n} as const;\n","export const DICTIONARY_ES = {\n common: {\n open: 'Abrir',\n close: 'Cerrar',\n save: 'Guardar',\n clear: 'Limpiar',\n cancel: 'Cancelar',\n apply: 'Aplicar',\n continue: 'Continuar',\n back: 'Volver',\n next: 'Siguiente',\n send: 'Enviar',\n today: 'Hoy',\n search: 'Buscar',\n search_ellipsis: 'Buscar...',\n all: 'Todos',\n select: 'Seleccionar',\n selected: 'Seleccionados',\n detail: 'Detalle',\n },\n table: {\n search_label: 'Buscar',\n search_placeholder: 'Buscar',\n empty: 'No hay elementos',\n next_short: 'Sig.',\n previous_short: 'Ant.',\n },\n select: {\n non_selected: '- Seleccionar -',\n multy_non_selected: '-- Seleccionar --',\n multy_all_selected: '-- Todos --',\n none: '- Ninguno -',\n empty: 'No hay elementos para mostrar',\n without_options: 'Sin opciones disponibles',\n pending_text: 'TEXTO PENDIENTE',\n search_placeholder: 'Buscar...',\n },\n tree: {\n search_label: 'Buscar subcategorias:',\n search_placeholder: 'Buscar...',\n empty: 'Sin subcategorias',\n duplicate_name: 'La subcategoria ya existe',\n without_children: 'Sin hijos',\n },\n tag_selector: {\n add_tag: 'Agregar tag',\n predefined_title: 'Tags predefinidos',\n new_tag_title: 'Nuevo tag',\n },\n phone_input: {\n placeholder: 'Ingresa un numero',\n search_country: 'Buscar pais o codigo',\n clear_search: 'Limpiar busqueda',\n no_results: 'No se encontraron resultados',\n aria_country_code: '{{country}} codigo {{dialCode}}',\n },\n time_picker: {\n placeholder: 'hh:mm am/pm',\n },\n excel_table: {\n load_file: 'Cargar excel',\n clear_file: 'Limpiar',\n empty_message: 'No hay datos para mostrar',\n see_more: 'Ver mas',\n counter_text: 'Viendo {{shown}} elementos de {{total}} totales',\n },\n editable_table: {\n add_row_above: 'Agregar arriba',\n add_row_below: 'Agregar abajo',\n delete_row: 'Eliminar fila',\n add_column: 'Agregar columna',\n delete_column: 'Eliminar columna',\n delete_row_with_data_warning: 'Esta fila tiene datos. Si la eliminas, se perderán todos sus valores.',\n delete_column_with_data_warning: 'La columna \"{{column_name}}\" tiene datos. Si la eliminas, perderás esos valores.',\n save_or_discard_column: '¿Deseas guardar esta nueva columna o eliminarla?',\n save_column: 'Guardar columna',\n save: 'Guardar',\n delete: 'Eliminar',\n column_name_must_be_unique: 'El nombre de la columna debe ser único',\n },\n rule_builder: {\n title: 'Regla',\n add_rule: 'Condición',\n add_rule_tip: 'Agregar condición',\n add_group: 'Grupo',\n add_group_tip: 'Agregar grupo',\n reset: 'Descartar',\n reset_tip: 'Descartar cambios no guardados',\n save: 'Guardar regla',\n save_tip: 'Guardar regla construida',\n delete_rule_tip: 'Eliminar condición',\n delete_group_tip: 'Eliminar grupo',\n toggle_operator_tip: 'Click para cambiar de operador',\n no_rules: 'No hay condiciones agregadas',\n rules_management: 'Seleccionar condición',\n edit: 'Editar regla',\n edit_tip: 'Editar regla',\n edit_condition_tip: 'Click para editar la condición',\n select_condition: '- seleccionar condición -',\n operators: {\n and: 'Y',\n or: 'O',\n },\n validation: {\n single_condition_not_allowed: 'No se pueden crear reglas con una sola condición',\n },\n definition: {\n cancel_and_back: 'Cancelar y volver',\n create_and_select: 'Crear y seleccionar condición',\n search_placeholder: 'Buscar condición',\n new_rule: 'Nueva condición',\n no_results: 'No se encontraron condiciones',\n previous: 'Anterior',\n next: 'Siguiente',\n form: {\n description: 'Descripción',\n field: 'Campo',\n operator: 'Operador',\n value: 'Valor',\n },\n },\n },\n step_form: {\n back: 'Volver',\n next: 'Siguiente',\n submit: 'Enviar',\n },\n work_panel: {\n minimize: 'Minimizar',\n expand: 'Agrandar',\n reduce: 'Reducir',\n close: 'Cerrar',\n },\n modal: {\n cancel: 'Cancelar',\n next: 'Siguiente',\n },\n searcher: {\n clear_tip: 'Limpiar',\n empty: 'No hay elementos para mostrar',\n without_selected: 'Sin elementos seleccionados',\n },\n alerts: {\n success_title: 'Operacion exitosa',\n error_title: 'Se produjo un error',\n delete_title: 'Confirmacion de accion',\n delete_confirm: 'Si, eliminar',\n warning_title: '!Alerta!',\n },\n voice: {\n browser_incompatibility_title: 'Incompatibilidad de navegador',\n browser_incompatibility_message: 'Este navegador no sorporta esta caracteristica.',\n voice_error: 'Error al intentar dictado por voz',\n },\n form_builder: {\n block_title: 'Título',\n add_new_field: 'Agregar nuevo campo',\n block_subtitle: 'Subtítulo',\n add_block: 'Agregar bloque',\n delete_block: 'Eliminar bloque',\n preview_form: 'Vista previa',\n submit_form: 'Guardar',\n select_field_to_edit: 'Selecciona un campo para editar sus propiedades',\n no_fields: 'Añade campos a tu formulario',\n base: {\n name: 'Identificador',\n required: 'Obligatorio',\n icon: 'Ícono externo',\n label: 'Etiqueta de campo',\n tip: 'Sugerencia',\n tip_tip: 'Se muestra debajo',\n new_line: 'Saltar línea',\n col_span: 'Ancho',\n col_span_tip: 'Cuantas columnas ocupa el campo',\n },\n extra: {\n iconColor: 'Color de ícono externo',\n tooltip: 'Información adicional',\n internalIcon: 'Ícono interno',\n internalIconColor: 'Color del ícono interno',\n internalColorScale: 'Escala de color interna',\n internalColorScale_tip: 'Valores para dibujar la escala',\n internalColorScaleOrder: 'Orden de escala de color',\n internalColorScaleOrder_tip: 'Ascendente o descendente',\n placeholder: 'Placeholder',\n placeholder_tip: 'Texto inicial del campo',\n minLength: 'Largo mínimo',\n minLength_tip: 'Cantidad mínima de caracteres',\n maxLength: 'Largo máximo',\n maxLength_tip: 'Cantidad máxima de caracteres',\n showCounter: 'Mostrar contador',\n showCounter_tip: 'Cuenta caracteres ingresados',\n voiceToTextEnabled: 'Habilitar voz a texto',\n voiceToTextEnabled_tip: 'Permite dictado por voz',\n textareaResize: 'Auto ajuste de altura',\n textareaResize_tip: 'Ajusta la altura según contenido',\n resizeMinRows: 'Filas mínimas',\n resizeMinRows_tip: 'Filas mínimas iniciales',\n resizeMaxRows: 'Filas máximas',\n resizeMaxRows_tip: 'Filas máximas iniciales',\n min: 'Mínimo',\n min_tip: 'Valor mínimo permitido',\n max: 'Máximo',\n max_tip: 'Valor máximo permitido',\n step: 'Paso',\n step_tip: 'Incremento entre valores',\n sliderInterval: 'Intervalo del deslizador',\n sliderInterval_tip: 'Espacio entre marcas',\n sliderMarks: 'Marcas del deslizador',\n sliderMarks_tip: 'Cantidad de marcas',\n monthMode: 'Modo mes',\n monthMode_tip: 'Seleccionar fecha por mes',\n monthDay: 'Día del mes',\n monthDay_tip: 'Elegir primer o último día',\n minDate: 'Fecha mínima',\n minDate_tip: 'Fecha mínima permitida',\n maxDate: 'Fecha máxima',\n maxDate_tip: 'Fecha máxima permitida',\n timeInterval: 'Intervalo de hora',\n timeInterval_tip: 'Paso en minutos',\n fileTypes: 'Tipos de archivo',\n fileTypes_tip: 'Extensiones separadas por coma',\n poolEnabledListView: 'Ver lista habilitada',\n poolEnabledListView_tip: 'Mostrar opciones en lista',\n poolTitle: 'Título del listado',\n poolTitle_tip: 'Título del encabezado',\n options: 'Opciones',\n options_tip: 'Formato JSON: [{id:1,text:\"A\"}]',\n multyEnabled: 'Múltiple',\n multyEnabled_tip: 'Permite seleccionar varios ítems',\n searchFn: 'Función de búsqueda',\n searchFn_tip: 'Función para buscar',\n searchDisplayFn: 'Función de texto de opción',\n searchDisplayFn_tip: 'Función para mostrar etiqueta',\n searchIsEnabledFn: 'Función de habilitación',\n searchIsEnabledFn_tip: 'Función para habilitar o deshabilitar opción',\n pattern: 'Patrón',\n pattern_tip: 'Expresión regular en texto',\n searchApi: 'API de búsqueda',\n iaValidation: 'Validación IA',\n iaValidationPrompt: 'Prompt de validación IA',\n searchApi_tip: 'URL para obtener opciones de búsqueda',\n optionsSourceKey: 'Fuente de opciones',\n optionsSourceKey_tip: 'Clave lógica registrada por la aplicación consumidora',\n optionsSourceIdField: 'Campo ID de opción',\n optionsSourceIdField_tip: 'Ruta del valor usado como id. Ejemplo: id',\n optionsSourceTextField: 'Campo texto de opción',\n optionsSourceTextField_tip: 'Ruta del valor usado como texto. Ejemplo: name',\n optionsSourceTextTemplate: 'Plantilla de texto',\n optionsSourceTextTemplate_tip: 'Ejemplo: {{name}} ({{id}})',\n optionsSourceDependsOn: 'Depende de',\n optionsSourceDependsOn_tip: 'Identificador del campo padre que dispara la recarga',\n optionsSourceParamName: 'Nombre del parámetro',\n optionsSourceParamName_tip: 'Nombre con el que se envía el valor dependiente',\n selectNullable_tip: 'Permite seleccionar una opción vacía',\n selectSearchEnabled_tip: 'Habilita búsqueda entre opciones',\n selectNullable: 'Permitir opción vacía',\n selectSearchEnabled: 'Habilitar búsqueda',\n },\n options_editor: {\n title: 'Opciones',\n code_label: 'Código',\n name_label: 'Etiqueta',\n code_placeholder: 'ID',\n display_name_placeholder: 'Nombre para mostrar',\n add_option: 'Nueva opción',\n },\n field_editor: {\n dependency_title: 'Dependencia',\n dependency_description: 'Este campo solo se muestra si se cumple la regla:',\n add_relation: 'Agregar relación',\n remove_relation: 'Eliminar relación',\n basic: 'Básico',\n parent: 'Padre',\n operator: 'Operador',\n value: 'Valor',\n expected_value: 'Valor esperado',\n style: 'Estilo',\n advanced: 'Avanzado',\n duplicate: 'Duplicar',\n delete: 'Eliminar',\n show_advanced: 'Mostrar avanzado',\n hide_advanced: 'Ocultar avanzado',\n },\n validation: {\n duplicate_identifier: 'El identificador \"{{identifier}}\" se está usando más de una vez.',\n duplicate_identifier_title: 'Error de validación',\n }\n },\n validation: {\n invalid: '{{field}} es invalido.',\n required: '{{field}} es obligatorio.',\n min: '{{field}} debe ser mayor o igual a {{min}}.',\n max: '{{field}} debe ser menor o igual a {{max}}.',\n minlength: '{{field}} debe tener al menos {{requiredLength}} caracteres.',\n maxlength: '{{field}} no puede superar {{requiredLength}} caracteres.',\n pattern: '{{field}} no tiene el formato correcto.',\n },\n clipboard: {\n copy_error: 'No se pudo copiar:',\n },\n} as const;\n","import { Inject, Injectable, InjectionToken, Optional, Provider } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { DICTIONARY_EN } from '../translate/dictionary.en';\r\nimport { DICTIONARY_ES } from '../translate/dictionary.es';\r\n\r\nexport type UicLanguage = 'es' | 'en';\r\ntype DictionaryNode = Record<string, unknown>;\r\n\r\nexport interface UicTranslateConfig {\r\n defaultLanguage?: UicLanguage;\r\n}\r\n\r\nexport const UIC_TRANSLATE_CONFIG = new InjectionToken<UicTranslateConfig>('UIC_TRANSLATE_CONFIG');\r\n\r\nexport function provideUicTranslateConfig(config: UicTranslateConfig): Provider {\r\n return {\r\n provide: UIC_TRANSLATE_CONFIG,\r\n useValue: config,\r\n };\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UicTranslateService {\r\n private readonly languageState: BehaviorSubject<UicLanguage>;\r\n private readonly dictionaries: Record<UicLanguage, DictionaryNode> = {\r\n es: DICTIONARY_ES as unknown as DictionaryNode,\r\n en: DICTIONARY_EN as unknown as DictionaryNode,\r\n };\r\n\r\n constructor(\r\n @Optional() @Inject(UIC_TRANSLATE_CONFIG) config?: UicTranslateConfig\r\n ) {\r\n const initialLanguage = config?.defaultLanguage ?? 'es';\r\n this.languageState = new BehaviorSubject<UicLanguage>(initialLanguage);\r\n }\r\n\r\n get language$(): Observable<UicLanguage> {\r\n return this.languageState.asObservable();\r\n }\r\n\r\n get language(): UicLanguage {\r\n return this.languageState.value;\r\n }\r\n\r\n setLanguage(language: UicLanguage): void {\r\n if (this.languageState.value !== language) {\r\n this.languageState.next(language);\r\n }\r\n }\r\n\r\n translate(\r\n keyOrText: string | null | undefined,\r\n params?: Record<string, string | number | null | undefined>\r\n ): string {\r\n if (!keyOrText) return '';\r\n const rawValue =\r\n this.resolve(this.dictionaries[this.language], keyOrText) ??\r\n this.resolve(this.dictionaries.es, keyOrText) ??\r\n keyOrText;\r\n return this.interpolate(rawValue, params);\r\n }\r\n\r\n private resolve(dictionary: DictionaryNode, key: string): string | null {\r\n const parts = key.split('.');\r\n let current: unknown = dictionary;\r\n for (const part of parts) {\r\n if (!current || typeof current !== 'object') {\r\n return null;\r\n }\r\n current = (current as DictionaryNode)[part];\r\n }\r\n return typeof current === 'string' ? current : null;\r\n }\r\n\r\n private interpolate(\r\n value: string,\r\n params?: Record<string, string | number | null | undefined>\r\n ): string {\r\n if (!params) return value;\r\n return value.replace(/\\{\\{\\s*([\\w.-]+)\\s*\\}\\}/g, (_match, token) => {\r\n const replacement = params[token];\r\n return replacement == null ? '' : String(replacement);\r\n });\r\n }\r\n}\r\n","import { ChangeDetectorRef, OnDestroy, Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { UicTranslateService } from '../services/translate.service';\r\n\r\n@Pipe({\r\n name: 'uicTranslate',\r\n standalone: true,\r\n pure: false,\r\n})\r\nexport class UicTranslatePipe implements PipeTransform, OnDestroy {\r\n private readonly translateService = inject(UicTranslateService);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n private readonly subscription: Subscription = this.translateService.language$.subscribe(() =>\r\n this.cdr.markForCheck()\r\n );\r\n\r\n transform(\r\n keyOrText: string | null | undefined,\r\n params?: Record<string, string | number | null | undefined>\r\n ): string {\r\n return this.translateService.translate(keyOrText, params);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, forwardRef, inject, Input, OnChanges, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport {\r\n Overlay,\r\n OverlayRef,\r\n FlexibleConnectedPositionStrategy,\r\n ConnectedPosition,\r\n} from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { ButtonColor, UicButtonComponent } from '../../button/button.component';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\ntype CalendarView = 'days' | 'months' | 'years';\r\nconst base = createValueAccessor<string>();\r\n\r\n@Component({\r\n selector: 'ui-date-picker',\r\n imports: [CommonModule, UicButtonComponent, InputWrapperComponent, UicTranslatePipe],\r\n templateUrl: './date-picker.component.html',\r\n styleUrls: ['./date-picker.component.scss','../input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicDatePickerComponent),\r\n multi: true\r\n }\r\n ],\r\n})\r\nexport class UicDatePickerComponent extends base implements OnChanges {\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() internalIcon = ''; //Icono interno\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() disabled = false;\r\n // TEXTO\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n // FUNCTIONS\r\n @Input() max = '';\r\n @Input() min = '';\r\n @Input() justMonth = false;\r\n @Input() monthDay: 'last' | 'first' = 'first';\r\n\r\n @ViewChild('calendarTemplate') calendarTemplate!: TemplateRef<any>;\r\n private overlayRef!: OverlayRef;\r\n\r\n // Fijos\r\n months:string[] = Array.from({ length: 12 }, (_, i) => new Date(2000, i, 1).toLocaleString('default', { month: 'short' }));\r\n today: Date = new Date();\r\n currentYear = +this.today.getFullYear();\r\n maxDate:Date|null= null;\r\n minDate:Date|null=null;\r\n\r\n // Dinámicos\r\n view: CalendarView = 'days';\r\n paintedDate:Date|null = null;\r\n selectedDate = new Date();\r\n selectedYear = this.currentYear;\r\n selectedMonth = null;\r\n monthWeeks:(Date|null)[][] = []; // Arreglo de fechas\r\n decadeRange:number[]=[];\r\n displayValue = '';\r\n\r\n get inputPlaceholder(): string {\r\n return this.justMonth ? 'mm/yyyy' : 'dd/mm/yyyy';\r\n }\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n ngOnInit(){\r\n this.monthWeeks = this.getWeeks();\r\n this.minDate = this.parseDateLimits(this.min);\r\n this.maxDate = this.parseDateLimits(this.max);\r\n this.applyValue(this.value);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['min'] || changes['max']) {\r\n this.minDate = this.parseDateLimits(this.min);\r\n this.maxDate = this.parseDateLimits(this.max);\r\n\r\n if (this.paintedDate && !this.isWithinLimits(this.paintedDate)) {\r\n this.clearValue(true);\r\n } else if (this.value) {\r\n this.applyValue(this.value);\r\n }\r\n }\r\n }\r\n\r\n // --- Overlay ---\r\n overlayPositions: ConnectedPosition[] =[\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]\r\n\r\n openCalendar() {\r\n if ( this.disabled ) return;\r\n\r\n if (this.overlayRef) {\r\n this.closeCalendar();\r\n }\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy =\r\n this.overlay.position()\r\n .flexibleConnectedTo(this.host.nativeElement.querySelector('.fakeinput'))\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(false)\r\n .withPush(false);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n });\r\n\r\n const portal = new TemplatePortal(this.calendarTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.closeCalendar());\r\n\r\n this.view = this.justMonth ? 'months' : 'days';\r\n if (this.justMonth) {\r\n this.decadeRange = this.getDecadeRange();\r\n }\r\n this.setCurrentViewDate(this.getInitialViewDate());\r\n }\r\n\r\n closeCalendar() {\r\n if (this.overlayRef) {\r\n this.onTouched();\r\n this.overlayRef.dispose();\r\n this.overlayRef = null!;\r\n }\r\n }\r\n\r\n get monthName(): string {\r\n return this.selectedDate.toLocaleString('default', { month: 'long' });\r\n }\r\n \r\n getDecadeRange(): number[] {\r\n const start = Math.floor(this.selectedYear / 20) * 20;\r\n return Array.from({ length: 20 }, (_, i) => start + i);\r\n }\r\n\r\n getWeeks(): (Date | null)[][] {\r\n const weeks: (Date | null)[][] = [];\r\n const firstDay = new Date(this.selectedYear, this.selectedDate.getMonth(), 1);\r\n const lastDay = new Date(this.selectedYear, this.selectedDate.getMonth() + 1, 0);\r\n\r\n let current = new Date(firstDay);\r\n current.setDate(current.getDate() - current.getDay());\r\n\r\n while (current <= lastDay || current.getDay() !== 0) {\r\n const week: (Date | null)[] = [];\r\n for (let i = 0; i < 7; i++) {\r\n week.push(\r\n current.getMonth() === this.selectedDate.getMonth()\r\n ? new Date(current)\r\n : null\r\n );\r\n current.setDate(current.getDate() + 1);\r\n }\r\n weeks.push(week);\r\n }\r\n return weeks;\r\n }\r\n\r\n // --- Navegación ---\r\n prev() {\r\n if (this.view === 'days') {\r\n const isJan = this.selectedDate.getMonth() == 0;\r\n const offsetMonth = isJan? -11 : 1;\r\n if ( isJan){\r\n this.selectedYear--;\r\n }\r\n this.selectedDate = new Date(this.selectedYear, this.selectedDate.getMonth() - offsetMonth, 1);\r\n this.monthWeeks = this.getWeeks();\r\n } else if (this.view === 'months') {\r\n this.selectedYear--;\r\n this.selectedDate = new Date(this.selectedYear, this.selectedDate.getMonth(), 1);\r\n } else {\r\n this.selectedYear-=20\r\n this.selectedDate = new Date(this.selectedYear, this.selectedDate.getMonth(), 1);\r\n this.decadeRange = this.getDecadeRange();\r\n }\r\n }\r\n\r\n next() {\r\n if (this.view === 'days') {\r\n const isDec = this.selectedDate.getMonth() == 11;\r\n const offsetMonth = isDec? -11 : 1;\r\n if ( isDec){\r\n this.selectedYear++;\r\n }\r\n this.selectedDate = new Date(this.selectedYear, this.selectedDate.getMonth() + offsetMonth, 1);\r\n this.monthWeeks = this.getWeeks();\r\n } else if (this.view === 'months') {\r\n this.selectedYear++;\r\n this.selectedDate = new Date(this.selectedYear, this.selectedDate.getMonth(), 1);\r\n } else {\r\n this.selectedYear+=20;\r\n this.selectedDate = new Date(this.selectedYear, this.selectedDate.getMonth(), 1);\r\n this.decadeRange = this.getDecadeRange();\r\n }\r\n }\r\n\r\n // --- Cambio de vistas ---\r\n changeView() {\r\n if (this.view === 'days') {\r\n if (!this.justMonth) {\r\n this.view = 'months';\r\n }\r\n } else if (this.view === 'months') {\r\n this.view = 'years';\r\n this.decadeRange = this.getDecadeRange();\r\n }\r\n }\r\n selectYear(year: number) {\r\n this.selectedYear = year;\r\n this.selectedDate = new Date(year, this.selectedDate.getMonth(), 1);\r\n this.view = 'months';\r\n }\r\n selectMonth(monthIndex: number) {\r\n if (this.justMonth) {\r\n const monthDate = this.buildMonthDate(this.selectedYear, monthIndex);\r\n if (!this.isWithinLimits(monthDate)) {\r\n return;\r\n }\r\n this.selectedDate = new Date(this.selectedYear, monthIndex, 1);\r\n this.value = this.toIsoString(monthDate);\r\n this.displayValue = this.formatDisplay(monthDate);\r\n this.paintedDate = monthDate;\r\n this.setCurrentViewDate(monthDate);\r\n this.notifyChange(this.value);\r\n this.closeCalendar();\r\n return;\r\n }\r\n this.selectedDate = new Date(this.selectedYear, monthIndex, 1);\r\n this.monthWeeks = this.getWeeks();\r\n this.view = 'days';\r\n }\r\n\r\n selectDate(date: Date) {\r\n if (this.justMonth) {\r\n return;\r\n }\r\n const normalized = this.normalizeDate(date);\r\n this.value = this.toIsoString(normalized);\r\n this.displayValue = this.formatDisplay(normalized);\r\n this.notifyChange(this.value);\r\n this.paintedDate = normalized;\r\n this.setCurrentViewDate(normalized);\r\n this.closeCalendar();\r\n }\r\n\r\n isToday(day:Date|null){\r\n if ( day ){\r\n const dayStr = day?.toISOString().split(\"T\")[0];\r\n const today =(new Date()).toISOString().split(\"T\")[0];\r\n return dayStr == today;\r\n }else{\r\n return false;\r\n }\r\n }\r\n\r\n isPainted(day:Date|null){\r\n if ( day && this.paintedDate){\r\n const dayStr = day?.toISOString().split(\"T\")[0];\r\n const today = this.paintedDate.toISOString().split(\"T\")[0];\r\n return dayStr == today;\r\n }else{\r\n return false;\r\n }\r\n }\r\n\r\n isThisMonth(m:string){\r\n const monthId = this.months.findIndex(f=>f===m) + 1;\r\n const dayStr = this.selectedYear + \"-\" + monthId;\r\n const thisMonth =(new Date()).toISOString().split(\"T\")[0].substring(0,7).replace(\"-0\",\"-\");\r\n return dayStr == thisMonth;\r\n }\r\n\r\n // MÍNIMO Y MÁXIMO\r\n parseDateLimits(date: string | Date | null | undefined) {\r\n if (!date) {\r\n return null;\r\n }\r\n\r\n if (date instanceof Date) {\r\n return isNaN(date.getTime()) ? null : this.normalizeDate(date);\r\n }\r\n\r\n const trimmed = date.trim();\r\n if (!trimmed) {\r\n return null;\r\n }\r\n\r\n const isoMatch = trimmed.match(/^(\\d{4})-(\\d{1,2})-(\\d{1,2})(?:$|[T\\s])/);\r\n if (isoMatch) {\r\n const [, year, month, day] = isoMatch;\r\n const parsed = new Date(+year, +month - 1, +day);\r\n return isNaN(parsed.getTime()) ? null : this.normalizeDate(parsed);\r\n }\r\n\r\n const isoMonthMatch = trimmed.match(/^(\\d{4})-(\\d{1,2})(?:$|[T\\s])/);\r\n if (isoMonthMatch) {\r\n const [, year, month] = isoMonthMatch;\r\n const baseDay =\r\n this.monthDay === 'last'\r\n ? new Date(+year, +month, 0).getDate()\r\n : 1;\r\n const parsed = new Date(+year, +month - 1, baseDay);\r\n return isNaN(parsed.getTime()) ? null : this.normalizeDate(parsed);\r\n }\r\n\r\n const parsed = new Date(trimmed);\r\n return isNaN(parsed.getTime()) ? null : this.normalizeDate(parsed);\r\n }\r\n\r\n cleanInput(){\r\n this.clearValue(true);\r\n this.closeCalendar();\r\n }\r\n pickToday(){\r\n const today = this.normalizeDate(new Date());\r\n const target = this.justMonth ? this.buildMonthDate(today.getFullYear(), today.getMonth()) : today;\r\n this.value = this.toIsoString(target);\r\n this.displayValue = this.formatDisplay(target);\r\n this.notifyChange(this.value);\r\n this.paintedDate = target;\r\n this.setCurrentViewDate(target);\r\n this.closeCalendar();\r\n }\r\n\r\n onInputChange(event: Event) {\r\n this.displayValue = (event.target as HTMLInputElement).value;\r\n }\r\n\r\n onInputBlur() {\r\n this.onTouched();\r\n const trimmed = this.displayValue.trim();\r\n if (!trimmed) {\r\n this.clearValue(true);\r\n return;\r\n }\r\n\r\n const parsed = this.parseDisplay(trimmed);\r\n if (!parsed || !this.isWithinLimits(parsed)) {\r\n this.clearValue(true);\r\n return;\r\n }\r\n\r\n const normalized = this.normalizeDate(parsed);\r\n this.displayValue = this.formatDisplay(normalized);\r\n this.value = this.toIsoString(normalized);\r\n this.paintedDate = normalized;\r\n this.setCurrentViewDate(normalized);\r\n this.notifyChange(this.value);\r\n }\r\n\r\n onInputKeydown(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n (event.target as HTMLInputElement).blur();\r\n }\r\n }\r\n\r\n override writeValue(value: string | null): void {\r\n super.writeValue(value as any);\r\n this.applyValue(value);\r\n }\r\n\r\n private applyValue(value: string | null | undefined) {\r\n const parsed = this.parseDateLimits(value ?? '');\r\n if (parsed) {\r\n const effective = this.justMonth\r\n ? this.buildMonthDate(parsed.getFullYear(), parsed.getMonth())\r\n : parsed;\r\n if (this.justMonth && value) {\r\n this.value = this.toIsoString(effective);\r\n }\r\n this.displayValue = this.formatDisplay(effective);\r\n this.paintedDate = effective;\r\n this.setCurrentViewDate(effective);\r\n } else {\r\n this.clearValue(false, false);\r\n }\r\n }\r\n\r\n private getInitialViewDate(): Date {\r\n if (this.paintedDate) {\r\n return this.paintedDate;\r\n }\r\n const today = this.normalizeDate(new Date());\r\n if (this.minDate) {\r\n const minMonthStart = new Date(this.minDate.getFullYear(), this.minDate.getMonth(), 1);\r\n const currentMonthStart = new Date(today.getFullYear(), today.getMonth(), 1);\r\n if (minMonthStart > currentMonthStart) {\r\n return minMonthStart;\r\n }\r\n }\r\n return today;\r\n }\r\n\r\n isTodayAvailable(): boolean {\r\n const today = this.normalizeDate(new Date());\r\n const target = this.justMonth\r\n ? this.buildMonthDate(today.getFullYear(), today.getMonth())\r\n : today;\r\n return this.isWithinLimits(target);\r\n }\r\n\r\n private clearValue(emit = false, resetValue = true) {\r\n this.displayValue = '';\r\n this.paintedDate = null;\r\n if (resetValue) {\r\n this.value = '';\r\n }\r\n if (emit) {\r\n this.notifyChange(this.value);\r\n }\r\n }\r\n\r\n private setCurrentViewDate(date: Date) {\r\n this.selectedYear = date.getFullYear();\r\n this.selectedDate = new Date(date.getFullYear(), date.getMonth(), 1);\r\n this.monthWeeks = this.getWeeks();\r\n this.decadeRange = this.getDecadeRange();\r\n }\r\n\r\n private formatDisplay(date: Date): string {\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const year = date.getFullYear();\r\n if (this.justMonth) {\r\n return `${month}/${year}`;\r\n }\r\n const day = String(date.getDate()).padStart(2, '0');\r\n return `${day}/${month}/${year}`;\r\n }\r\n\r\n private parseDisplay(text: string): Date | null {\r\n const normalized = text.trim();\r\n if (this.justMonth) {\r\n const matchMonth = normalized.match(/^(\\d{1,2})[\\/\\-.](\\d{4})$/);\r\n if (!matchMonth) {\r\n return null;\r\n }\r\n const month = parseInt(matchMonth[1], 10);\r\n const year = parseInt(matchMonth[2], 10);\r\n if (month < 1 || month > 12) return null;\r\n return this.buildMonthDate(year, month - 1);\r\n }\r\n\r\n const match = normalized.match(/^(\\d{1,2})[\\/\\-.](\\d{1,2})[\\/\\-.](\\d{4})$/);\r\n if (!match) {\r\n return null;\r\n }\r\n\r\n const day = parseInt(match[1], 10);\r\n const month = parseInt(match[2], 10);\r\n const year = parseInt(match[3], 10);\r\n\r\n if (month < 1 || month > 12) return null;\r\n if (day < 1 || day > 31) return null;\r\n\r\n const candidate = new Date(year, month - 1, day);\r\n if (\r\n candidate.getFullYear() !== year ||\r\n candidate.getMonth() !== month - 1 ||\r\n candidate.getDate() !== day\r\n ) {\r\n return null;\r\n }\r\n\r\n return candidate;\r\n }\r\n\r\n private isWithinLimits(date: Date): boolean {\r\n const normalized = this.normalizeDate(date);\r\n if (this.minDate && normalized < this.minDate) {\r\n return false;\r\n }\r\n if (this.maxDate && normalized > this.maxDate) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n private normalizeDate(date: Date): Date {\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n }\r\n\r\n private toIsoString(date: Date): string {\r\n return date.toISOString().split('T')[0];\r\n }\r\n\r\n private buildMonthDate(year: number, monthIndex: number): Date {\r\n const day =\r\n this.monthDay === 'last'\r\n ? new Date(year, monthIndex + 1, 0).getDate()\r\n : 1;\r\n return this.normalizeDate(new Date(year, monthIndex, day));\r\n }\r\n\r\n isMonthDisabled(monthIndex: number): boolean {\r\n if (!this.justMonth) {\r\n return false;\r\n }\r\n const candidate = this.buildMonthDate(this.selectedYear, monthIndex);\r\n return !this.isWithinLimits(candidate);\r\n }\r\n\r\n isSelectedMonth(monthIndex: number): boolean {\r\n if (!this.paintedDate) {\r\n return false;\r\n }\r\n return (\r\n this.paintedDate.getFullYear() === this.selectedYear &&\r\n this.paintedDate.getMonth() === monthIndex\r\n );\r\n }\r\n}\r\n","<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div class=\"fakeinput-wrapp \" >\r\n <div class=\"fakeinput \" \r\n [ngClass]=\"{ 'errorinput': error, 'disabledinput': disabled }\">\r\n @if (internalIcon) {\r\n <i class=\"input-internalicon-m {{ internalIcon }}\"></i>\r\n }\r\n <input\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"inputPlaceholder\"\r\n [value]=\"displayValue\"\r\n inputmode=\"numeric\"\r\n autocomplete=\"off\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur()\"\r\n (keydown)=\"onInputKeydown($event)\"\r\n (click)=\"openCalendar()\"\r\n />\r\n </div>\r\n <!-- Overlay Template -->\r\n <ng-template #calendarTemplate>\r\n <div class=\"calendar\">\r\n <div class=\"calendar-header\">\r\n <span (click)=\"changeView()\">\r\n @if (view === 'days') {\r\n {{ monthName }} de {{ selectedYear }}\r\n } @else if (view === 'months') {\r\n {{ selectedYear }}\r\n } @else {\r\n {{ decadeRange[0] }} - {{ decadeRange[decadeRange.length - 1] }}\r\n }\r\n </span>\r\n <ui-button\r\n size=\"s\"\r\n type=\"ghost\"\r\n [iconOnly]=\"true\"\r\n icon=\"ri-arrow-drop-up-line\"\r\n (click)=\"prev()\"\r\n ><</ui-button\r\n >\r\n <ui-button\r\n size=\"s\"\r\n type=\"ghost\"\r\n [iconOnly]=\"true\"\r\n icon=\"ri-arrow-drop-down-line\"\r\n (click)=\"next()\"\r\n >></ui-button\r\n >\r\n </div>\r\n <!-- Vista Days -->\r\n @if (view === 'days') {\r\n <div class=\"calendar-grid\">\r\n @for (d of ['DO','LU','MA','MI','JU','VI','SA']; track $index) {\r\n <div class=\"weekday\">{{ d }}</div>\r\n } @for (week of monthWeeks; track $index) { @for (day of week;\r\n track $index) {\r\n <button\r\n class=\"day\"\r\n [disabled]=\"\r\n (minDate && day ? day < minDate : false) ||\r\n (maxDate && day ? day > maxDate : false)\r\n \"\r\n [class.today]=\"isToday(day)\"\r\n [class.day-selected]=\"isPainted(day)\"\r\n [class.empty]=\"!day\"\r\n (click)=\"day && selectDate(day)\"\r\n >\r\n {{ day?.getDate() }}\r\n </button>\r\n } }\r\n </div>\r\n }\r\n <!-- Vista Months -->\r\n @if (view === 'months') {\r\n <div class=\"calendar-grid months\">\r\n @for (m of months; let i = $index; track i) {\r\n <button\r\n class=\"day\"\r\n [class.today]=\"isThisMonth(m)\"\r\n [class.day-selected]=\"isSelectedMonth(i)\"\r\n [disabled]=\"isMonthDisabled(i)\"\r\n (click)=\"selectMonth(i)\"\r\n >\r\n {{ m }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n <!-- Vista Years -->\r\n @if (view === 'years') {\r\n <div class=\"calendar-grid years\">\r\n @for (y of decadeRange; track $index) {\r\n <button\r\n class=\"day\"\r\n [class.today]=\"y == currentYear\"\r\n (click)=\"selectYear(y)\"\r\n >\r\n {{ y }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n <div class=\"calendar-footer\">\r\n <ui-button\r\n color=\"red\"\r\n size=\"s\"\r\n type=\"ghost\"\r\n (click)=\"cleanInput()\"\r\n >{{'common.clear' | uicTranslate}}</ui-button\r\n >\r\n @if (isTodayAvailable()) {\r\n <ui-button\r\n color=\"blue\"\r\n size=\"s\"\r\n type=\"ghost\"\r\n (click)=\"pickToday()\"\r\n >{{'common.today' | uicTranslate}}</ui-button\r\n >\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ui-input-wrapper>\r\n","import { Alert } from './alert.model';\r\n\r\nlet nextId = 1;\r\n\r\nexport function createSuccessAlert(\r\n message: string,\r\n options?: Partial<Alert>\r\n): Alert {\r\n return {\r\n id: nextId++,\r\n message,\r\n icon:'ri-check-line',\r\n showProgressBar:true,\r\n type: 'success',\r\n duration: 3000,\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createErrorAlert(\r\n message: string,\r\n options?: Partial<Alert>\r\n): Alert {\r\n return {\r\n id: nextId++,\r\n message,\r\n showProgressBar:true,\r\n type: 'error',\r\n icon:'ri-error-warning-line',\r\n duration: 5000,\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createWarningAlert(\r\n message: string,\r\n options?: Partial<Alert>\r\n): Alert {\r\n return {\r\n id: nextId++,\r\n message,\r\n showProgressBar:true,\r\n type: 'warning',\r\n icon:'ri-alarm-warning-line',\r\n duration: 4000,\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createInfoAlert(\r\n message: string,\r\n options?: Partial<Alert>\r\n): Alert {\r\n return {\r\n id: nextId++,\r\n showProgressBar:true,\r\n message,\r\n icon:'ri-information-2-line',\r\n type: 'info',\r\n duration: 3000,\r\n ...options,\r\n };\r\n}","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { Alert, AlertConfigParams } from '../components/push-alerts/alert.model';\r\nimport { createErrorAlert, createSuccessAlert, createWarningAlert } from '../components/push-alerts/alert.helpers';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UicPushAlertService {\r\n\r\n autoIncId = 0;\r\n private readonly alerts$ = new Subject<Alert>();\r\n\r\n get stream() {\r\n return this.alerts$.asObservable();\r\n }\r\n\r\n show(alertData:AlertConfigParams) {\r\n this.autoIncId++;\r\n const alert: Alert = {...alertData,id:this.autoIncId};\r\n this.alerts$.next( alert );\r\n }\r\n\r\n success(message: string, options?: Partial<Alert>) {\r\n this.show(createSuccessAlert(message, options));\r\n }\r\n\r\n error(message: string, options?: Partial<Alert>) {\r\n this.show(createErrorAlert(message, options));\r\n }\r\n\r\n warning(message: string, options?: Partial<Alert>) {\r\n this.show(createWarningAlert(message, options));\r\n }\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, forwardRef, inject, Input, ViewChild } from '@angular/core';\r\nimport { ButtonColor, UicButtonComponent } from '../../button/button.component';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { UicPushAlertService } from '../../../services/push-alert.service';\r\n\r\nexport type UicFileInputValue = { name: string; blob?: Blob; path?: string; fileUid?: string };\r\n\r\nconst base = createValueAccessor<UicFileInputValue[]>();\r\n\r\n@Component({\r\n selector: 'ui-file-input',\r\n imports: [CommonModule,UicButtonComponent, InputWrapperComponent],\r\n templateUrl: './file-input.component.html',\r\n styleUrls: ['../input.component.scss','./file-input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicFileInputComponent),\r\n multi: true\r\n }\r\n ],\r\n})\r\nexport class UicFileInputComponent extends base {\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() internalIcon = ''; //Icono interno\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() size: 's' | 'm' | 'l' = 'm'; // tamaño general del input\r\n // TEXTO\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n // FUNCTIONS\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n @Input() multy = false;\r\n @Input() fileTypes: string[] | string | null = null;\r\n @Input() fileUidResolverFn?: (fileUid: string) => void;\r\n\r\n @ViewChild('fileInput') private fileInput?: ElementRef<HTMLInputElement>;\r\n private readonly push = inject(UicPushAlertService);\r\n\r\n override value: UicFileInputValue[] = [];\r\n files: UicFileInputValue[] = [];\r\n isDragging = false;\r\n\r\n get acceptAttribute(): string | null {\r\n if (!this.fileTypes || this.allFilesAllowed) {\r\n return null;\r\n }\r\n return Array.isArray(this.fileTypes) ? this.fileTypes.join(',') : this.fileTypes;\r\n }\r\n\r\n private get allFilesAllowed(): boolean {\r\n const fileTypes = Array.isArray(this.fileTypes) ? this.fileTypes : [this.fileTypes];\r\n return fileTypes.some((type) => typeof type === 'string' && type.trim().toUpperCase() === 'ALL');\r\n }\r\n\r\n openFileBrowser(): void {\r\n if (this.disabled || this.loading) {\r\n return;\r\n }\r\n this.fileInput?.nativeElement.click();\r\n }\r\n\r\n onNativeInputChange(event: Event): void {\r\n const input = event.target as HTMLInputElement | null;\r\n if (!input || !input.files || this.disabled || this.loading) {\r\n return;\r\n }\r\n\r\n const selectedFiles = Array.from(input.files);\r\n this.processIncomingFiles(selectedFiles);\r\n\r\n input.value = '';\r\n }\r\n\r\n removeFile(index: number): void {\r\n if (this.disabled || this.loading) {\r\n return;\r\n }\r\n const updated = this.files.filter((_, i) => i !== index);\r\n this.applyFiles(updated);\r\n }\r\n\r\n onDragOver(event: DragEvent): void {\r\n if (this.disabled || this.loading) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (event.dataTransfer) {\r\n event.dataTransfer.dropEffect = 'copy';\r\n }\r\n this.isDragging = true;\r\n }\r\n\r\n onDragLeave(event: DragEvent): void {\r\n if (this.disabled || this.loading) {\r\n return;\r\n }\r\n if (event.target === event.currentTarget) {\r\n this.isDragging = false;\r\n }\r\n }\r\n\r\n getIcon(file: UicFileInputValue): string {\r\n const mime = file.blob?.type?.toLowerCase() ?? '';\r\n const extension = file.name.split('.').pop()?.toLowerCase() ?? '';\r\n\r\n if (mime.startsWith('image/') || ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'webp', 'svg'].includes(extension)) {\r\n return 'ri-file-image-line';\r\n }\r\n\r\n if (this.isExcelType(mime, extension)) {\r\n return 'ri-file-excel-line';\r\n }\r\n\r\n if (this.isWordType(mime, extension)) {\r\n return 'ri-file-word-line';\r\n }\r\n\r\n return 'ri-file-line';\r\n }\r\n\r\n onDrop(event: DragEvent): void {\r\n if (this.disabled || this.loading) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging = false;\r\n\r\n const files = event.dataTransfer?.files;\r\n if (!files || files.length === 0) {\r\n return;\r\n }\r\n\r\n this.processIncomingFiles(Array.from(files));\r\n }\r\n\r\n override writeValue(value: UicFileInputValue[] | null): void {\r\n const normalized = Array.isArray(value)\r\n ? value\r\n .filter((item): item is UicFileInputValue => !!item && (!!item.blob || !!item.path || !!item.fileUid))\r\n .map((item) => ({\r\n name:\r\n item.name?.trim() ||\r\n item.path?.split('/').pop()?.split('\\\\').pop() ||\r\n item.fileUid ||\r\n 'file',\r\n blob: item.blob,\r\n path: item.path,\r\n fileUid: item.fileUid,\r\n }))\r\n : [];\r\n this.files = normalized;\r\n super.writeValue(normalized as UicFileInputValue[]);\r\n }\r\n\r\n private processIncomingFiles(fileList: File[]): void {\r\n if (!fileList.length) {\r\n return;\r\n }\r\n\r\n const allowedFiles = this.filterAllowedFiles(fileList);\r\n if (!allowedFiles.length) {\r\n return;\r\n }\r\n\r\n const mapped = allowedFiles.map<UicFileInputValue>((file) => ({\r\n name: file.name,\r\n blob: file,\r\n }));\r\n\r\n const updated = this.multy ? this.mergeFiles(mapped) : mapped.slice(0, 1);\r\n this.applyFiles(updated);\r\n }\r\n\r\n private mergeFiles(newFiles: UicFileInputValue[]): UicFileInputValue[] {\r\n return [...this.files, ...newFiles];\r\n }\r\n\r\n private applyFiles(files: UicFileInputValue[], emit = true): void {\r\n this.files = files;\r\n if (emit) {\r\n const payload = files.map((file) => ({\r\n name: file.name,\r\n blob: file.blob,\r\n path: file.path,\r\n fileUid: file.fileUid,\r\n }));\r\n this.notifyChange(payload);\r\n }\r\n }\r\n\r\n private filterAllowedFiles(files: File[]): File[] {\r\n if (this.allFilesAllowed || !this.acceptAttribute) {\r\n return files;\r\n }\r\n\r\n const acceptTokens = this.acceptAttribute\r\n .split(',')\r\n .map((token) => token.trim().toLowerCase())\r\n .filter(Boolean);\r\n\r\n if (!acceptTokens.length) {\r\n return files;\r\n }\r\n\r\n return files.filter((file) => this.matchesAcceptTokens(file, acceptTokens));\r\n }\r\n\r\n private matchesAcceptTokens(file: File, tokens: string[]): boolean {\r\n const mime = file.type.toLowerCase();\r\n const extension = file.name.includes('.') ? `.${file.name.split('.').pop()!.toLowerCase()}` : '';\r\n\r\n return tokens.some((token) => {\r\n if (!token) {\r\n return false;\r\n }\r\n\r\n if (token.endsWith('/*')) {\r\n const prefix = token.slice(0, -1);\r\n return mime.startsWith(prefix);\r\n }\r\n\r\n if (token.startsWith('.')) {\r\n return token === extension;\r\n }\r\n\r\n return token === mime;\r\n });\r\n }\r\n\r\n private isExcelType(mime: string, extension: string): boolean {\r\n const normalizedExtensionMatches = ['xls', 'xlsx', 'xlsm', 'xlsb'].includes(extension);\r\n return (\r\n mime === 'application/vnd.ms-excel' ||\r\n mime === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||\r\n mime === 'application/vnd.ms-excel.sheet.macroenabled.12' ||\r\n mime === 'application/vnd.ms-excel.sheet.binary.macroenabled.12' ||\r\n mime.includes('spreadsheetml') ||\r\n normalizedExtensionMatches\r\n );\r\n }\r\n\r\n private isWordType(mime: string, extension: string): boolean {\r\n const normalizedExtensionMatches = ['doc', 'docx', 'docm', 'dot', 'dotx'].includes(extension);\r\n return (\r\n mime === 'application/msword' ||\r\n mime === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||\r\n mime === 'application/vnd.ms-word.document.macroenabled.12' ||\r\n mime.includes('wordprocessingml') ||\r\n normalizedExtensionMatches\r\n );\r\n }\r\n\r\n downloadFile(item: UicFileInputValue) {\r\n // Allow downloads in read-only/disabled mode.\r\n // Mutating actions are already blocked in the other handlers.\r\n if (this.loading) {\r\n return;\r\n }\r\n\r\n // Priority: blob > path > fileUid\r\n if (item.blob) {\r\n const url = URL.createObjectURL(item.blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = item.name || 'file';\r\n link.rel = 'noopener';\r\n document.body.appendChild(link);\r\n link.click();\r\n link.remove();\r\n setTimeout(() => URL.revokeObjectURL(url), 0);\r\n return;\r\n }\r\n\r\n if (item.path) {\r\n const link = document.createElement('a');\r\n link.href = item.path;\r\n link.target = '_blank';\r\n link.rel = 'noopener';\r\n link.download = item.name || 'file';\r\n document.body.appendChild(link);\r\n link.click();\r\n link.remove();\r\n return;\r\n }\r\n\r\n if (item.fileUid && this.fileUidResolverFn) {\r\n this.fileUidResolverFn(item.fileUid);\r\n this.push.success('Preparando...');\r\n }\r\n }\r\n}\r\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div class=\"fileinput\" [ngClass]=\"{'errorinput':error, 'disabledinput':disabled, 'dragging':isDragging}\">\r\n <input\n #fileInput\n class=\"fileinput-native\"\n type=\"file\"\n (change)=\"onNativeInputChange($event)\"\n [attr.multiple]=\"multy ? '' : null\"\n [attr.accept]=\"acceptAttribute\"\n [disabled]=\"disabled || loading\"\n />\n @if (internalIcon) {\r\n <i class=\"input-internalicon {{internalIcon}}\" ></i>\r\n }\r\n <div class=\"fileinput-content\" >\r\n @if (!disabled && !loading) {\r\n <ui-button\r\n type=\"bordered\"\r\n color=\"black\"\r\n size=\"s\"\r\n (click)=\"openFileBrowser()\"\r\n >Seleccionar</ui-button>\r\n }\r\n <div\r\n class=\"fileinput-reel\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n @if (!files.length) {\r\n <div class=\"fileinput-empty\">\r\n Aun no hay archivos\r\n </div>\r\n } @else {\r\n @for (item of files; track $index) {\r\n <div class=\"fileinput-item\">\r\n <i class=\"fileinput-item__icon ri {{ getIcon(item) }}\" aria-hidden=\"true\"></i>\r\n <span (click)=\"downloadFile(item)\" class=\"fileinput-item__name\">{{item.name}}</span>\r\n <ui-button\r\n size=\"s\"\r\n [iconOnly]=\"true\"\r\n type=\"ghost\"\r\n icon=\"ri-close-line\"\r\n (click)=\"removeFile($index)\"\r\n [disabled]=\"disabled || loading\"\r\n ></ui-button>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ui-input-wrapper>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonColor } from '../../button/button.component';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\n\r\n@Component({\r\n selector: 'ui-input',\r\n imports: [ CommonModule, InputWrapperComponent],\r\n templateUrl: './input.component.html',\r\n styleUrl: '../input.component.scss'\r\n})\r\nexport class UicInputComponent {\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() internalIcon = ''; //Icono interno\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() size: 's' | 'm' | 'l' = 'm'; // tamaño general del input\r\n // TEXTO\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n // FUNCTIONS\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n @Output() clickButton = new EventEmitter<boolean>();\r\n\r\n\r\n disableBtn = false;\r\n disableButton(){\r\n this.clickButton.emit();\r\n this.disableBtn = true;\r\n setTimeout(() => {\r\n this.disableBtn = false;\r\n }, 200);\r\n }\r\n\r\n \r\n}\r\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\"> \r\n <div class=\"fakeinput\" [ngClass]=\"{'errorinput':error, 'disabledinput':disabled,'loading-input':loading}\">\r\n @if (internalIcon) {\r\n <i class=\"input-internalicon {{internalIcon}} f-{{internalIconColor}}\" ></i>\r\n }\r\n <div class=\"input-container\" >\r\n <ng-content></ng-content>\r\n </div> \r\n </div>\r\n <span class=\"char-counter\" style=\"padding-top: 1px;\" >\r\n <ng-content select=\"[counter]\"></ng-content>\r\n </span>\r\n</ui-input-wrapper>","import { Component, ElementRef, forwardRef, inject, Input, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { AppSelectOption } from '../select/select.component';\r\nimport { UicCheckboxComponent } from '../checkbox/checkbox.component';\r\nimport { ButtonColor } from '../../button/button.component';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\ntype selectId = (number|string)[];\r\nconst base = createValueAccessor<selectId>();\r\n\r\n@Component({\r\n selector: 'ui-multy-select',\r\n imports: [CommonModule, UicCheckboxComponent, FormsModule, InputWrapperComponent, UicTranslatePipe],\r\n templateUrl: './multy-select.component.html',\r\n styleUrls: ['../input.component.scss','./multy-select.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicMultySelectComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicMultySelectComponent extends base{\n\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: 'primary'|'secondary' = 'primary'; //color de ícono externo\r\n @Input() internalIcon = ''; //Icono interno\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() size: 's' | 'm' | 'l' = 'm'; // tamaño general del input\r\n // TEXT\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\n @Input() showSubtitle = false;\n @Input() disabled = false;\n @Input() nonSelectedText = 'select.multy_non_selected';\n @Input() allSelectedText = 'select.multy_all_selected';\n emptyText = 'select.non_selected'\n // FUNCTIONS\n @Input() loading = false;\n @Input() options:AppSelectOption[] = []; \n // MULTY\n allSelected=false;\n selectedSet = new Set<string | number>();\n\n toggleAll(checked: boolean) {\n this.allSelected = checked;\n this.selectedSet.clear();\n if (checked) {\n this.options.forEach(o => {\n const key = o.id??o.text;\n this.selectedSet.add(key);\n });\n }\n this.emitSelection();\n }\n\n toggleOption(id:number|string){\n if (this.selectedSet.has(id)) {\n this.selectedSet.delete(id);\n } else {\n this.selectedSet.add(id);\n }\n this.updateAllSelected();\n this.emitSelection();\n }\n\n updateAllSelected() {\n this.allSelected = this.isAllSelected;\n }\n\n applySelection() {\n this.emitSelection();\n this.closeList();\n }\n\n get selectedLabels(): string[] {\n if (this.selectedSet.size === 0) return [];\n\n const labelsByKey = new Map<string | number, string>(\n this.options.map(option => [option.id ?? option.text, option.text])\n );\n\n return [...this.selectedSet].map(key => labelsByKey.get(key) ?? String(key));\n }\n\n get isAllSelected(): boolean {\n return this.options.length > 0 && this.options.every(option => this.selectedSet.has(option.id ?? option.text));\n }\n\n get hasSelection(): boolean {\n return this.selectedSet.size > 0;\n }\n\n get selectedSummaryText(): string {\n if (!this.hasSelection) return this.nonSelectedText;\n if (this.isAllSelected) return this.allSelectedText;\n return this.selectedLabels.join(', ');\n }\n\n\n\n @ViewChild('dropdownTemplate') dropdownTemplate!: TemplateRef<any>;\n private overlayRef!: OverlayRef;\r\n overlayPositions: ConnectedPosition[] =[\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]\r\n \r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n \r\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['options'] && this.value != null) {\n this.syncSelectionFromValue(this.value);\n }\n }\n\r\n // --- Overlay ---\r\n openList(){\r\n if (this.disabled || this.loading) return;\r\n\r\n if (this.overlayRef) {\r\n this.closeList();\r\n }\r\n\r\n const input = this.host.nativeElement.querySelector('.fakeinput');\r\n const width = input.offsetWidth;\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy =\r\n this.overlay.position()\r\n .flexibleConnectedTo(input)\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(true)\r\n .withPush(false);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n width,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n });\r\n\r\n const portal = new TemplatePortal(this.dropdownTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.closeList());\r\n }\r\n\r\n \r\n closeList() {\n if (this.overlayRef) {\n this.onTouched();\n this.overlayRef.dispose();\n this.overlayRef = null!;\n }\n }\n\n override writeValue(value: (string| number)[] | null): void {\n super.writeValue(value ?? []); \n this.syncSelectionFromValue(value ?? []);\n }\n\n private emitSelection() {\n const result:(string|number)[] = [...this.selectedSet];\n this.notifyChange(result);\n }\n\n private syncSelectionFromValue(value: (string | number)[]) {\n this.selectedSet = new Set(value ?? []);\n this.updateAllSelected();\n }\n}\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div class=\"fakeinput-wrapp\" > \r\n <!-- INPUT -->\r\n <div (click)=\"openList()\" class=\"fakeinput\" #fakeinput \r\n [ngClass]=\"{'errorinput':error, 'disabledinput':disabled, 'loading-input':loading}\" style=\"cursor: pointer;\">\r\n @if (internalIcon) {\r\n <i class=\"input-internalicon {{internalIcon}}\" ></i>\r\n }\r\n <div\n class=\"fakeinput-emptytext multy-summary\"\n [class.disabled-placeholder]=\"disabled && !hasSelection\"\n [class.multy-summary-placeholder]=\"!hasSelection\"\n [class.multy-summary-disabled]=\"disabled\">\n @if (!hasSelection || isAllSelected) {\n {{selectedSummaryText | uicTranslate}}\n } @else {\n {{selectedSummaryText}}\n }\n </div>\n @if (!disabled && !loading) {\n <i class=\"ri-arrow-down-s-line\"></i>\n }\n </div> \r\n <!-- DESPLEGABLE -->\r\n <ng-template #dropdownTemplate >\r\n <div class=\"input-options\">\r\n <div class=\"multyoptions-header\">\r\n <ui-checkbox [noPadding]=\"true\"\r\n [ngModel]=\"allSelected\" \r\n (ngModelChange)=\"toggleAll($event)\"\r\n [placeholder]=\"'common.all' | uicTranslate\"></ui-checkbox>\r\n </div>\r\n <!-- OPCIONES -->\r\n <div class=\"input-option-scroll\"> \r\n @for (option of options; track $index) {\r\n <div (click)=\"toggleOption(option.id??option.text)\" class=\"input-multyoption\">\r\n <ui-checkbox \r\n [ngModel]=\"selectedSet.has(option.id??option.text)\"\r\n [noPadding]=\"true\" \r\n [placeholder]=\"option.text\"></ui-checkbox>\r\n </div> \r\n }\r\n @if (options.length == 0) {\r\n <div class=\"fakeinput-alert t-disabled\">{{'select.empty' | uicTranslate}}</div>\r\n }\r\n </div>\r\n <!-- <div class=\"multyoptions-footer\">\r\n <ui-button (click)=\"closeList()\" color=\"black\" type=\"bordered\" size=\"s\">Cancelar</ui-button>\r\n <ui-button (click)=\"applySelection()\" color=\"black\" size=\"s\">Aplicar</ui-button>\r\n </div> -->\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ui-input-wrapper>\r\n","export interface PhoneCountry {\n name: string;\n iso2: string;\n dialCode: string;\n priority?: number;\n areaCodes?: string[];\n}\n\nexport const PHONE_COUNTRIES: PhoneCountry[] = [\n { name: 'Argentina', iso2: 'ar', dialCode: '54' },\n { name: 'Australia', iso2: 'au', dialCode: '61' },\n { name: 'Bolivia', iso2: 'bo', dialCode: '591' },\n { name: 'Brazil', iso2: 'br', dialCode: '55' },\n { name: 'Canada', iso2: 'ca', dialCode: '1' },\n { name: 'Chile', iso2: 'cl', dialCode: '56' },\n { name: 'China', iso2: 'cn', dialCode: '86' },\n { name: 'Colombia', iso2: 'co', dialCode: '57' },\n { name: 'Costa Rica', iso2: 'cr', dialCode: '506' },\n { name: 'Dominican Republic', iso2: 'do', dialCode: '1', areaCodes: ['809', '829', '849'] },\n { name: 'Ecuador', iso2: 'ec', dialCode: '593' },\n { name: 'El Salvador', iso2: 'sv', dialCode: '503' },\n { name: 'France', iso2: 'fr', dialCode: '33' },\n { name: 'Germany', iso2: 'de', dialCode: '49' },\n { name: 'Guatemala', iso2: 'gt', dialCode: '502' },\n { name: 'Honduras', iso2: 'hn', dialCode: '504' },\n { name: 'Italy', iso2: 'it', dialCode: '39' },\n { name: 'Japan', iso2: 'jp', dialCode: '81' },\n { name: 'Mexico', iso2: 'mx', dialCode: '52' },\n { name: 'Netherlands', iso2: 'nl', dialCode: '31' },\n { name: 'New Zealand', iso2: 'nz', dialCode: '64' },\n { name: 'Panama', iso2: 'pa', dialCode: '507' },\n { name: 'Paraguay', iso2: 'py', dialCode: '595' },\n { name: 'Peru', iso2: 'pe', dialCode: '51' },\n { name: 'Portugal', iso2: 'pt', dialCode: '351' },\n { name: 'Spain', iso2: 'es', dialCode: '34' },\n { name: 'United Kingdom', iso2: 'gb', dialCode: '44' },\n { name: 'United States', iso2: 'us', dialCode: '1' },\n { name: 'Uruguay', iso2: 'uy', dialCode: '598' },\n { name: 'Venezuela', iso2: 've', dialCode: '58' }\n];\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, Input, OnChanges, OnDestroy, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef, forwardRef, inject } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { ButtonColor } from '../../button/button.component';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { PhoneCountry, PHONE_COUNTRIES } from './phone-countries.data';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\nexport interface UicPhoneInputValue {\r\n countryIso2: string;\r\n dialCode: string;\r\n nationalNumber: string;\r\n internationalNumber: string;\r\n}\r\n\r\ntype PhoneInputModel = UicPhoneInputValue | null;\r\nconst base = createValueAccessor<PhoneInputModel>();\r\n\r\n@Component({\r\n selector: 'ui-phone-input',\r\n imports: [CommonModule, InputWrapperComponent, UicTranslatePipe],\r\n templateUrl: './phone-input.component.html',\r\n styleUrls: ['../input.component.scss', './phone-input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicPhoneInputComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicPhoneInputComponent extends base implements OnChanges, OnDestroy {\r\n @Input() icon = '';\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() internalIcon = '';\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() size: 's' | 'm' | 'l' = 'm';\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n @Input() placeholder = 'phone_input.placeholder';\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n @Input() preferredCountries: string[] = ['pe', 'es', 'us'];\r\n @Input() flagPath = 'https://flagcdn.com/{{code}}.svg';\r\n @Input() set countries(value: PhoneCountry[]) {\r\n this._countries = value?.length ? value : PHONE_COUNTRIES;\r\n this.resetCountryLists();\r\n }\r\n get countries(): PhoneCountry[] {\r\n return this._countries;\r\n }\r\n\r\n @ViewChild('searchInput') private readonly searchInput?: ElementRef<HTMLInputElement>;\r\n @ViewChild('dropdownTemplate') private readonly dropdownTemplate?: TemplateRef<any>;\r\n\r\n dropdownOpen = false;\r\n searchTerm = '';\r\n phoneNumber = '';\r\n selectedCountry!: PhoneCountry;\r\n filteredCountries: PhoneCountry[] = [];\r\n readonly dropdownId = `phone-dropdown-${Math.random().toString(36).slice(2, 8)}`;\r\n private pendingNormalizedValue: UicPhoneInputValue | null = null;\r\n private changeRegistered = false;\r\n\r\n private _countries: PhoneCountry[] = PHONE_COUNTRIES;\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private overlayRef?: OverlayRef;\r\n private readonly overlayPositions: ConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' }\r\n ];\r\n\r\n constructor() {\r\n super();\r\n this.resetCountryLists();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['preferredCountries'] && !changes['preferredCountries'].firstChange) {\r\n this.selectedCountry = this.getDefaultCountry();\r\n this.emitValue();\r\n }\r\n\r\n if (changes['disabled'] && this.disabled && this.dropdownOpen) {\r\n this.closeDropdown();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.closeDropdown();\r\n }\r\n\r\n override writeValue(value: PhoneInputModel | string): void {\r\n const normalizedValue: PhoneInputModel = typeof value === 'string' ? this.parseStringValue(value) : value;\r\n this.pendingNormalizedValue = typeof value === 'string' ? normalizedValue : null;\r\n super.writeValue(normalizedValue);\r\n\r\n if (!normalizedValue) {\r\n this.phoneNumber = '';\r\n this.selectedCountry = this.getDefaultCountry();\r\n return;\r\n }\r\n\r\n const matchedCountry =\r\n this.countries.find(country => country.iso2 === normalizedValue.countryIso2) ??\r\n this.countries.find(country => country.dialCode === normalizedValue.dialCode);\r\n\r\n this.selectedCountry = matchedCountry ?? this.getDefaultCountry();\r\n this.phoneNumber = (normalizedValue.nationalNumber ?? '').replace(/\\D/g, '');\r\n\r\n if (typeof value === 'string') {\r\n this.propagateNormalizedValue(normalizedValue);\r\n }\r\n }\r\n\r\n override registerOnChange(fn: any): void {\r\n super.registerOnChange(fn);\r\n this.changeRegistered = true;\r\n if (this.pendingNormalizedValue) {\r\n this.onChange(this.pendingNormalizedValue);\r\n this.pendingNormalizedValue = null;\r\n }\r\n }\r\n\r\n toggleDropdown(): void {\r\n if (this.disabled || this.loading) return;\r\n\r\n if (this.dropdownOpen) {\r\n this.closeDropdown();\r\n } else {\r\n this.openDropdown();\r\n }\r\n }\r\n\r\n selectCountry(country: PhoneCountry): void {\r\n this.selectedCountry = country;\r\n this.closeDropdown();\r\n this.emitValue();\r\n }\r\n\r\n onNumberInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const digits = input.value.replace(/\\D/g, '');\r\n this.phoneNumber = digits;\r\n input.value = digits;\r\n this.emitValue();\r\n }\r\n\r\n onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n onSearchChange(event: Event): void {\r\n const term = (event.target as HTMLInputElement).value.trim().toLowerCase();\r\n this.searchTerm = term;\r\n if (!term) {\r\n this.filteredCountries = [...this.countries];\r\n return;\r\n }\r\n this.filteredCountries = this.countries.filter(country => {\r\n const matchesName = country.name.toLowerCase().includes(term);\r\n const matchesIso = country.iso2.toLowerCase().includes(term);\r\n const matchesDial = country.dialCode.startsWith(term.replace('+', ''));\r\n return matchesName || matchesIso || matchesDial;\r\n });\r\n }\r\n\r\n clearSearch(): void {\r\n this.searchTerm = '';\r\n this.filteredCountries = [...this.countries];\r\n if (this.dropdownOpen) {\r\n this.searchInput?.nativeElement.focus();\r\n }\r\n }\r\n\r\n getFlagUrl(iso: string): string {\r\n const code = iso.toLowerCase();\r\n if (this.flagPath.includes('{{code}}')) {\r\n return this.flagPath.replace('{{code}}', code);\r\n }\r\n const safeBase = this.flagPath.replace(/\\/$/, '');\r\n return `${safeBase}/${code}.svg`;\r\n }\r\n\r\n private emitValue(): void {\r\n if (!this.phoneNumber) {\r\n this.notifyChange(null);\r\n return;\r\n }\r\n\r\n const value: UicPhoneInputValue = {\r\n countryIso2: this.selectedCountry.iso2,\r\n dialCode: this.selectedCountry.dialCode,\r\n nationalNumber: this.phoneNumber,\r\n internationalNumber: `+${this.selectedCountry.dialCode}${this.phoneNumber}`\r\n };\r\n this.notifyChange(value);\r\n }\r\n\r\n private openDropdown(): void {\r\n if (!this.dropdownTemplate) {\r\n return;\r\n }\r\n\r\n const trigger = this.host.nativeElement.querySelector('.fakeinput') as HTMLElement | null;\r\n const width = trigger?.getBoundingClientRect().width ?? undefined;\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy = this.overlay\r\n .position()\r\n .flexibleConnectedTo(trigger ?? this.host.nativeElement)\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(false)\r\n .withPush(false);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n width,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition()\r\n });\r\n\r\n const portal = new TemplatePortal(this.dropdownTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.filteredCountries = [...this.countries];\r\n this.dropdownOpen = true;\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.closeDropdown());\r\n this.overlayRef.keydownEvents().subscribe(event => {\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.closeDropdown();\r\n }\r\n });\r\n\r\n setTimeout(() => this.searchInput?.nativeElement.focus());\r\n }\r\n\r\n private closeDropdown(): void {\r\n this.dropdownOpen = false;\r\n this.resetSearch();\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n this.overlayRef = undefined;\r\n }\r\n }\r\n\r\n private resetSearch(): void {\r\n this.searchTerm = '';\r\n this.filteredCountries = [...this.countries];\r\n }\r\n\r\n private resetCountryLists(): void {\r\n this.filteredCountries = [...this.countries];\r\n this.selectedCountry = this.getDefaultCountry();\r\n }\r\n\r\n private getDefaultCountry(): PhoneCountry {\r\n const preferred = this.preferredCountries\r\n .map(code => this.countries.find(country => country.iso2 === code))\r\n .find((country): country is PhoneCountry => !!country);\r\n\r\n return preferred ?? this.countries[0];\r\n }\r\n\r\n private parseStringValue(value: string): UicPhoneInputValue | null {\r\n const digits = value.replace(/\\D/g, '');\r\n if (!digits) return null;\r\n\r\n const matchedCountry = this.findCountryByPrefix(digits) ?? this.getDefaultCountry();\r\n const nationalNumber = digits.startsWith(matchedCountry.dialCode)\r\n ? digits.slice(matchedCountry.dialCode.length)\r\n : digits;\r\n\r\n return {\r\n countryIso2: matchedCountry.iso2,\r\n dialCode: matchedCountry.dialCode,\r\n nationalNumber,\r\n internationalNumber: `+${matchedCountry.dialCode}${nationalNumber}`\r\n };\r\n }\r\n\r\n private findCountryByPrefix(number: string): PhoneCountry | undefined {\r\n return this.countries.reduce<PhoneCountry | undefined>((best, country) => {\r\n if (!number.startsWith(country.dialCode)) return best;\r\n if (!best || country.dialCode.length > best.dialCode.length) {\r\n return country;\r\n }\r\n return best;\r\n }, undefined);\r\n }\r\n\r\n private propagateNormalizedValue(value: PhoneInputModel): void {\r\n if (typeof value === 'string') return;\r\n\r\n this.value = value;\r\n this.valueChange.emit(value);\r\n\r\n if (this.changeRegistered) {\r\n this.onChange(value);\r\n this.pendingNormalizedValue = null;\r\n } else {\r\n this.pendingNormalizedValue = value;\r\n }\r\n }\r\n}\r\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div\r\n class=\"fakeinput phone-input\"\r\n [ngClass]=\"{\r\n errorinput: error,\r\n disabledinput: disabled,\r\n 'loading-input': loading,\r\n open: dropdownOpen\r\n }\"\r\n >\r\n @if (internalIcon) {\r\n <i class=\"input-internalicon {{ internalIcon }}\"></i>\r\n }\r\n \r\n <button\r\n type=\"button\"\r\n class=\"phone-input__selector\"\r\n (click)=\"toggleDropdown()\"\r\n [disabled]=\"disabled || loading\"\r\n aria-haspopup=\"listbox\"\r\n [attr.aria-expanded]=\"dropdownOpen\"\r\n [attr.aria-controls]=\"dropdownOpen ? dropdownId : null\"\r\n [attr.aria-label]=\"'phone_input.aria_country_code' | uicTranslate:{country: selectedCountry.name, dialCode: selectedCountry.dialCode}\"\r\n >\r\n <img\r\n class=\"phone-input__flag\"\r\n [src]=\"getFlagUrl(selectedCountry.iso2)\"\r\n [alt]=\"selectedCountry.name\"\r\n />\r\n <i class=\"ri-arrow-down-s-line phone-input__chevron\" aria-hidden=\"true\"></i>\r\n </button>\r\n <div class=\"phone-input__divider\" aria-hidden=\"true\"></div>\r\n <div class=\"phone-input__dial\">+{{ selectedCountry.dialCode }}</div>\r\n \r\n \r\n <input\r\n type=\"tel\"\r\n class=\"phone-input__field\"\r\n [attr.placeholder]=\"placeholder | uicTranslate\"\r\n [disabled]=\"disabled || loading\"\r\n inputmode=\"tel\"\r\n [value]=\"phoneNumber\"\r\n (input)=\"onNumberInput($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n </div>\r\n</ui-input-wrapper>\r\n\r\n<ng-template #dropdownTemplate>\r\n <datalist class=\"phone-input__dropdown\" [attr.id]=\"dropdownId\">\r\n <div class=\"phone-input__search\">\r\n <i class=\"ri-search-line\"></i>\r\n <input\r\n #searchInput\r\n type=\"text\"\r\n [value]=\"searchTerm\"\r\n (input)=\"onSearchChange($event)\"\r\n [placeholder]=\"'phone_input.search_country' | uicTranslate\"\r\n autocomplete=\"off\"\r\n />\r\n @if (searchTerm) {\r\n <button type=\"button\" class=\"phone-input__clear\" (click)=\"clearSearch()\" [attr.aria-label]=\"'phone_input.clear_search' | uicTranslate\">\r\n <i class=\"ri-close-line\"></i>\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"phone-input__list\">\r\n @for (country of filteredCountries; track country.iso2) {\r\n <button\r\n type=\"button\"\r\n class=\"phone-input__option\"\r\n (click)=\"selectCountry(country)\"\r\n [attr.aria-selected]=\"country.iso2 === selectedCountry.iso2\"\r\n [attr.data-iso]=\"country.iso2\"\r\n [attr.title]=\"country.name + ' +' + country.dialCode\"\r\n [attr.aria-label]=\"country.name + ' +' + country.dialCode\"\r\n >\r\n <img\r\n class=\"phone-input__flag\"\r\n [src]=\"getFlagUrl(country.iso2)\"\r\n [alt]=\"country.name\"\r\n />\r\n {{country.name}}\r\n <span class=\"phone-input__dial\">(+{{ country.dialCode }})</span>\r\n </button>\r\n }\r\n\r\n @if (filteredCountries.length === 0) {\r\n <div class=\"phone-input__empty\">{{'phone_input.no_results' | uicTranslate}}</div>\r\n }\r\n </div>\r\n </datalist>\r\n</ng-template>\r\n","import { animate, style, transition, trigger } from \"@angular/animations\";\r\nexport const fadeAndRise = trigger('fadeAndRise', [\r\n transition(':enter',[style({opacity:0, maxHeight: '0px'}), animate('.3s ease', style({opacity:1,maxHeight: '200px'}))]),\r\n transition(':leave', [animate('.3s ease', style({opacity:0}))])\r\n ]);","import { Component } from '@angular/core';\r\nimport { fadeAndRise } from '../../animations/fadeAndRise.animation';\r\n\r\n@Component({\r\n selector: 'ui-tooltip',\r\n imports: [],\r\n templateUrl: './tooltip.component.html',\r\n styleUrl: './tooltip.component.scss',\r\n animations: [ fadeAndRise ]\r\n})\r\nexport class UicTooltipComponent {\r\n tooltip: string = '';\r\n left: number = 0;\r\n top: number = 0;\r\n placement: 'top' | 'bottom' = 'bottom';\r\n}\r\n","<div @fadeAndRise class=\"tooltip\" \r\n [class.tooltip--top]=\"placement === 'top'\"\r\n [class.tooltip--bottom]=\"placement === 'bottom'\"\r\n [style.left]=\"left + 'px'\" [style.top]=\"top + 'px'\" [innerHTML]=\"tooltip\">\r\n</div>\r\n","import { ApplicationRef, ComponentRef, createComponent, \r\n Directive, ElementRef, EmbeddedViewRef, EnvironmentInjector, HostListener, Input } from '@angular/core';\r\nimport { UicTooltipComponent } from '../components/tooltip/tooltip.component';\r\n\r\n\r\n@Directive({\n selector: '[uiTooltip]'\n})\nexport class UicToolTipDirective {\n\n\n @Input('uiTooltip') tip = '';\n\r\n private componentRef: ComponentRef<any> | null = null;\r\n\r\n constructor(\r\n private readonly elementRef: ElementRef,\r\n private readonly appRef: ApplicationRef, \r\n private readonly injector: EnvironmentInjector) {\r\n }\r\n\r\n @HostListener('mouseenter')\r\n onMouseEnter(): void {\r\n if (!this.canShowTooltipOnHover()) {\r\n return;\r\n }\r\n if (this.componentRef === null && this.tip!='' && this.tip!=null) {\r\n this.componentRef = createComponent(UicTooltipComponent, {\r\n environmentInjector: this.injector\r\n });\r\n\r\n this.appRef.attachView(this.componentRef.hostView);\r\n const domElem = \r\n (this.componentRef.hostView as EmbeddedViewRef<any>)\r\n .rootNodes[0] as HTMLElement; \r\n document.body.appendChild(domElem);\r\n this.setTooltipComponentProperties();\r\n }\r\n }\r\n\r\n private canShowTooltipOnHover(): boolean {\r\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\r\n return true;\r\n }\r\n\r\n const canHoverWithAnyPointer = window.matchMedia('(any-hover: hover)').matches;\r\n const hasAnyFinePointer = window.matchMedia('(any-pointer: fine)').matches;\r\n if (canHoverWithAnyPointer && hasAnyFinePointer) {\r\n return true;\r\n }\r\n\r\n // Fallback for browsers with limited support for \"any-*\" media queries.\r\n return window.matchMedia('(hover: hover)').matches\r\n && window.matchMedia('(pointer: fine)').matches;\r\n }\r\n\r\n private setTooltipComponentProperties() {\r\n if (this.componentRef !== null) {\r\n this.componentRef.instance.tooltip = this.tip;\r\n this.componentRef.changeDetectorRef.detectChanges();\r\n requestAnimationFrame(() => {\r\n if (!this.componentRef) {\r\n return;\r\n }\r\n\r\n const tooltipElement = (this.componentRef.hostView as EmbeddedViewRef<any>)\r\n .rootNodes[0] as HTMLElement;\r\n const targetRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n const tooltipRect = tooltipElement.getBoundingClientRect();\r\n const spacing = 8;\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n const availableAbove = targetRect.top;\r\n const availableBelow = viewportHeight - targetRect.bottom;\r\n\r\n let placement: 'top' | 'bottom' = 'bottom';\r\n let top = targetRect.bottom + spacing;\r\n\r\n if (availableBelow < tooltipRect.height + spacing && availableAbove > availableBelow) {\r\n placement = 'top';\r\n top = Math.max(spacing, targetRect.top - tooltipRect.height - spacing);\r\n } else {\r\n top = Math.min(top, viewportHeight - tooltipRect.height - spacing);\r\n }\r\n\r\n const centerX = targetRect.left + (targetRect.width / 2);\r\n const maxLeft = viewportWidth - (tooltipRect.width / 2) - spacing;\r\n const minLeft = (tooltipRect.width / 2) + spacing;\r\n const left = Math.min(Math.max(centerX, minLeft), maxLeft);\r\n\r\n this.componentRef.instance.left = left;\r\n this.componentRef.instance.top = top;\r\n this.componentRef.instance.placement = placement;\r\n this.componentRef.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n }\r\n\r\n @HostListener('mouseleave')\r\n onMouseLeave(): void {\r\n this.destroy();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n destroy(): void {\r\n if (this.componentRef !== null) {\r\n this.appRef.detachView(this.componentRef.hostView);\r\n this.componentRef.destroy();\r\n this.componentRef = null;\r\n }\r\n }\r\n}\r\n","import { Component, ElementRef, EventEmitter, forwardRef, inject, Input, Output, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { debounceTime, distinctUntilChanged, finalize, min, Observable, of, Subject, switchMap, tap } from 'rxjs';\r\nimport { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { CommonModule } from '@angular/common';\nimport { UicButtonComponent } from '../../button/button.component';\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\nimport { UicToolTipDirective } from '../../../directives/tool-tip.directive';\n\r\nconst base = createValueAccessor< Record<string,any>|null>();\r\n\r\n@Component({\r\n selector: 'ui-searcher',\r\n imports: [CommonModule, FormsModule, UicButtonComponent, InputWrapperComponent, UicTranslatePipe, UicToolTipDirective],\n templateUrl: './uic-searcher.component.html',\r\n styleUrls: ['./uic-searcher.component.scss', '../input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicSearcherComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicSearcherComponent extends base {\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: 'primary'|'secondary' = 'primary'; //color de ícono externo\r\n @Input() internalIcon = 'ri-search-2-line'; //Icono interno\r\n @Input() size: 's' | 'm' | 'l' = 'm'; // tamaño general del input\r\n // TEXTO\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = ''; \r\n \r\n @Input() showSubtitle = false;\r\n // FUNCTIONS\r\n @Input() disabled = false; \r\n @Input() loading = false;\r\n @Input() minimumSearchLength = 3;\r\n @Input() showSelected = true;\r\n @Input() placeholder = 'common.search_ellipsis';\r\n \r\n @Input() searchFn?: (query: string) => Observable<any[]>;\r\n @Input() itemDisplayFn?: (item: any) => string = item => String(item);\r\n @Input() itemIsEnabledFn?: (item: any) => boolean = () => true;\r\n \r\n @Input() manualSearch: boolean = false;\r\n @Input() stateless: boolean = false;\r\n @Output() pickedItem = new EventEmitter<Record<string,any>>();\r\n\r\n private readonly searchSubject = new Subject<string>();\r\n results$: Observable<any[]> = this.searchSubject.pipe(\r\n debounceTime(300),\r\n distinctUntilChanged(),\r\n tap(() => this.watingApi = true),\r\n switchMap( v => {\r\n if (v.length < this.minimumSearchLength) {\r\n this.watingApi = false;\r\n return of([]);\r\n }\r\n if ( !this.searchFn ) return of([]);\r\n return this.searchFn(v).pipe( finalize(()=>this.watingApi=false) )}\r\n )\r\n );;\r\n selectedOption:Record<string,any>|null = null;\r\n searchText: string = '';\r\n watingApi = false;\r\n\r\n \r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n private resizeObserver?: ResizeObserver;\r\n \r\n onSearchChange(value: string) {\r\n this.searchText = value; \r\n if (!this.manualSearch) {\r\n this.searchSubject.next(value);\r\n }\r\n }\r\n\r\n triggerSearch() {\r\n this.searchSubject.next(this.searchText);\r\n }\r\n\r\n selectItem(item: Record<string,any>) {\r\n if (!this.itemIsEnabledFn ||this.itemIsEnabledFn(item)) {\r\n this.clearSearch();\r\n this.closeList();\r\n if ( this.stateless ){\r\n this.pickedItem.emit(item)\r\n }else{\r\n if (this.showSelected) this.selectedOption = item;\r\n this.notifyChange(item);\r\n }\r\n }\r\n }\r\n\r\n clearSearch() {\r\n this.searchText = '';\r\n this.searchSubject.next('');\r\n }\r\n\r\n unselect(){\r\n this.selectedOption = null;\r\n this.notifyChange(null);\r\n }\r\n\r\n // --- Overlay ---\r\n @ViewChild('dropdownTemplate') dropdownTemplate!: TemplateRef<any>;\r\n private overlayRef!: OverlayRef;\r\n overlayPositions: ConnectedPosition[] =[\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]\r\n openList(){\r\n if (this.disabled || this.loading) return;\r\n\r\n if (this.overlayRef) {\r\n this.closeList();\r\n }\r\n\r\n const input = this.host.nativeElement.querySelector('.fakeinput') as HTMLElement | null;\r\n if (!input) return;\r\n const width = input.offsetWidth;\r\n const preferredPositions = this.getPreferredPositions(input);\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy =\r\n this.overlay.position()\r\n .flexibleConnectedTo(input)\r\n .withPositions(preferredPositions)\r\n .withFlexibleDimensions(true)\r\n .withPush(false);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n width,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n });\r\n\r\n const portal = new TemplatePortal(this.dropdownTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.observeOverlaySizeChanges();\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.closeList());\r\n }\r\n closeList() {\r\n if (this.overlayRef) {\r\n this.resizeObserver?.disconnect();\r\n this.resizeObserver = undefined;\r\n this.overlayRef.dispose();\r\n this.overlayRef = null!;\r\n }\r\n }\r\n\r\n private observeOverlaySizeChanges() {\r\n if (!this.overlayRef || typeof ResizeObserver === 'undefined') return;\r\n\r\n this.resizeObserver?.disconnect();\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.overlayRef?.updatePosition();\r\n });\r\n this.resizeObserver.observe(this.overlayRef.overlayElement);\r\n }\r\n\r\n private getPreferredPositions(origin: HTMLElement): ConnectedPosition[] {\r\n if (typeof window === 'undefined') return this.overlayPositions;\r\n const rect = origin.getBoundingClientRect();\r\n const spaceBelow = window.innerHeight - rect.bottom;\r\n const spaceAbove = rect.top;\r\n return spaceBelow >= spaceAbove ? this.overlayPositions : [...this.overlayPositions].reverse();\r\n }\r\n\r\n override writeValue(value: Record<string,any>): void {\r\n super.writeValue(value); \r\n this.selectedOption = value; \r\n }\r\n}\r\n","<ui-input-wrapper\r\n[icon]=\"icon\"\r\n[iconColor]=\"iconColor\"\r\n[label]=\"label\"\r\n[error]=\"error\"\r\n[tip]=\"tip\"\r\n[disabled]=\"disabled\">\r\n@if ( !stateless || (!disabled && stateless)) {\r\n <div class=\"fakeinput-wrapp\" >\r\n <!-- INPUT -->\r\n <div class=\"fakeinput\" #fakeinput \r\n [ngClass]=\"{'errorinput':error, 'disabledinput':disabled, 'loading-input':watingApi||loading}\" style=\"cursor: pointer;\">\r\n @if (selectedOption == null) { \r\n @if (internalIcon) {\r\n <i [class]=\"'input-internalicon f-'+ internalIcon\" ></i>\r\n }\r\n <div class=\"input-container\" >\r\n <input\r\n [disabled]=\"disabled\"\r\n (focus)=\"openList()\"\r\n type=\"text\"\r\n (keydown.enter)=\"triggerSearch()\"\r\n (keydown.escape)=\"clearSearch()\"\r\n [(ngModel)]=\"searchText\"\r\n (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"placeholder | uicTranslate\"\r\n />\r\n </div> \r\n @if (!disabled) {\r\n @if (manualSearch) {\r\n <ui-button [uiTooltip]=\"'searcher.clear_tip' | uicTranslate\" (click)=\"triggerSearch()\" size=\"t\" ></ui-button>\n }\r\n <ui-button [iconOnly]=\"true\" size=\"s\" type=\"ghost\" icon=\"ri-eraser-line\" (click)=\"clearSearch()\"></ui-button>\r\n }\r\n }@else {\r\n <div class=\"input-container\" >\r\n <div class=\"selected-item\" >\r\n <div class=\"selected-item-text\" [innerHTML]=\"itemDisplayFn?itemDisplayFn(selectedOption):''\"></div> \r\n <ui-button [iconOnly]=\"true\" (click)=\"unselect()\" type=\"ghost\" size=\"t\" icon=\"ri-close-large-line\" color=\"red\"></ui-button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </ui-input-wrapper>\r\n \r\n<ng-template #dropdownTemplate>\r\n @if (results$ | async; as items){\r\n <div class=\"input-options\">\r\n <div class=\"input-option-scroll\">\r\n @for (item of items; track $index) {\r\n <div class=\"input-option\" [class.item-disabled]=\"itemIsEnabledFn?!itemIsEnabledFn(item):false\"\r\n (click)=\"selectItem(item)\" \r\n [innerHTML]=\"itemDisplayFn?itemDisplayFn(item):''\">\r\n </div>\r\n }@empty {\r\n <div class=\"t-disabled\">{{'searcher.empty' | uicTranslate}}</div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, forwardRef, inject, Input, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { ButtonColor, UicButtonComponent } from '../../button/button.component';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\ntype selectId = number|string|null;\r\nconst base = createValueAccessor<selectId>();\r\n\r\n@Component({\r\n selector: 'ui-select',\r\n imports: [InputWrapperComponent, CommonModule, UicTranslatePipe, UicButtonComponent],\r\n templateUrl: './select.component.html',\r\n styleUrl: '../input.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicSelectComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicSelectComponent extends base{\n \r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() internalIcon = ''; //Icono interno\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() size: 's' | 'm' | 'l' = 'm'; // tamaño general del input\r\n // TEXT\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n @Input() showSubtitle = false;\r\n @Input() disabled = false;\r\n @Input() nonSelectedText = 'select.non_selected';\r\n @Input() noneText = 'select.none';\r\n @Input() emptyText = 'select.empty';\r\n @Input() searcherEnabled = false;\r\n\r\n // FUNCTIONS\r\n @Input() loading = false;\r\n @Input() nullable = false;\r\n @Input() options:AppSelectOption[] = []; \r\n \r\n @ViewChild('dropdownTemplate') dropdownTemplate!: TemplateRef<any>;\n private overlayRef!: OverlayRef;\n searchTerm = '';\n activeOptionIndex = -1;\n overlayPositions: ConnectedPosition[] =[\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]\r\n \r\n selectedOption: AppSelectOption | null = null;\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n \r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['options'] && this.value != null) {\r\n // Resetear valor seleccionado\r\n this.selectedOption = this.options.find(opt => opt.id === this.value) ?? null;\r\n }\r\n }\r\n\r\n get showSearcher(): boolean {\r\n return this.searcherEnabled && this.options.length > 5;\r\n }\r\n\r\n get filteredOptions(): AppSelectOption[] {\n const search = this.normalizeText(this.searchTerm);\r\n\r\n if (!search) {\r\n return this.options;\r\n }\r\n\r\n return this.options.filter(option => this.normalizeText(option.text).includes(search));\n }\n\n get showNullableOption(): boolean {\n return this.options.length > 0 && this.nullable;\n }\n\n get keyboardOptions(): (AppSelectOption | null)[] {\n return [\n ...(this.showNullableOption ? [null] : []),\n ...this.filteredOptions,\n ];\n }\n\r\n // --- Overlay ---\r\n openList(){\r\n if (this.disabled || this.loading) return;\r\n\r\n if (this.overlayRef) {\r\n this.closeList();\r\n }\r\n\r\n const input = this.host.nativeElement.querySelector('.fakeinput');\r\n const width = input.offsetWidth;\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy =\r\n this.overlay.position()\r\n .flexibleConnectedTo(input)\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(true)\r\n .withPush(false);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n width,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n });\r\n\r\n const portal = new TemplatePortal(this.dropdownTemplate, this.vcr);\n this.overlayRef.attach(portal);\n this.setInitialActiveOption();\n this.scrollActiveOptionIntoView();\n this.focusSearcher();\n this.overlayRef.keydownEvents().subscribe(event => this.handleOverlayKeydown(event));\n\n this.overlayRef.backdropClick().subscribe(() => this.closeList());\n }\n\r\n selectOption(option:AppSelectOption | null){\r\n this.closeList();\r\n this.selectedOption = option;\r\n this.notifyChange(option?.id??null);\r\n }\r\n \r\n closeList() {\r\n if (this.overlayRef) {\r\n this.onTouched();\r\n this.overlayRef.dispose();\n this.overlayRef = null!;\n this.searchTerm = '';\n this.activeOptionIndex = -1;\n }\n }\n\r\n override writeValue(value: string | number | null): void {\r\n super.writeValue(value); \r\n this.selectedOption = this.options.find(opt => opt.id === value) ?? null;\r\n }\r\n\r\n updateSearchTerm(value: string): void {\n this.searchTerm = value;\n this.resetActiveOption();\n }\n\r\n clearSearch(event?: Event): void {\n event?.stopPropagation();\n this.searchTerm = '';\n this.resetActiveOption();\n this.focusSearcher();\n }\n\n isNoneOptionActive(): boolean {\n return this.showNullableOption && this.activeOptionIndex === 0;\n }\n\n isOptionActive(index: number): boolean {\n const optionIndex = index + (this.showNullableOption ? 1 : 0);\n return optionIndex === this.activeOptionIndex;\n }\n\n getOptionIndex(index: number): number {\n return index + (this.showNullableOption ? 1 : 0);\n }\n\r\n highlightMatch(text: string): string {\r\n const search = this.searchTerm.trim();\r\n\r\n if (!search) {\r\n return this.escapeHtml(text);\r\n }\r\n\r\n const normalizedText = text.toLocaleLowerCase();\r\n const normalizedSearch = search.toLocaleLowerCase();\r\n const searchLength = search.length;\r\n let cursor = 0;\r\n let highlighted = '';\r\n\r\n while (cursor < text.length) {\r\n const matchIndex = normalizedText.indexOf(normalizedSearch, cursor);\r\n\r\n if (matchIndex === -1) {\r\n highlighted += this.escapeHtml(text.slice(cursor));\r\n break;\r\n }\r\n\r\n highlighted += this.escapeHtml(text.slice(cursor, matchIndex));\r\n highlighted += `<mark>${this.escapeHtml(text.slice(matchIndex, matchIndex + searchLength))}</mark>`;\r\n cursor = matchIndex + searchLength;\r\n }\r\n\r\n return highlighted;\r\n }\r\n\r\n private focusSearcher(): void {\n if (!this.showSearcher || !this.overlayRef) {\r\n return;\r\n }\r\n\r\n setTimeout(() => {\n const input = this.overlayRef?.overlayElement.querySelector('.select-searcher input') as HTMLInputElement | null;\n input?.focus();\n input?.select();\n });\n }\n\n private handleOverlayKeydown(event: KeyboardEvent): void {\n if (!this.overlayRef) return;\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n event.stopPropagation();\n this.moveActiveOption(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n event.stopPropagation();\n this.moveActiveOption(-1);\n return;\n }\n\n if (event.key === 'Enter') {\n if (this.activeOptionIndex < 0 || this.keyboardOptions.length === 0) return;\n event.preventDefault();\n event.stopPropagation();\n this.selectOption(this.keyboardOptions[this.activeOptionIndex]);\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.closeList();\n }\n }\n\n private setInitialActiveOption(): void {\n if (this.keyboardOptions.length === 0) {\n this.activeOptionIndex = -1;\n return;\n }\n\n if (this.selectedOption) {\n const selectedIndex = this.keyboardOptions.findIndex(option => option?.id === this.selectedOption?.id);\n this.activeOptionIndex = selectedIndex >= 0 ? selectedIndex : 0;\n return;\n }\n\n if (this.showNullableOption && this.value == null) {\n this.activeOptionIndex = 0;\n return;\n }\n\n this.activeOptionIndex = 0;\n }\n\n private resetActiveOption(): void {\n if (this.keyboardOptions.length === 0) {\n this.activeOptionIndex = -1;\n return;\n }\n\n this.activeOptionIndex = 0;\n this.scrollActiveOptionIntoView();\n }\n\n private moveActiveOption(step: 1 | -1): void {\n const count = this.keyboardOptions.length;\n if (count === 0) return;\n\n if (this.activeOptionIndex < 0) {\n this.activeOptionIndex = step > 0 ? 0 : count - 1;\n this.scrollActiveOptionIntoView();\n return;\n }\n\n this.activeOptionIndex = (this.activeOptionIndex + step + count) % count;\n this.scrollActiveOptionIntoView();\n }\n\n private scrollActiveOptionIntoView(): void {\n if (!this.overlayRef || this.activeOptionIndex < 0) return;\n\n setTimeout(() => {\n const active = this.overlayRef?.overlayElement.querySelector(`[data-option-index=\"${this.activeOptionIndex}\"]`) as HTMLElement | null;\n active?.scrollIntoView({ block: 'nearest' });\n });\n }\n\r\n private normalizeText(value: string): string {\r\n return value.toLocaleLowerCase().trim();\r\n }\r\n\r\n private escapeHtml(value: string): string {\r\n return value\r\n .replaceAll('&', '&')\r\n .replaceAll('<', '<')\r\n .replaceAll('>', '>')\r\n .replaceAll('\"', '"')\r\n .replaceAll(\"'\", ''');\r\n }\r\n}\r\n\r\n\r\nexport interface AppSelectOption{\r\n id? : string | number | null;\r\n text : string;\r\n detail? : string;\r\n icon? : string;\r\n iconColor? : string;\r\n} \r\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div class=\"fakeinput-wrapp\" > \r\n <!-- INPUT -->\r\n <div (click)=\"openList()\" class=\"fakeinput\" #fakeinput \r\n [ngClass]=\"{'errorinput':error, 'disabledinput':disabled, 'loading-input':loading}\" style=\"cursor: pointer;\">\r\n @if (internalIcon) {\r\n <i class=\"input-internalicon {{internalIcon}} f-{{internalIconColor}}\" ></i>\r\n }\r\n <div class=\"fakeinput-emptytext\" [class.disabled-placeholder]=\"disabled && !selectedOption?.text\" >\r\n @if (selectedOption?.icon) {\r\n <i class=\"{{selectedOption?.icon}} f-{{selectedOption?.iconColor}}\" style=\"margin-right: 5px;\"></i>\r\n }\r\n {{(selectedOption?.text || nonSelectedText) | uicTranslate}}\r\n </div>\r\n @if (!disabled && !loading) {\r\n <i class=\"ri-arrow-down-s-line\"></i>\r\n }\r\n </div> \r\n <!-- DESPLEGABLE -->\r\n <ng-template #dropdownTemplate >\r\n <div class=\"input-options\">\r\n @if (showSearcher) {\r\n <div class=\"select-searcher\">\r\n <input\r\n #searchInput\r\n type=\"text\"\r\n [placeholder]=\"'select.search_placeholder'|uicTranslate\"\r\n [value]=\"searchTerm\"\r\n (input)=\"updateSearchTerm($any($event.target).value)\"\r\n (click)=\"$event.stopPropagation()\">\r\n <ui-button\r\n icon=\"ri-close-line\"\r\n size=\"s\"\r\n type=\"ghost\"\r\n color=\"red\"\r\n [iconOnly]=\"true\"\r\n (click)=\"clearSearch($event)\">\r\n </ui-button>\r\n </div>\r\n }\r\n <!-- OPCIONES -->\n <div class=\"input-option-scroll\">\n @if (showNullableOption) {\n <div\n (click)=\"selectOption(null)\"\n class=\"input-option\"\n [class.input-option-focused]=\"isNoneOptionActive()\"\n [attr.data-option-index]=\"0\"\n style=\"padding: 3px;\">\n {{noneText | uicTranslate}}\n </div>\n <div class=\"option-divider\"></div>\n }\n \n \n @for (option of filteredOptions; track $index) {\n <div\n (click)=\"selectOption(option)\"\n class=\"input-option\"\n [class.input-option-focused]=\"isOptionActive($index)\"\n [attr.data-option-index]=\"getOptionIndex($index)\">\n @if (option.icon) {\n <i class=\"{{option.icon}} f-{{option.iconColor}}\" style=\"margin-right: 5px;\"></i>\n }\n <div style=\"padding: 2px;\" >\r\n <div class=\"f-medium option-text-highlight\" [innerHTML]=\"highlightMatch(option.text)\"></div>\r\n <div *ngIf=\"showSubtitle\" class=\"f-extralight\" >\r\n {{option.detail}}\r\n </div>\r\n </div>\r\n </div>\r\n @if ( $index < (filteredOptions.length - 1) ) {\r\n <span class=\"option-divider\"></span>\r\n }\r\n \r\n }\r\n \r\n @if (filteredOptions.length == 0) {\r\n <div class=\"fakeinput-alert t-disabled\">{{emptyText | uicTranslate}}</div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n </div>\r\n</ui-input-wrapper>\r\n","import { Component, forwardRef, HostListener, Input } from '@angular/core';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { ButtonColor } from '../../button/button.component';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\n\r\nconst base = createValueAccessor<number>();\r\n\r\n@Component({\r\n selector: 'ui-slider',\r\n imports: [ InputWrapperComponent ],\r\n templateUrl: './ui-slider.component.html',\r\n styleUrls: ['./ui-slider.component.scss', '../input.component.scss'],\r\n providers:[\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicSliderComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicSliderComponent extends base {\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n\r\n @Input() min = 0;\r\n @Input() max = 100;\r\n @Input() step = 1;\r\n @Input() markerCount = 0;\r\n markers: number[] = [];\r\n \r\n @Input() disabled = false;\r\n \r\n @Input() loading = false;\r\n\r\n\r\n ngOnInit(){\r\n if (this.markerCount > 1) {\r\n const interval = (this.max - this.min) / (this.markerCount - 1);\r\n this.markers = Array.from({ length: this.markerCount }, (_, i) => this.min + i * interval);\r\n }\r\n }\r\n\r\n get percent() {\r\n return ((this.value - this.min) / (this.max - this.min)) * 100;\r\n }\r\n\r\n updateFromClientX(clientX: number, el: HTMLElement) {\r\n if (this.disabled) return;\r\n if (!el ) return;\r\n \r\n const rect = el.getBoundingClientRect();\r\n const relativeX = Math.min(Math.max(clientX - rect.left, 0), rect.width);\r\n const rawValue = this.min + (relativeX / rect.width) * (this.max - this.min);\r\n\r\n // Ajustar al step\r\n const stepped = Math.round(rawValue / this.step) * this.step;\r\n\r\n this.value = (Math.min(this.max, Math.max(this.min, stepped)));\r\n this.notifyChange(this.value);\r\n }\r\n \r\n dragging = false;\r\n private activeTrack?: HTMLElement;\r\n\r\n onMouseDown(event: MouseEvent, track: HTMLElement) {\r\n event.preventDefault();\r\n this.dragging = true;\r\n this.activeTrack = track;\r\n this.updateFromClientX(event.clientX, track);\r\n }\r\n \r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (this.disabled || !(this.dragging && this.activeTrack)) return;\r\n this.updateFromClientX(event.clientX, this.activeTrack);\r\n }\r\n\r\n @HostListener('document:mouseup')\r\n onMouseUp() {\r\n this.dragging = false;\r\n this.activeTrack = undefined;\r\n }\r\n}\r\n","<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div class=\"slider-wrapper\">\r\n <div class=\"slider\" #track\r\n (click)=\"updateFromClientX($event.clientX, track)\">\r\n <!-- barra -->\r\n <div class=\"slider-track\"></div>\r\n <div class=\"slider-filled\" [style.width.%]=\"percent\" [class.disabled-bar]=\"disabled\"></div>\r\n \r\n <!-- thumb -->\r\n <div class=\"slider-thumb\"\r\n [style.left.%]=\"percent\"\r\n [class.disabled-thumb]=\"disabled\"\r\n (mousedown)=\"onMouseDown($event, track)\"\r\n #thumb>\r\n <div class=\"slider-thumb-legend\" [class.disabled-legend]=\"disabled\">{{value}}</div>\r\n </div>\r\n \r\n <!-- markers -->\r\n <div class=\"slider-markers\">\r\n @for(m of markers; track $index){\r\n <div class=\"marker\" \r\n [style.left.%]=\"((m - min) / (max - min)) * 100\">\r\n {{ m }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ui-input-wrapper>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, forwardRef } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport { AppSelectOption } from '../select/select.component';\r\nimport { ButtonColor } from '../../button/button.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\ntype RadioValue = string | number | null;\r\nconst base = createValueAccessor<RadioValue>();\r\n\r\n@Component({\r\n selector: 'ui-radio',\r\n imports: [CommonModule, InputWrapperComponent, UicTranslatePipe],\r\n templateUrl: './ui-radio.component.html',\r\n styleUrls: ['./ui-radio.component.scss', '../input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicRadioComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class UicRadioComponent extends base {\r\n @Input() icon = '';\r\n @Input() iconColor: ButtonColor = 'black';\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n @Input() options: AppSelectOption[] = [];\r\n @Input() emptyText = 'select.without_options';\r\n @Input() direction: 'column' | 'row' = 'column';\r\n\r\n \r\n isSelected(option: AppSelectOption): boolean {\r\n return this.getOptionValue(option) === this.value;\r\n }\r\n\r\n selectOption(option: AppSelectOption) {\r\n if (this.disabled || this.loading) return;\r\n const nextValue = this.getOptionValue(option);\r\n if (nextValue === this.value) return;\r\n this.notifyChange(nextValue);\r\n }\r\n\r\n private getOptionValue(option: AppSelectOption): RadioValue {\r\n if (option.id === undefined || option.id === null) {\r\n return option.text ?? null;\r\n }\r\n return option.id;\r\n }\r\n}\r\n","<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [tip]=\"tip\"\r\n [error]=\"error\"\r\n [disabled]=\"disabled\"\r\n>\r\n <div\r\n class=\"radio-group\"\r\n role=\"radiogroup\"\r\n [class.loading-input]=\"loading\"\r\n [class.disabled]=\"disabled || loading\"\r\n [class.direction-row]=\"direction === 'row'\"\r\n [attr.aria-disabled]=\"disabled || loading ? true : null\"\r\n >\r\n @if (options.length) {\r\n @for (option of options; track option.id) {\r\n <button\r\n type=\"button\"\r\n class=\"radio-option\"\r\n [disabled]=\"disabled || loading\"\r\n [class.selected]=\"isSelected(option)\"\r\n [attr.aria-checked]=\"isSelected(option)\"\r\n (click)=\"selectOption(option)\"\r\n (keydown.enter)=\"selectOption(option)\"\r\n (keydown.space)=\"selectOption(option)\"\r\n >\r\n <span class=\"radio-control\" aria-hidden=\"true\">\r\n <span class=\"radio-dot\"></span>\r\n </span>\r\n <span class=\"radio-texts\">\r\n <span class=\"radio-label\">{{ option.text }}</span>\r\n @if (option.detail) {\r\n <span class=\"radio-detail\">{{ option.detail }}</span>\r\n }\r\n </span>\r\n </button>\r\n }\r\n } @else {\r\n <div class=\"radio-empty\">{{ emptyText | uicTranslate }}</div>\r\n }\r\n </div>\r\n</ui-input-wrapper>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n ElementRef,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren,\r\n ViewContainerRef,\r\n forwardRef,\r\n inject,\r\n Input,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { createValueAccessor } from '../../dynamic-form/base-value-accessot';\r\nimport {\r\n ConnectedPosition,\r\n FlexibleConnectedPositionStrategy,\r\n Overlay,\r\n OverlayRef,\r\n} from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { ButtonColor, UicButtonComponent } from '../../button/button.component';\r\nimport { InputWrapperComponent } from '../input-wrapper/input-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\nconst base = createValueAccessor<string>();\r\n\r\ntype ParsedTime = { hour12: number; minute: number; meridiem: 'am' | 'pm' };\r\n\r\n@Component({\r\n selector: 'ui-time-picker',\r\n imports: [CommonModule, UicButtonComponent, InputWrapperComponent, UicTranslatePipe],\r\n templateUrl: './time-picker.component.html',\r\n styleUrls: ['./time-picker.component.scss', '../input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicTimePickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class UicTimePickerComponent extends base {\r\n // Iconos y estado\r\n @Input() icon = '';\r\n @Input() iconColor: 'primary' | 'secondary' = 'primary';\r\n @Input() internalIcon = '';\r\n @Input() internalIconColor: ButtonColor = 'black'; //Icono interno\r\n @Input() disabled = false;\r\n\r\n // Texto\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n\r\n // Configuracion\r\n @Input() interval = 1; // paso de minutos en el overlay\r\n\r\n // Entrada mostrada (12h) y valor (24h)\r\n displayValue = '';\r\n\r\n // Overlay\r\n @ViewChild('overlayTemplate') overlayTemplate!: TemplateRef<any>;\r\n @ViewChildren('hourOption') hourOptions!: QueryList<ElementRef<HTMLElement>>;\r\n @ViewChildren('minuteOption') minuteOptions!: QueryList<ElementRef<HTMLElement>>;\r\n @ViewChildren('meridiemOption') meridiemOptions!: QueryList<ElementRef<HTMLElement>>;\r\n private overlayRef: OverlayRef | null = null;\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n overlayPositions: ConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ];\r\n\r\n // Listas para construir la hora\r\n hours12 = Array.from({ length: 12 }, (_, i) => i + 1); // 1..12\r\n minutes: number[] = [];\r\n meridiems: Array<'am' | 'pm'> = ['am', 'pm'];\r\n\r\n selectedHour12: number | null = null;\r\n selectedMinute: number | null = null;\r\n selectedMeridiem: 'am' | 'pm' | null = null;\r\n\r\n ngOnInit(): void {\r\n this.rebuildMinutes();\r\n this.syncSelectionFromValue();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['interval']) {\r\n this.rebuildMinutes();\r\n this.syncSelectionFromValue();\r\n }\r\n }\r\n\r\n private rebuildMinutes() {\r\n const step = Math.max(1, Math.min(60, Math.floor(this.interval || 1)));\r\n const mins: number[] = [];\r\n for (let m = 0; m < 60; m += step) {\r\n mins.push(m);\r\n }\r\n this.minutes = mins;\r\n }\r\n\r\n private applySelection(parsed: ParsedTime | null) {\r\n if (!parsed) {\r\n this.clearSelection();\r\n return;\r\n }\r\n this.selectedHour12 = parsed.hour12;\r\n this.selectedMinute = this.minutes.includes(parsed.minute) ? parsed.minute : null;\r\n this.selectedMeridiem = parsed.meridiem;\r\n }\r\n\r\n private clearSelection() {\r\n this.selectedHour12 = null;\r\n this.selectedMinute = null;\r\n this.selectedMeridiem = null;\r\n }\r\n\r\n private syncSelectionFromValue() {\r\n const parsed = this.parseValue(this.value) || this.parseDisplay(this.displayValue);\r\n this.applySelection(parsed);\r\n }\r\n\r\n // --- Overlay ---\r\n openOverlay() {\r\n if (this.disabled) return;\r\n\r\n if (this.overlayRef) {\r\n this.closeOverlay();\r\n }\r\n\r\n const inputEl = this.host.nativeElement.querySelector('.fakeinput');\r\n const width = (inputEl as HTMLElement | null)?.clientWidth;\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy = this.overlay\r\n .position()\r\n .flexibleConnectedTo(inputEl as HTMLElement)\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(false)\r\n .withPush(false);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n width,\r\n });\r\n\r\n const portal = new TemplatePortal(this.overlayTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.closeOverlay());\r\n\r\n this.syncSelectionFromValue();\r\n setTimeout(() => this.scrollToSelection(), 0);\r\n }\r\n\r\n closeOverlay() {\r\n if (this.overlayRef) {\r\n this.onTouched();\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n }\r\n }\r\n\r\n // Selecciones desde overlay\r\n pickHour(hour: number) {\r\n this.selectedHour12 = hour;\r\n this.commitOverlaySelection();\r\n }\r\n\r\n pickMinute(minute: number) {\r\n this.selectedMinute = minute;\r\n this.commitOverlaySelection();\r\n }\r\n\r\n pickMeridiem(meridiem: 'am' | 'pm') {\r\n this.selectedMeridiem = meridiem;\r\n this.commitOverlaySelection();\r\n }\r\n\r\n private commitOverlaySelection() {\r\n const base =\r\n this.parseDisplay(this.displayValue) ||\r\n this.parseValue(this.value) || {\r\n hour12: 12,\r\n minute: 0,\r\n meridiem: 'am' as const,\r\n };\r\n\r\n const hour = this.selectedHour12 ?? base.hour12;\r\n const minute = this.selectedMinute ?? base.minute;\r\n const meridiem = this.selectedMeridiem ?? base.meridiem;\r\n\r\n this.displayValue = this.format12(hour, minute, meridiem);\r\n this.notifyChange(this.compose24(hour, minute, meridiem) as any);\r\n }\r\n\r\n // --- Entrada manual ---\r\n onInput(val: string) {\r\n this.displayValue = val;\r\n }\r\n\r\n onBlur() {\r\n const parsed = this.parseDisplay(this.displayValue);\r\n if (parsed) {\r\n this.displayValue = this.format12(parsed.hour12, parsed.minute, parsed.meridiem);\r\n const value24 = this.compose24(parsed.hour12, parsed.minute, parsed.meridiem);\r\n this.notifyChange(value24 as any);\r\n this.applySelection(parsed);\r\n } else {\r\n this.displayValue = '';\r\n this.notifyChange(null as any);\r\n this.clearSelection();\r\n }\r\n }\r\n\r\n onKeydown(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n (event.target as HTMLInputElement).blur();\r\n }\r\n }\r\n\r\n // --- ControlValueAccessor ---\r\n override writeValue(value: string | null): void {\r\n super.writeValue(value as any);\r\n const parsed = this.parseValue(value || '');\r\n if (parsed) {\r\n this.displayValue = this.format12(parsed.hour12, parsed.minute, parsed.meridiem);\r\n this.applySelection(parsed);\r\n } else {\r\n this.displayValue = '';\r\n this.clearSelection();\r\n }\r\n }\r\n\r\n // --- Helpers de formato ---\r\n private format12(hour12: number, minute: number, meridiem: 'am' | 'pm') {\r\n const hh = String(hour12).padStart(2, '0');\r\n const mm = String(minute).padStart(2, '0');\r\n return `${hh}:${mm} ${meridiem}`;\r\n }\r\n\r\n private compose24(hour12: number, minute: number, meridiem: 'am' | 'pm'): string {\r\n let h24 = hour12 % 12;\r\n if (meridiem === 'pm') h24 += 12;\r\n const hh = String(h24).padStart(2, '0');\r\n const mm = String(minute).padStart(2, '0');\r\n return `${hh}:${mm}`;\r\n }\r\n\r\n private parseDisplay(text: string): ParsedTime | null {\r\n if (!text) return null;\r\n const match = text.trim().match(/^\\s*(\\d{1,2})\\s*:\\s*(\\d{2})(?:\\s*([aApP][mM]))?\\s*$/);\r\n if (!match) return null;\r\n const hour = parseInt(match[1], 10);\r\n const minute = parseInt(match[2], 10);\r\n const meridiem = (match[3] ? match[3].toLowerCase() : 'am') as 'am' | 'pm';\r\n if (hour < 1 || hour > 12) return null;\r\n if (minute < 0 || minute > 59) return null;\r\n return { hour12: hour, minute, meridiem };\r\n }\r\n\r\n private parseValue(value24: string | null | undefined): ParsedTime | null {\r\n if (!value24) return null;\r\n const match = value24.match(/^(\\d{2}):(\\d{2})$/);\r\n if (!match) return null;\r\n const hour24 = parseInt(match[1], 10);\r\n const minute = parseInt(match[2], 10);\r\n if (hour24 < 0 || hour24 > 23) return null;\r\n if (minute < 0 || minute > 59) return null;\r\n const meridiem: 'am' | 'pm' = hour24 < 12 ? 'am' : 'pm';\r\n let hour12 = hour24 % 12;\r\n if (hour12 === 0) hour12 = 12;\r\n return { hour12, minute, meridiem };\r\n }\r\n\r\n private scrollToSelection(retries = 3) {\r\n if (!this.overlayRef || !this.overlayRef.hasAttached()) {\r\n return;\r\n }\r\n\r\n const hourScrolled = this.scrollColumn(this.hourOptions, this.hours12, this.selectedHour12);\r\n const minuteScrolled = this.scrollColumn(this.minuteOptions, this.minutes, this.selectedMinute);\r\n const meridiemScrolled = this.scrollColumn(this.meridiemOptions, this.meridiems, this.selectedMeridiem);\r\n\r\n const hasSelection =\r\n this.selectedHour12 !== null || this.selectedMinute !== null || this.selectedMeridiem !== null;\r\n\r\n if (hasSelection && !(hourScrolled || minuteScrolled || meridiemScrolled) && retries > 0) {\r\n setTimeout(() => this.scrollToSelection(retries - 1), 50);\r\n }\r\n }\r\n\r\n private scrollColumn<T>(\r\n query: QueryList<ElementRef<HTMLElement>>,\r\n values: readonly T[],\r\n selected: T | null,\r\n ): boolean {\r\n if (!query || selected === null) {\r\n return false;\r\n }\r\n const index = values.findIndex((value) => value === selected);\r\n if (index < 0) {\r\n return false;\r\n }\r\n const elements = query.toArray();\r\n const element = elements[index]?.nativeElement;\r\n if (!element) {\r\n return false;\r\n }\r\n try {\r\n element.scrollIntoView({ block: 'center' });\r\n } catch {\r\n element.scrollIntoView();\r\n }\r\n return true;\r\n }\r\n}\r\n","<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n <div class=\"fakeinput-wrapp\">\r\n <div class=\"fakeinput\" [ngClass]=\"{ errorinput: error, disabledinput: disabled }\">\r\n @if (internalIcon) {\r\n <i class=\"input-internalicon-m {{ internalIcon }}\"></i>\r\n }\r\n <input\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"'time_picker.placeholder' | uicTranslate\"\r\n [value]=\"displayValue\"\r\n #timeInput\r\n (input)=\"onInput(timeInput.value)\"\r\n (blur)=\"onBlur()\"\r\n (keydown)=\"onKeydown($event)\"\r\n />\r\n <ui-button class=\"side-button\" type=\"ghost\" color=\"black\" [iconOnly]=\"true\" size=\"s\" icon=\"ri-arrow-down-wide-line\" [disabled]=\"disabled\" (click)=\"openOverlay()\"></ui-button>\r\n </div>\r\n \r\n <!-- Overlay simple sin estilos: 3 columnas (hora, minuto, am/pm) -->\r\n <ng-template #overlayTemplate>\r\n <div class=\"input-options\">\r\n \r\n <div class=\"time-overlay\">\r\n <div class=\"time-col hours\">\r\n @for (h of hours12; track $index) {\r\n <div\r\n #hourOption\r\n class=\"time-item\"\r\n [class.selected]=\"h === selectedHour12\"\r\n (click)=\"pickHour(h)\"\r\n >\r\n {{ h }}\r\n </div>\r\n }\r\n </div>\r\n <div class=\"time-col minutes\">\r\n @for (m of minutes; track $index) {\r\n <div\r\n #minuteOption\r\n class=\"time-item\"\r\n [class.selected]=\"m === selectedMinute\"\r\n (click)=\"pickMinute(m)\"\r\n >\r\n {{ m < 10 ? ('0' + m) : m }}\r\n </div>\r\n }\r\n </div>\r\n <div class=\"time-col meridiem\">\r\n @for (md of meridiems; track $index) {\r\n <div\r\n #meridiemOption\r\n class=\"time-item\"\r\n [class.selected]=\"md === selectedMeridiem\"\r\n (click)=\"pickMeridiem(md)\"\r\n >\r\n {{ md }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ui-input-wrapper>\r\n","import { Component, forwardRef, Input, SimpleChanges } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { createValueAccessor } from '../dynamic-form/base-value-accessot';\r\nimport { AppSelectOption } from '../inputs/select/select.component';\r\nimport { UicInputComponent } from '../inputs/input/input.component';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\n\r\ntype selectId = number|string;\r\ntype selectedDetailed = {id: selectId; detail?: string};\r\nconst base = createValueAccessor<selectedDetailed[]>();\r\n\r\n@Component({\r\n selector: 'ui-pool-options',\r\n imports: [UicInputComponent, UicTranslatePipe],\r\n templateUrl: './pool-options.component.html',\r\n styleUrls: ['./pool-options.component.scss','../inputs/input.component.scss'],\r\n providers:[\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicPoolOptionsComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicPoolOptionsComponent extends base{\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: 'primary'|'secondary' = 'primary'; //color de ícono externo\r\n @Input() size: 's' | 'm' | 'l' = 'm'; // tamaño general del input\r\n // TEXT\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n // FUNCTIONS\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n @Input() multy = true;\r\n @Input() enabledListView = false;\r\n @Input() listViewTitle = 'common.selected';\r\n @Input() options:AppSelectOption[] = [];\r\n\r\n private selectedItems = new Map<selectId, selectedDetailed>();\r\n\r\n get selectedValues(): selectedDetailed[] {\r\n return Array.from(this.selectedItems.values()).map(item => ({ ...item }));\r\n }\r\n\r\n updateOptions(id:selectId){\r\n if ( this.disabled ) return;\r\n if (this.selectedItems.has(id)) {\r\n this.selectedItems.delete(id);\r\n } else {\r\n if (!this.multy) {\r\n this.selectedItems.clear();\r\n }\r\n this.selectedItems.set(id, { id });\r\n }\r\n this.emitSelectionChange();\r\n }\r\n\r\n updateDetail(id: selectId, detail: string) {\r\n if (!this.selectedItems.has(id)) {\r\n return;\r\n }\r\n const updated: selectedDetailed =\r\n detail?.length ? { id, detail } : { id };\r\n this.selectedItems.set(id, updated);\r\n this.emitSelectionChange();\r\n }\r\n\r\n override writeValue(value: selectedDetailed[] | selectId[] | null = []): void {\r\n const normalized = this.normalizeIncomingValue(value);\r\n super.writeValue(normalized);\r\n this.selectedItems = new Map(normalized.map(item => [item.id, item]));\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['options'] && this.value != null) {\r\n this.selectedItems.clear();\r\n this.emitSelectionChange();\r\n }\r\n }\r\n\r\n isSelected(id: selectId) {\r\n return this.selectedItems.has(id);\r\n }\r\n\r\n getItemName(id:selectId){\r\n return this.options.find(f=>f.id == id)?.text??id;\r\n }\r\n\r\n private emitSelectionChange() {\r\n this.notifyChange(this.selectedValues);\r\n }\r\n\r\n private normalizeIncomingValue(\r\n value: selectedDetailed[] | selectId[] | null | undefined\r\n ): selectedDetailed[] {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n return value\r\n .map(item => {\r\n if (item == null) {\r\n return null;\r\n }\r\n\r\n if (typeof item === 'object' && 'id' in item) {\r\n const normalizedItem = item as selectedDetailed;\r\n const detail = normalizedItem.detail;\r\n return detail?.length ? { id: normalizedItem.id, detail } : { id: normalizedItem.id };\r\n }\r\n\r\n return { id: item as selectId };\r\n })\r\n .filter((entry): entry is selectedDetailed => entry !== null);\r\n }\r\n\r\n}\r\n","<div class=\"input-wrapper \">\r\n @if (icon) {\r\n <i class=\"input-externalicon f-{{iconColor}} {{icon}}\"></i>\r\n }\r\n <div class=\"input-elements\" [style]=\"icon?'max-width: calc(100% - 34px);':''\">\r\n @if (label) {\r\n <div class=\"label inputlabel\" [class.font-error]=\"error\">{{label}} </div>\r\n }\r\n <div>\r\n <div class=\"pool-wrapper\" > \r\n @for (opt of options; track opt.id) {\r\n <div (click)=\"updateOptions(opt.id??'')\" class=\"pool-option\" [class.disabled-opt]=\"disabled\" [class.active-opt]=\"isSelected(opt.id??'')\">{{opt.text}}</div>\r\n }\r\n \r\n </div>\r\n <!-- BLOQUE DE LISTTA DETALLADA -->\r\n @if(enabledListView && selectedValues.length > 0){\r\n <h3 class=\"pool-selected-title\">{{listViewTitle | uicTranslate}}</h3>\r\n <div>\r\n @for (item of selectedValues; track item.id) {\r\n <div class=\"pool-selected\"> \r\n <div class=\"pool-selected-label\">{{getItemName(item.id)}} </div>\r\n <div class=\"pool-selected-input\">\r\n <ui-input [disabled]=\"disabled\">\r\n <input [disabled]=\"disabled\" [placeholder]=\"'common.detail' | uicTranslate\" type=\"text\" [value]=\"item.detail ?? ''\" (input)=\"updateDetail(item.id, $any($event.target).value)\">\r\n </ui-input>\r\n @if (!disabled) {\r\n <div class=\"pool-selected-button\" (click)=\"updateOptions(item.id)\" >\r\n <i class=\"ri-delete-bin-5-line\" ></i>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <!-- ALERTS -->\r\n @if (error) {\r\n <div class=\"fakeinput-alert f-red\">{{error}}</div>\r\n }\r\n @if (tip) {\r\n <div class=\"fakeinput-alert tip\">{{tip}}</div>\r\n }\r\n </div>\r\n</div>\r\n","import { AfterViewInit, Directive, DoCheck, ElementRef, HostListener, Input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[textareaAutoresize]'\r\n})\r\nexport class UicTextareaAutoresizeDirective implements AfterViewInit, DoCheck {\r\n private _minRows: number | null = null;\r\n private _maxRows: number | null = null;\r\n private initialRows: number | null = null;\r\n private lastValue = '';\r\n private enabled = true;\r\n\r\n constructor(private readonly elementRef: ElementRef<HTMLTextAreaElement>) {}\r\n\r\n @Input()\r\n set minRows(value: number | string | null | undefined) {\r\n this.setMinRows(value);\r\n }\r\n\r\n @Input()\r\n set maxRows(value: number | string | null | undefined) {\r\n this.setMaxRows(value);\r\n }\r\n\r\n @Input('textareaAutoresize')\r\n set textareaAutoresize(value: boolean | string | null | undefined) {\r\n this.enabled = this.coerceBoolean(value);\r\n if (!this.enabled) {\r\n this.resetStyles();\r\n } else {\r\n this.resizeToFitContent(true);\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const textarea = this.elementRef.nativeElement;\r\n this.initialRows = textarea.rows || null;\r\n this.lastValue = textarea.value;\r\n this.resizeToFitContent(true);\r\n }\r\n\r\n ngDoCheck(): void {\r\n const textarea = this.elementRef.nativeElement;\r\n if (textarea.value !== this.lastValue) {\r\n this.lastValue = textarea.value;\r\n this.resizeToFitContent(true);\r\n }\r\n }\r\n\r\n @HostListener('input')\r\n onInput(): void {\r\n this.resizeToFitContent();\r\n }\r\n\r\n @HostListener('window:resize')\r\n onWindowResize(): void {\r\n this.resizeToFitContent(true);\r\n }\r\n\r\n private resizeToFitContent(force = false): void {\r\n if (!this.enabled) {\r\n return;\r\n }\r\n\r\n const textarea = this.elementRef.nativeElement;\r\n if (!textarea) {\r\n return;\r\n }\r\n\r\n if (!force && document.activeElement !== textarea) {\r\n return;\r\n }\r\n\r\n const style = window.getComputedStyle(textarea);\r\n const boxSizing = style.boxSizing;\r\n const paddingTop = this.parseCssValue(style.paddingTop);\r\n const paddingBottom = this.parseCssValue(style.paddingBottom);\r\n const borderTop = this.parseCssValue(style.borderTopWidth);\r\n const borderBottom = this.parseCssValue(style.borderBottomWidth);\r\n const lineHeight = this.getLineHeight(style);\r\n\r\n const padding = paddingTop + paddingBottom;\r\n const border = borderTop + borderBottom;\r\n const isBorderBox = boxSizing === 'border-box';\r\n const heightAdjustment = isBorderBox ? border : -padding;\r\n const rowExtras = isBorderBox ? padding + border : 0;\r\n\r\n let minRows = this._minRows;\r\n if (minRows === null && this.initialRows !== null && this.initialRows > 0) {\r\n minRows = this.initialRows;\r\n }\r\n\r\n const maxRows = this._maxRows;\r\n\r\n let minHeight = 0;\r\n let maxHeight = Number.POSITIVE_INFINITY;\r\n\r\n if (minRows !== null && lineHeight > 0) {\r\n minHeight = Math.ceil(lineHeight * minRows + rowExtras);\r\n }\r\n\r\n if (maxRows !== null && lineHeight > 0) {\r\n maxHeight = Math.ceil(lineHeight * maxRows + rowExtras);\r\n if (minHeight > 0) {\r\n maxHeight = Math.max(maxHeight, minHeight);\r\n }\r\n }\r\n\r\n textarea.style.height = 'auto';\r\n let newHeight = textarea.scrollHeight + heightAdjustment;\r\n\r\n if (minHeight > 0) {\r\n newHeight = Math.max(newHeight, minHeight);\r\n }\r\n if (maxHeight !== Number.POSITIVE_INFINITY) {\r\n newHeight = Math.min(newHeight, maxHeight);\r\n }\r\n\r\n textarea.style.height = `${newHeight}px`;\r\n if (maxHeight !== Number.POSITIVE_INFINITY) {\r\n textarea.style.overflowY = textarea.scrollHeight + heightAdjustment > maxHeight ? 'auto' : 'hidden';\r\n } else {\r\n textarea.style.overflowY = 'hidden';\r\n }\r\n }\r\n\r\n private getLineHeight(style: CSSStyleDeclaration): number {\r\n const lineHeight = this.parseCssValue(style.lineHeight);\r\n if (!isNaN(lineHeight) && lineHeight > 0) {\r\n return lineHeight;\r\n }\r\n\r\n const measured = this.measureLineHeight(style);\r\n if (measured > 0) {\r\n return measured;\r\n }\r\n\r\n const fontSize = this.parseCssValue(style.fontSize);\r\n if (!isNaN(fontSize) && fontSize > 0) {\r\n return fontSize * 1.2;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n private parseCssValue(value: string): number {\r\n const parsed = parseFloat(value);\r\n return Number.isNaN(parsed) ? 0 : parsed;\r\n }\r\n\r\n private measureLineHeight(style: CSSStyleDeclaration): number {\r\n const textarea = this.elementRef.nativeElement;\r\n const clone = document.createElement('textarea');\r\n\r\n clone.style.position = 'absolute';\r\n clone.style.visibility = 'hidden';\r\n clone.style.top = '-9999px';\r\n clone.style.left = '-9999px';\r\n clone.style.height = 'auto';\r\n clone.style.minHeight = '0';\r\n clone.style.maxHeight = 'none';\r\n clone.style.overflow = 'hidden';\r\n clone.style.boxSizing = style.boxSizing;\r\n clone.style.width = style.width;\r\n clone.style.fontFamily = style.fontFamily;\r\n clone.style.fontSize = style.fontSize;\r\n clone.style.fontWeight = style.fontWeight;\r\n clone.style.fontStyle = style.fontStyle;\r\n clone.style.letterSpacing = style.letterSpacing;\r\n clone.style.textTransform = style.textTransform;\r\n clone.style.paddingTop = style.paddingTop;\r\n clone.style.paddingBottom = style.paddingBottom;\r\n clone.style.paddingLeft = style.paddingLeft;\r\n clone.style.paddingRight = style.paddingRight;\r\n clone.style.borderTopWidth = style.borderTopWidth;\r\n clone.style.borderBottomWidth = style.borderBottomWidth;\r\n clone.style.borderLeftWidth = style.borderLeftWidth;\r\n clone.style.borderRightWidth = style.borderRightWidth;\r\n clone.style.borderStyle = style.borderStyle;\r\n clone.style.lineHeight = style.lineHeight;\r\n\r\n clone.rows = 1;\r\n clone.value = ' ';\r\n document.body.appendChild(clone);\r\n\r\n const paddingTop = this.parseCssValue(style.paddingTop);\r\n const paddingBottom = this.parseCssValue(style.paddingBottom);\r\n const padding = paddingTop + paddingBottom;\r\n const lineHeight = clone.scrollHeight - padding;\r\n\r\n document.body.removeChild(clone);\r\n\r\n if (textarea.ownerDocument?.defaultView?.getComputedStyle) {\r\n return Math.max(0, lineHeight);\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n setMinRows(value: number | string | null | undefined): void {\r\n this._minRows = this.coerceNumber(value);\r\n this.resizeToFitContent(true);\r\n }\r\n\r\n setMaxRows(value: number | string | null | undefined): void {\r\n this._maxRows = this.coerceNumber(value);\r\n this.resizeToFitContent(true);\r\n }\r\n\r\n private resetStyles(): void {\r\n const textarea = this.elementRef.nativeElement;\r\n if (!textarea) {\r\n return;\r\n }\r\n\r\n textarea.style.height = '';\r\n textarea.style.overflowY = '';\r\n }\r\n\r\n private coerceNumber(value: number | string | null | undefined): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const parsed = typeof value === 'number' ? value : parseFloat(value);\r\n return Number.isNaN(parsed) ? null : parsed;\r\n }\r\n\r\n private coerceBoolean(value: boolean | string | null | undefined): boolean {\r\n if (value === '' || value === true) {\r\n return true;\r\n }\r\n if (value === false || value === null || value === undefined) {\r\n return false;\r\n }\r\n if (typeof value === 'string') {\r\n const normalized = value.trim().toLowerCase();\r\n if (normalized === 'true') {\r\n return true;\r\n }\r\n if (normalized === 'false') {\r\n return false;\r\n }\r\n }\r\n return !!value;\r\n }\r\n}\r\n","import { Directive, Host, Input, Optional } from '@angular/core';\r\nimport { UicTextareaAutoresizeDirective } from './textarea-autoresize.directive';\r\n\r\n@Directive({\r\n selector: '[textareaAutoresizeMaxRows]'\r\n})\r\nexport class UicTextareaAutoresizeMaxRowsDirective {\r\n constructor(\r\n @Optional() @Host() private readonly autosize: UicTextareaAutoresizeDirective\r\n ) {}\r\n\r\n @Input()\r\n set textareaAutoresizeMaxRows(value: number | string | null | undefined) {\r\n this.autosize?.setMaxRows(value);\r\n }\r\n}\r\n","import { Directive, Host, Input, Optional } from '@angular/core';\r\nimport { UicTextareaAutoresizeDirective } from './textarea-autoresize.directive';\r\n\r\n@Directive({\r\n selector: '[textareaAutoresizeMinRows]'\r\n})\r\nexport class UicTextareaAutoresizeMinRowsDirective {\r\n constructor(\r\n @Optional() @Host() private readonly autosize: UicTextareaAutoresizeDirective\r\n ) {}\r\n\r\n @Input()\r\n set textareaAutoresizeMinRows(value: number | string | null | undefined) {\r\n this.autosize?.setMinRows(value);\r\n }\r\n}\r\n","import { Injectable, DestroyRef, inject, signal, computed } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { FormGroup } from '@angular/forms';\nimport { uicFormValuesRecord } from './form.models';\n\n@Injectable()\nexport class UicFormStateService {\n private readonly destroyRef = inject(DestroyRef);\n private formValueSignal = signal<uicFormValuesRecord>({});\n\n private currentForm: FormGroup | null = null;\n private formChangesSub: Subscription | null = null;\n\n values = computed(() => this.formValueSignal());\n form = computed(() => this.currentForm);\n\n setForm(form: FormGroup): void {\n if (this.currentForm === form) return;\n\n if (this.formChangesSub) {\n this.formChangesSub.unsubscribe();\n this.formChangesSub = null;\n }\n\n this.currentForm = form;\n this.formValueSignal.set(form.getRawValue() ?? {});\n\n this.formChangesSub = form.valueChanges.subscribe(() => {\n this.formValueSignal.set(form.getRawValue() ?? {});\n });\n }\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.formChangesSub?.unsubscribe();\n this.formChangesSub = null;\n });\n }\n\n getFieldValue(fieldName: string): any {\n if (!this.currentForm) return undefined;\n return this.currentForm.get([fieldName])?.value;\n }\n}\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Component, Input, NgZone, OnDestroy, computed, effect, inject, signal } from '@angular/core';\nimport { AbstractControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { Observable, from, isObservable, map, of } from 'rxjs';\nimport { ButtonColor, UicButtonComponent } from '../../button/button.component';\r\nimport { UicCheckboxComponent } from '../../inputs/checkbox/checkbox.component';\r\nimport { UicDatePickerComponent } from '../../inputs/date-picker/date-picker.component';\r\nimport { UicFileInputComponent } from '../../inputs/file-input/file-input.component';\r\nimport { UicInputComponent } from '../../inputs/input/input.component';\r\nimport { UicMultySelectComponent } from '../../inputs/multy-select/multy-select.component';\r\nimport { UicPhoneInputComponent } from '../../inputs/phone-input/phone-input.component';\r\nimport { UicSearcherComponent } from '../../inputs/uic-searcher/uic-searcher.component';\r\nimport { UicSelectComponent } from '../../inputs/select/select.component';\r\nimport { UicSliderComponent } from '../../inputs/ui-slider/ui-slider.component';\r\nimport { UicRadioComponent } from '../../inputs/ui-radio/ui-radio.component';\r\nimport { UicTimePickerComponent } from '../../inputs/time-picker/time-picker.component';\r\nimport { UicPoolOptionsComponent } from '../../pool-options/pool-options.component';\r\nimport { UicTextareaAutoresizeDirective } from '../../../directives/textarea-autoresize.directive';\r\nimport { UicTextareaAutoresizeMaxRowsDirective } from '../../../directives/textarea-autoresize-max-rows.directive';\r\nimport { UicTextareaAutoresizeMinRowsDirective } from '../../../directives/textarea-autoresize-min-rows.directive';\r\nimport { UicPushAlertService } from '../../../services/push-alert.service';\r\nimport { UicTranslateService } from '../../../services/translate.service';\r\nimport { FieldVisibilityRule, FormField, SelectOptionsResolver, uicFormValuesRecord } from '../form.models';\nimport { UicFormStateService } from '../form-state.service';\r\n\r\ninterface DynamicFieldState {\r\n field: FormField;\r\n control: AbstractControl | null;\r\n value: any;\r\n}\r\n\r\n@Component({\r\n selector: 'ui-dynamic-form',\r\n imports: [\r\n CommonModule,\r\n UicDatePickerComponent,\r\n ReactiveFormsModule,\r\n UicSliderComponent,\r\n UicButtonComponent,\r\n UicPoolOptionsComponent,\r\n UicTimePickerComponent,\r\n UicRadioComponent,\r\n UicSearcherComponent,\r\n UicMultySelectComponent,\r\n UicFileInputComponent,\r\n UicSelectComponent,\r\n UicTextareaAutoresizeDirective,\r\n UicTextareaAutoresizeMinRowsDirective,\r\n UicTextareaAutoresizeMaxRowsDirective,\r\n UicInputComponent,\r\n UicCheckboxComponent,\r\n UicPhoneInputComponent,\r\n FormsModule\r\n ],\r\n templateUrl: './dynamic-form.component.html',\r\n styleUrl: './dynamic-form.component.scss'\r\n})\r\nexport class UicDynamicFormComponent implements OnDestroy {\r\n private readonly fieldsSignal = signal<FormField[]>([]);\r\n private readonly formSignal = signal<FormGroup | null>(null);\r\n private readonly disabledSignal = signal(false);\r\n private readonly formState = inject(UicFormStateService);\r\n private readonly http = inject(HttpClient);\r\n private readonly alertS = inject(UicPushAlertService);\r\n private readonly i18n = inject(UicTranslateService);\r\n private readonly fieldVisibilityState = new Map<string, boolean>();\r\n private readonly searchFnCache = new WeakMap<FormField, (query: string) => Observable<any[]>>();\n private readonly searchDisplayFnCache = new WeakMap<FormField, (item: any) => string>();\r\n private readonly searchIsEnabledFnCache = new WeakMap<FormField, (item: any) => boolean>();\r\n\r\n private recognition: any = null;\r\n private voiceStopTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n @Input() set fields(value: FormField[]) {\r\n this.fieldsSignal.set(value ?? []);\r\n }\r\n get fields(): FormField[] {\r\n return this.fieldsSignal();\r\n }\r\n\r\n @Input({ required: true }) set form(value: FormGroup) {\r\n this.formSignal.set(value);\r\n this.formState.setForm(value);\r\n }\r\n get form(): FormGroup {\r\n return this.formSignal() as FormGroup;\r\n }\r\n\r\n @Input() set disabled(value: boolean) {\r\n this.disabledSignal.set(!!value);\r\n }\r\n get disabled(): boolean {\r\n return this.disabledSignal();\r\n }\r\n @Input() voiceToTextSilenceMs = 2000;\n @Input() cols = 2;\n @Input() fileUidResolverFn?: (fileUid: string) => void;\n @Input() selectOptionsResolver?: SelectOptionsResolver;\n\r\n listeningField: string | null = null;\r\n\r\n readonly fieldStates = computed<DynamicFieldState[]>(() => {\r\n const currentForm = this.formSignal();\r\n this.formState.values();\r\n\r\n return this.fieldsSignal().map(field => {\r\n const control = currentForm?.get([field.name]) ?? null;\r\n return {\r\n field,\r\n control,\r\n value: control?.value ?? null,\r\n };\r\n });\r\n });\r\n\r\n readonly visibleFieldStates = computed(() => {\r\n return this.fieldStates().filter(({ field }) => {\r\n if (!field.visibilityRules?.length) return true;\r\n return field.visibilityRules.every(rule => this.matchesVisibilityRule(rule));\r\n });\r\n });\r\n\r\n private readonly fieldStateSyncEffect = effect(() => {\r\n this.visibleFieldStates();\r\n this.syncFieldEnabledState();\r\n });\r\n\r\n readonly colorToIcon: Record<string, string> = {\r\n red: 'ri-error-warning-line',\r\n yellow: 'ri-error-warning-line',\r\n green: 'ri-checkbox-circle-line',\r\n };\r\n\r\n constructor(private readonly ngZone: NgZone) {}\r\n\r\n ngOnDestroy(): void {\r\n this.clearVoiceStopTimer();\r\n this.recognition?.abort?.();\r\n this.recognition = null;\r\n this.listeningField = null;\r\n }\r\n\r\n getGridColumn(field: FormField): string {\r\n const requestedSpan = Number(field.colSpan ?? 1);\r\n const normalizedSpan = Math.max(1, Number.isNaN(requestedSpan) ? 1 : requestedSpan);\r\n const normalizedCols = Math.max(1, Number(this.cols) || 1);\r\n const effectiveSpan = Math.min(normalizedSpan, normalizedCols);\r\n if (field.newLine) {\r\n return `1 / span ${effectiveSpan}`;\r\n }\r\n return `span ${effectiveSpan} / span ${effectiveSpan}`;\r\n }\r\n\r\n private getValueByFieldName(fieldName: string): any {\r\n const formValues = this.formState.values();\r\n if (Object.prototype.hasOwnProperty.call(formValues, fieldName)) {\r\n return formValues[fieldName];\r\n }\r\n\r\n const parts = fieldName.split('.');\r\n if (parts.length === 1) return this.formState.getFieldValue(fieldName);\r\n\r\n let current: any = this.formState.getFieldValue(parts[0]);\r\n for (let i = 1; i < parts.length; i++) {\r\n if (current == null || !Object.prototype.hasOwnProperty.call(current, parts[i])) {\r\n return undefined;\r\n }\r\n current = current[parts[i]];\r\n }\r\n return current;\r\n }\r\n\r\n private syncFieldEnabledState() {\r\n const currentForm = this.formSignal();\r\n if (!currentForm) return;\r\n\r\n const formDisabled = this.disabledSignal();\r\n const fieldStates = this.fieldStates();\r\n const visibleNames = new Set(this.visibleFieldStates().map(({ field }) => field.name));\r\n const allFieldNames = new Set(fieldStates.map(({ field }) => field.name));\r\n\r\n fieldStates.forEach(({ field, control }) => {\r\n if (!control) return;\r\n\r\n const isVisible = visibleNames.has(field.name);\r\n const wasVisible = this.fieldVisibilityState.get(field.name);\r\n\r\n if (!isVisible && wasVisible) {\r\n control.setValue(this.getClearValue(field.type), { emitEvent: false });\r\n control.markAsPristine();\r\n control.markAsUntouched();\r\n }\r\n\r\n const shouldEnable = isVisible && !formDisabled && !field.disabled;\r\n if (shouldEnable && control.disabled) {\r\n control.enable({ emitEvent: false });\r\n } else if (!shouldEnable && control.enabled) {\r\n control.disable({ emitEvent: false });\r\n }\r\n\r\n this.fieldVisibilityState.set(field.name, isVisible);\r\n });\r\n\r\n for (const key of this.fieldVisibilityState.keys()) {\r\n if (!allFieldNames.has(key)) {\r\n this.fieldVisibilityState.delete(key);\r\n }\r\n }\r\n }\r\n\r\n private getClearValue(fieldType: string): any {\r\n if (fieldType === 'checkbox' || fieldType === 'switch') {\r\n return false;\r\n }\r\n\r\n if (fieldType === 'multyselect') {\r\n return [];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private matchesVisibilityRule(rule: FieldVisibilityRule): boolean {\r\n const currentValue = this.getValueByFieldName(rule.fieldName);\r\n\r\n switch (rule.operator) {\r\n case 'equals': {\r\n if (typeof currentValue === 'boolean') {\r\n const normalizedRuleValue = this.parseBooleanLike(rule.value);\r\n if (normalizedRuleValue !== null) {\r\n return currentValue === normalizedRuleValue;\r\n }\r\n }\r\n return currentValue === rule.value;\r\n }\r\n case 'notEquals': {\r\n if (typeof currentValue === 'boolean') {\r\n const normalizedRuleValue = this.parseBooleanLike(rule.value);\r\n if (normalizedRuleValue !== null) {\r\n return currentValue !== normalizedRuleValue;\r\n }\r\n }\r\n return currentValue !== rule.value;\r\n }\r\n case 'greaterThan':\r\n return Number(currentValue) > Number(rule.value);\r\n case 'lessThan':\r\n return Number(currentValue) < Number(rule.value);\r\n case 'includes':\r\n if (currentValue == null) return false;\r\n if (Array.isArray(currentValue)) {\r\n return currentValue.includes(rule.value);\r\n }\r\n if (typeof currentValue === 'string') {\r\n return currentValue.includes(rule.value);\r\n }\r\n return false;\r\n case 'notIncludes':\r\n if (currentValue == null) return true;\r\n if (Array.isArray(currentValue)) {\r\n return !currentValue.includes(rule.value);\r\n }\r\n if (typeof currentValue === 'string') {\r\n return !currentValue.includes(rule.value);\r\n }\r\n return true;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n private parseBooleanLike(value: any): boolean | null {\r\n if (typeof value === 'boolean') return value;\r\n if (typeof value === 'number') {\r\n if (value === 1) return true;\r\n if (value === 0) return false;\r\n return null;\r\n }\r\n if (typeof value !== 'string') return null;\r\n\r\n const normalized = value.trim().toLowerCase();\r\n if (normalized === 'true' || normalized === '1') return true;\r\n if (normalized === 'false' || normalized === '0') return false;\r\n return null;\r\n }\r\n\r\n getControlErrorMessages(control: AbstractControl | null, field: FormField): string[] {\r\n if (!control?.errors) return [];\r\n if (!(control.touched || control.dirty)) return [];\r\n\r\n return Object.keys(control.errors).map(errorKey => {\r\n const error = control.errors?.[errorKey];\r\n const mapper = this.errorMessages[errorKey];\r\n return mapper\r\n ? mapper(error, field)\r\n : this.i18n.translate('validation.invalid', {\r\n field: field.label ?? field.name,\r\n });\r\n });\r\n }\r\n\r\n isListening(fieldName: string): boolean {\r\n return this.listeningField === fieldName;\r\n }\r\n\r\n private readonly errorMessages: Record<string, (error: any, field: FormField) => string> = {\r\n required: (_err, field) =>\r\n this.i18n.translate('validation.required', { field: field.label ?? field.name }),\r\n min: (err, field) =>\r\n this.i18n.translate('validation.min', {\r\n field: field.label ?? field.name,\r\n min: err.min,\r\n }),\r\n max: (err, field) =>\r\n this.i18n.translate('validation.max', {\r\n field: field.label ?? field.name,\r\n max: err.max,\r\n }),\r\n minlength: (err, field) =>\r\n this.i18n.translate('validation.minlength', {\r\n field: field.label ?? field.name,\r\n requiredLength: err.requiredLength,\r\n }),\r\n maxlength: (err, field) =>\r\n this.i18n.translate('validation.maxlength', {\r\n field: field.label ?? field.name,\r\n requiredLength: err.requiredLength,\r\n }),\r\n pattern: (_err, field) =>\r\n this.i18n.translate('validation.pattern', { field: field.label ?? field.name })\r\n };\r\n\r\n getInputColor(field: FormField, value: string | number): ButtonColor {\r\n const scale = field.internalColorScale;\r\n const cv = Number(value);\r\n const order = field.internalColorScaleOrder ?? 'asc';\r\n\r\n if (!Array.isArray(scale) || scale.length <= 1 || Number.isNaN(cv)) {\r\n return field.internalIconColor || 'grey';\r\n }\r\n\r\n const sorted = [...scale].sort((a, b) => a - b);\r\n const len = sorted.length;\r\n\r\n if (len === 2) {\r\n const [min, max] = sorted;\r\n return cv > min && cv <= max ? 'green' : 'red';\r\n }\r\n\r\n const colorSchemes: Record<'asc' | 'desc', Record<number, ButtonColor[]>> = {\r\n asc: {\r\n 3: ['red', 'green'],\r\n 4: ['red', 'yellow', 'green'],\r\n },\r\n desc: {\r\n 3: ['green', 'red'],\r\n 4: ['green', 'yellow', 'red'],\r\n },\r\n };\r\n\r\n const colors = colorSchemes[order][len] || [];\r\n for (let i = 0; i < colors.length; i++) {\r\n if (cv > sorted[i] && cv <= sorted[i + 1]) return colors[i];\r\n }\r\n\r\n return 'black';\r\n }\r\n\r\n getIconByColor(field: FormField, color: string): ButtonColor {\r\n if (!field.internalIcon && field.internalColorScale && field.internalColorScale.length > 1) {\r\n return this.colorToIcon[color] as ButtonColor;\r\n }\r\n return 'grey';\r\n }\r\n\r\n getSearcherFn(field: FormField): ((query: string) => Observable<any[]>) | undefined {\n if (field.searchFn) {\n return field.searchFn;\n }\n\n if (field.optionsSource?.key && this.selectOptionsResolver) {\n const cached = this.searchFnCache.get(field);\n if (cached) {\n return cached;\n }\n\n const searchFn = (query: string) => {\n const values = this.toNestedValues(this.formSignal()?.getRawValue?.() ?? {});\n const source = field.optionsSource!;\n const dependencyValue = source.dependsOn ? this.getValueByPath(values, source.dependsOn) : undefined;\n\n return this.toObservable(this.selectOptionsResolver!(source, {\n field,\n values,\n dependencyValue,\n query\n })).pipe(map(items => Array.isArray(items) ? items : []));\n };\n\n this.searchFnCache.set(field, searchFn);\n return searchFn;\n }\n\n if (!field.searchApi) {\n return undefined;\n }\n\r\n const cached = this.searchFnCache.get(field);\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const searchFn = (query: string) =>\r\n this.http.get<any[]>(field.searchApi!, {\r\n params: { query }\r\n });\r\n\r\n this.searchFnCache.set(field, searchFn);\r\n return searchFn;\r\n }\r\n\r\n getSearcherDisplayFn(field: FormField): ((item: any) => string) | undefined {\n if (field.searchFn) {\n return field.searchDisplayFn;\n }\n\n if (field.optionsSource?.key) {\n const cached = this.searchDisplayFnCache.get(field);\n if (cached) {\n return cached;\n }\n\n const displayFn = (item: Record<string, any>) => this.getOptionsSourceText(item, field);\n this.searchDisplayFnCache.set(field, displayFn);\n return displayFn;\n }\n\n if (!field.searchApi) {\n return field.searchDisplayFn;\n }\n\r\n const cached = this.searchDisplayFnCache.get(field);\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const displayFn = (item: { text?: string }) => item?.text ?? '';\r\n this.searchDisplayFnCache.set(field, displayFn);\r\n return displayFn;\r\n }\r\n\r\n getSearcherIsEnabledFn(field: FormField): ((item: any) => boolean) | undefined {\n if (field.searchFn) {\n return field.searchIsEnabledFn;\n }\n\r\n if (!field.searchApi) {\r\n return field.searchIsEnabledFn;\r\n }\r\n\r\n const cached = this.searchIsEnabledFnCache.get(field);\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const isEnabledFn = () => true;\r\n this.searchIsEnabledFnCache.set(field, isEnabledFn);\n return isEnabledFn;\n }\n\n private toObservable(value: any[] | Promise<any[]> | Observable<any[]>): Observable<any[]> {\n if (isObservable(value)) {\n return value;\n }\n\n if (value instanceof Promise) {\n return from(value);\n }\n\n return of(value ?? []);\n }\n\n private getOptionsSourceText(item: Record<string, any>, field: FormField): string {\n const source = field.optionsSource;\n if (!source || !item || typeof item !== 'object') return '';\n\n if (source.textTemplate) {\n return this.renderOptionsSourceTemplate(source.textTemplate, item);\n }\n\n const text = this.getValueByPath(item, source.textField?.trim() || 'text');\n const id = this.getValueByPath(item, source.idField?.trim() || 'id');\n return String(text ?? id ?? '');\n }\n\n private renderOptionsSourceTemplate(template: string, item: Record<string, any>): string {\n return template.replace(/\\{\\{\\s*([\\w.]+)\\s*\\}\\}/g, (_match, path: string) => {\n const value = this.getValueByPath(item, path);\n return value === null || value === undefined ? '' : String(value);\n });\n }\n\n private getValueByPath(source: Record<string, any>, path?: string): any {\n if (!path) return undefined;\n return path.split('.').reduce((current, key) => current?.[key], source);\n }\n\n private toNestedValues(values: uicFormValuesRecord): uicFormValuesRecord {\n const nested: uicFormValuesRecord = {};\n Object.entries(values ?? {}).forEach(([key, value]) => {\n this.setNestedValue(nested, key, value);\n });\n return nested;\n }\n\n private setNestedValue(target: uicFormValuesRecord, key: string, value: any) {\n const parts = key.split('.');\n if (parts.length === 1) {\n target[key] = value;\n return;\n }\n\n let current: any = target;\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n const next = current[part];\n\n if (next == null) {\n current[part] = {};\n } else if (typeof next !== 'object' || Array.isArray(next)) {\n target[key] = value;\n return;\n }\n current = current[part];\n }\n\n current[parts[parts.length - 1]] = value;\n }\n\n private clearVoiceStopTimer() {\n if (this.voiceStopTimer) {\r\n clearTimeout(this.voiceStopTimer);\r\n this.voiceStopTimer = null;\r\n }\r\n }\r\n\r\n private scheduleVoiceStop(recognition: any) {\r\n this.clearVoiceStopTimer();\r\n this.voiceStopTimer = setTimeout(() => recognition.stop?.(), this.voiceToTextSilenceMs);\r\n }\r\n\r\n voiceToText(target: HTMLTextAreaElement, fieldName: string) {\r\n if (typeof window === 'undefined') return;\r\n\r\n const SpeechRecognitionCtor =\r\n (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition;\r\n\r\n if (!SpeechRecognitionCtor) {\r\n this.alertS.show({\r\n type: 'warning',\r\n icon: 'ri-bug-line',\r\n title: this.i18n.translate('voice.browser_incompatibility_title'),\r\n message: this.i18n.translate('voice.browser_incompatibility_message')\r\n });\r\n return;\r\n }\r\n\r\n if (this.recognition) {\r\n this.recognition.abort?.();\r\n this.recognition = null;\r\n this.listeningField = null;\r\n this.clearVoiceStopTimer();\r\n }\r\n\r\n const recognition = new SpeechRecognitionCtor();\r\n recognition.lang = 'es-ES';\r\n recognition.interimResults = false;\r\n recognition.maxAlternatives = 1;\r\n recognition.continuous = true;\r\n\r\n recognition.onstart = () => {\r\n this.ngZone.run(() => {\r\n this.listeningField = fieldName;\r\n });\r\n this.scheduleVoiceStop(recognition);\r\n };\r\n\r\n recognition.onresult = (event: any) => {\r\n const transcript = event?.results?.[0]?.[0]?.transcript ?? '';\r\n if (!transcript) return;\r\n\r\n const currentValue = target.value ?? '';\r\n const needsSpace =\r\n currentValue.length > 0 &&\r\n !currentValue.endsWith(' ') &&\r\n !transcript.startsWith(' ');\r\n const updatedValue = `${currentValue}${needsSpace ? ' ' : ''}${transcript}`;\r\n\r\n target.value = updatedValue;\r\n target.dispatchEvent(new Event('input', { bubbles: true }));\r\n\r\n const control = this.formSignal()?.get([fieldName]);\r\n if (control) {\r\n this.ngZone.run(() => {\r\n control.setValue(updatedValue);\r\n control.markAsDirty();\r\n control.markAsTouched();\r\n });\r\n }\r\n this.scheduleVoiceStop(recognition);\r\n };\r\n\r\n recognition.onspeechstart = () => {\r\n this.clearVoiceStopTimer();\r\n };\r\n\r\n recognition.onspeechend = () => {\r\n this.scheduleVoiceStop(recognition);\r\n };\r\n\r\n recognition.onerror = (event: any) => {\r\n this.ngZone.run(() => {\r\n console.error(this.i18n.translate('voice.voice_error'), event);\r\n this.listeningField = null;\r\n });\r\n this.clearVoiceStopTimer();\r\n };\r\n\r\n recognition.onend = () => {\r\n this.ngZone.run(() => {\r\n this.recognition = null;\r\n this.listeningField = null;\r\n });\r\n this.clearVoiceStopTimer();\r\n };\r\n\r\n this.recognition = recognition;\r\n target.focus();\r\n this.ngZone.run(() => {\r\n this.listeningField = fieldName;\r\n });\r\n recognition.start();\r\n }\r\n}\r\n","<div class=\"form\" [ngStyle]=\"{'--cols': cols, '--min': '180px'}\" [formGroup]=\"form\">\r\n @for (state of visibleFieldStates(); track state.field.name) {\r\n @let field = state.field;\r\n @let control = state.control;\r\n @let currentValue = state.value ?? '';\r\n @let error = getControlErrorMessages(control, field)[0];\r\n\r\n <div [style.grid-column]=\"getGridColumn(field)\">\n @if (['text', 'number'].includes(field.type)) {\r\n @let inputColor = getInputColor(field, currentValue);\r\n <ui-input\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [icon]=\"field.icon??''\"\r\n [disabled]=\"!!control?.disabled\"\r\n [internalIconColor]=\"inputColor\"\r\n [internalIcon]=\"field.internalIcon || (currentValue !== '' ? getIconByColor(field, inputColor) : '')\"\r\n [loading]=\"field.loading??false\"\r\n [tip]=\"field.tip??''\">\r\n <input #inp\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [type]=\"field.type\"\r\n [step]=\"field.step\"\r\n [min]=\"field.min\"\r\n [max]=\"field.max\"\r\n [minLength]=\"field.minLength||null\"\r\n [maxlength]=\"field.maxLength||null\"\r\n [placeholder]=\"field.placeholder??field.label\"/>\r\n @if (field.maxLength && field.showCounter) {\r\n <span counter>{{inp.value.length}} /{{field.maxLength}}</span>\r\n }\r\n </ui-input>\r\n }\r\n @if (field.type === 'textarea') {\r\n <ui-input\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [icon]=\"field.icon??''\"\r\n [disabled]=\"!!control?.disabled\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [loading]=\"field.loading??false\"\r\n [tip]=\"field.tip??''\">\r\n <textarea #ta\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [minLength]=\"field.minLength||null\"\r\n [maxlength]=\"field.maxLength||null\"\r\n [textareaAutoresize]=\"field.textareaResize\"\r\n [textareaAutoresizeMinRows]=\"field.resizeMinRows??1\"\r\n [textareaAutoresizeMaxRows]=\"field.resizeMaxRows??5\"\r\n [rows]=\"field.resizeMinRows??3\"\r\n [placeholder]=\"field.placeholder??field.label\"\r\n ></textarea>\r\n @if (field.voiceToTextEnabled && !control?.disabled) {\r\n @let listening = isListening(field.name);\r\n <div class=\"speak-icon\" (click)=\"ta.focus()\">\r\n <ui-button\r\n [disabled]=\"listening\"\r\n style=\"margin-bottom: 2px;\"\r\n (click)=\"voiceToText(ta, field.name)\"\r\n [icon]=\"listening?'ri-mic-fill':'ri-mic-line'\"\r\n [type]=\"listening?'filled':'bordered'\"\r\n size=\"s\"\r\n [iconOnly]=\"true\"\r\n ></ui-button>\r\n @if (listening) {\r\n <i class=\"ri-voiceprint-line\"></i>\r\n }\r\n </div>\r\n }\r\n @if (field.showCounter) {\r\n <span counter>\r\n {{ta.value.length}}\r\n @if (field.maxLength) {\r\n /{{field.maxLength}}\r\n }\r\n </span>\r\n }\r\n </ui-input>\r\n }\r\n @if (field.type === 'phone') {\r\n <ui-phone-input\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [icon]=\"field.icon??''\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [loading]=\"field.loading??false\"\r\n [tip]=\"field.tip??''\"\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [placeholder]=\"field.placeholder||field.label||''\"\r\n >\r\n </ui-phone-input>\r\n }\r\n @else if (field.type === 'date') {\r\n <ui-date-picker\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [tip]=\"field.tip??''\"\r\n [justMonth]=\"!!field.monthMode\"\r\n [min]=\"field.minDate??''\"\r\n [max]=\"field.maxDate??''\"\r\n [monthDay]=\"field.monthDay||'first'\"\r\n [formControlName]=\"field.name\"\r\n ></ui-date-picker>\r\n }\r\n @else if (field.type === 'time') {\r\n <ui-time-picker\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [tip]=\"field.tip??''\"\r\n [interval]=\"field.timeInterval??5\"\r\n [formControlName]=\"field.name\"\r\n ></ui-time-picker>\r\n }\r\n @else if (field.type === 'select') {\r\n <ui-select\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [loading]=\"field.loading??false\"\r\n [nullable]=\"field.selectNullable??false\"\r\n [searcherEnabled]=\"field.selectSearchEnabled??false\"\r\n [tip]=\"field.tip??''\"\r\n [formControlName]=\"field.name\"\r\n [options]=\"field.options || []\"\r\n ></ui-select>\r\n }\r\n @else if (field.type === 'multyselect') {\r\n <ui-multy-select\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [loading]=\"field.loading??false\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [tip]=\"field.tip??''\"\r\n [formControlName]=\"field.name\"\r\n [options]=\"field.options || []\"\r\n ></ui-multy-select>\r\n }\r\n @else if (field.type === 'searcher') {\r\n <ui-searcher\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [icon]=\"field.icon??''\"\r\n [loading]=\"field.loading??false\"\r\n [tip]=\"field.tip??''\"\r\n [searchFn]=\"getSearcherFn(field)\"\r\n [itemDisplayFn]=\"getSearcherDisplayFn(field)\"\r\n [itemIsEnabledFn]=\"getSearcherIsEnabledFn(field)\"\r\n [placeholder]=\"field.placeholder??'common.search_ellipsis'\"\r\n [error]=\"error\"\r\n ></ui-searcher>\r\n }\r\n @else if (field.type === 'file') {\r\n <ui-file-input\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [loading]=\"field.loading??false\"\r\n [internalIcon]=\"field.internalIcon??''\"\r\n [internalIconColor]=\"field.internalIconColor??'grey'\"\r\n [multy]=\"field.multyEnabled??false\"\n [tip]=\"field.tip??''\"\n [fileTypes]=\"field.fileTypes??null\"\n [fileUidResolverFn]=\"fileUidResolverFn\"\n [formControlName]=\"field.name\"\n ></ui-file-input>\n }\n @else if (['checkbox', 'switch'].includes(field.type)) {\r\n <ui-checkbox\r\n [label]=\"(field.label??'') + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [placeholder]=\"field.placeholder??''\"\r\n [tip]=\"field.tip??''\"\r\n [type]=\"field.type === 'checkbox' ? 'checkbox' : 'switch'\"\r\n ></ui-checkbox>\r\n }\r\n @else if (field.type === 'radio') {\r\n <ui-radio\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [tip]=\"field.tip??''\"\r\n [loading]=\"field.loading??false\"\r\n [error]=\"error\"\r\n [options]=\"field.options || []\"\r\n ></ui-radio>\r\n }\r\n @else if (field.type === 'slider') {\r\n <ui-slider\r\n [min]=\"field.min??0\"\r\n [max]=\"field.max??100\"\r\n [step]=\"field.sliderInterval??1\"\r\n [markerCount]=\"field.sliderMarks??5\"\r\n [id]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [tip]=\"field.tip??''\"\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n ></ui-slider>\r\n }\r\n @else if (field.type === 'pool') {\r\n <ui-pool-options\r\n [error]=\"error\"\r\n [label]=\"field.label + (field.required ? ' *' : '')\"\r\n [id]=\"field.name\"\r\n [icon]=\"field.icon??''\"\r\n [loading]=\"field.loading??false\"\r\n [multy]=\"field.multyEnabled??false\"\r\n [tip]=\"field.tip??''\"\r\n [listViewTitle]=\"field.poolTitle??'common.selected'\"\r\n [enabledListView]=\"field.poolEnabledListView||false\"\r\n [formControlName]=\"field.name\"\r\n [options]=\"field.options || []\"\r\n ></ui-pool-options>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, inject } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Observable, Subscription, from, isObservable, of } from 'rxjs';\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { AppSelectOption } from '../../inputs/select/select.component';\r\nimport { UicSkeletonLoaderComponent } from '../../skeleton-loader/skeleton-loader.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\nimport { UicDynamicFormComponent } from '../form/dynamic-form.component';\r\nimport { UicFormStateService } from '../form-state.service';\r\nimport { FormBlock, FormField, FormResult, FormSchema, SelectOptionsResolver, SelectOptionsSource, uicFormValuesRecord } from '../form.models';\n\r\n@Component({\r\n selector: 'ui-form-wrapper',\r\n imports: [\r\n UicDynamicFormComponent,\r\n UicSkeletonLoaderComponent,\r\n UicButtonComponent,\r\n UicTranslatePipe,\r\n ReactiveFormsModule\r\n ],\r\n templateUrl: './form-wrapper.component.html',\r\n styleUrl: './form-wrapper.component.scss',\r\n providers: [UicFormStateService]\r\n})\r\nexport class UicFormWrapperComponent implements OnInit, OnChanges, OnDestroy {\r\n private readonly fb = inject(FormBuilder);\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n form: FormGroup = this.fb.group({});\r\n effectiveSchema: FormSchema = { cols: 2, blocks: [{ fields: [] }] };\r\n\r\n @Input() schema?: FormSchema;\r\n @Input() fields: FormField[] = [];\r\n @Input() cols = 2;\r\n @Input() externalData: Record<string, AppSelectOption[]> = {};\n @Input() selectOptionsResolver?: SelectOptionsResolver;\n @Input() loading = false;\n @Input() disabled = false;\r\n @Input() showButtons = false;\r\n @Input() fillSelects = false;\r\n @Input() initialValues: uicFormValuesRecord = {};\r\n @Input() focusFieldName: string | null = null;\r\n @Input() focusFieldTrigger: unknown = null;\r\n @Input() fileUidResolverFn?: (fileUid: string) => void;\r\n\r\n @Output() formSubmit = new EventEmitter<FormResult>();\n @Output() formChange = new EventEmitter<uicFormValuesRecord>();\n @Output() optionsSourceError = new EventEmitter<{\n field: FormField;\n source: SelectOptionsSource;\n error: unknown;\n }>();\n\n private formValueSub: Subscription | null = null;\n private readonly optionSourceSubs = new Map<string, Subscription>();\n private readonly optionSourceDependencyValueByField = new Map<string, any>();\n private hasFocusedCurrentTrigger = false;\n\r\n ngOnInit() {\r\n this.syncEffectiveSchema();\n this.buildForm();\n this.updateExtenalData();\n this.updateOptionsSources();\n }\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const sourceChanged =\r\n (changes['schema'] && !changes['schema'].firstChange) ||\r\n (changes['fields'] && !changes['fields'].firstChange && !this.schema) ||\r\n (changes['cols'] && !changes['cols'].firstChange && !this.schema);\r\n\r\n if (changes['schema'] || (changes['fields'] && !this.schema) || (changes['cols'] && !this.schema)) {\r\n this.syncEffectiveSchema();\r\n }\r\n\r\n if (changes['disabled'] && !changes['disabled'].firstChange) {\r\n this.updateDisabledState();\r\n }\r\n if (sourceChanged) {\n this.buildForm();\n this.updateExtenalData();\n this.updateOptionsSources();\n }\n if (changes['externalData']) {\n this.updateExtenalData();\n }\n if (changes['selectOptionsResolver'] && !changes['selectOptionsResolver'].firstChange) {\n this.updateOptionsSources(true);\n }\n if (changes['initialValues'] && !changes['initialValues'].firstChange) {\n this.buildForm();\n this.updateExtenalData();\n this.updateOptionsSources();\n }\n const focusRequestChanged =\r\n (changes['focusFieldName'] && !changes['focusFieldName'].firstChange) ||\r\n (changes['focusFieldTrigger'] && !changes['focusFieldTrigger'].firstChange);\r\n\r\n if (focusRequestChanged) {\r\n this.hasFocusedCurrentTrigger = false;\r\n this.focusConfiguredField();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\n this.formValueSub?.unsubscribe();\n this.formValueSub = null;\n this.clearOptionSourceSubscriptions();\n }\n\r\n private buildForm() {\r\n this.formValueSub?.unsubscribe();\r\n this.formValueSub = null;\r\n\r\n const fields = this.collectAllFields();\r\n const numericFields = fields.filter(field => field.type === 'number');\r\n const newForm = this.fb.group({});\r\n\r\n fields.forEach(field => {\r\n const validators = this.mapValidatorsFromField(field);\r\n const initial = this.normalizeFieldValue(field, this.newFieldInitialValue(field, true));\r\n const controlState = {\r\n value: initial,\r\n disabled: this.disabled || !!field.disabled\r\n };\r\n newForm.addControl(field.name, this.fb.control(controlState, validators));\r\n });\r\n\r\n this.formValueSub = newForm.valueChanges.subscribe(() => {\n this.normalizeNumericControls(newForm, numericFields);\n this.handleFormChange();\n this.updateDependentOptionsSources();\n });\n\n this.form = newForm;\n this.optionSourceDependencyValueByField.clear();\n this.updateDisabledState();\n this.focusConfiguredField();\n }\n\r\n private focusConfiguredField(): void {\r\n if (!this.focusFieldName || this.hasFocusedCurrentTrigger) return;\r\n\r\n const fieldName = this.focusFieldName;\r\n requestAnimationFrame(() => {\r\n const target = this.findFocusableFieldElement(fieldName);\r\n if (!target) return;\r\n\r\n this.hasFocusedCurrentTrigger = true;\r\n target.focus();\r\n if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) {\r\n target.select();\r\n }\r\n });\r\n }\r\n\r\n private findFocusableFieldElement(fieldName: string): HTMLElement | null {\r\n const focusableElements = this.elementRef.nativeElement.querySelectorAll<HTMLElement>(\r\n 'input, textarea, select, button, [tabindex]'\r\n );\r\n\r\n return Array.from(focusableElements).find(element => element.id === fieldName) ?? null;\r\n }\r\n\r\n private updateDisabledState() {\r\n if (!this.form) return;\r\n\r\n const fieldByName = new Map(this.collectAllFields().map(field => [field.name, field]));\r\n Object.keys(this.form.controls).forEach(key => {\r\n const control = this.getFieldControl(key);\r\n if (!control) return;\r\n\r\n const field = fieldByName.get(key);\r\n if (this.disabled || field?.disabled) {\r\n control.disable({ emitEvent: false });\r\n } else {\r\n control.enable({ emitEvent: false });\r\n }\r\n });\r\n }\r\n\r\n private updateExtenalData() {\r\n if (!this.externalData || !this.effectiveSchema?.blocks || Object.keys(this.externalData).length === 0) {\r\n return;\r\n }\r\n\r\n for (const block of this.effectiveSchema.blocks) {\r\n block.fields = this.updateFieldOptions(block);\r\n }\r\n }\r\n\r\n private mapValidatorsFromField(field: FormField) {\r\n const validators = [];\r\n if (field.required) validators.push(Validators.required);\r\n if (typeof field.min === 'number') validators.push(Validators.min(field.min));\r\n if (typeof field.max === 'number') validators.push(Validators.max(field.max));\r\n if (typeof field.maxLength === 'number') validators.push(Validators.maxLength(field.maxLength));\r\n if (typeof field.minLength === 'number') validators.push(Validators.minLength(field.minLength));\r\n if (field.pattern instanceof RegExp) validators.push(Validators.pattern(field.pattern));\r\n return validators;\r\n }\r\n\r\n handleSubmit() {\r\n let result: FormResult = { result: false, form: null };\r\n if (this.form.valid) {\r\n result = { result: true, form: this.toNestedValues(this.form.getRawValue()) };\r\n } else {\r\n this.form.markAllAsTouched();\r\n }\r\n this.formSubmit.emit(result);\r\n return result;\r\n }\r\n\r\n private handleFormChange() {\r\n this.formChange.emit(this.toNestedValues(this.form.getRawValue()));\r\n }\r\n\r\n private updateFieldOptions(block: FormBlock): FormField[] {\n return block.fields.map(field => {\n if (field.type === 'select' || field.type === 'pool' || field.type === 'multyselect') {\n if (this.hasUsableOptionsSource(field)) {\n return field;\n }\n\n const externalOptions = this.externalData?.[field.name];\n return { ...field, options: Array.isArray(externalOptions) ? externalOptions : (field.options ?? []) };\n }\n return field;\n });\n }\n\n private updateOptionsSources(force = false): void {\n const fields = this.collectAllFields().filter(field => this.hasUsableOptionsSource(field));\n const fieldNames = new Set(fields.map(field => field.name));\n\n for (const fieldName of this.optionSourceSubs.keys()) {\n if (!fieldNames.has(fieldName)) {\n this.optionSourceSubs.get(fieldName)?.unsubscribe();\n this.optionSourceSubs.delete(fieldName);\n this.optionSourceDependencyValueByField.delete(fieldName);\n }\n }\n\n fields.forEach(field => this.resolveOptionsSourceField(field, force));\n }\n\n private updateDependentOptionsSources(): void {\n const fields = this.collectAllFields().filter(field => {\n const source = field.optionsSource;\n return this.hasUsableOptionsSource(field) && !!source?.dependsOn;\n });\n\n fields.forEach(field => this.resolveOptionsSourceField(field));\n }\n\n private resolveOptionsSourceField(field: FormField, force = false): void {\n const source = field.optionsSource;\n if (!source?.key) return;\n\n if (!this.selectOptionsResolver) {\n this.updateFieldOptionsState(field.name, {\n options: field.options ?? [],\n loading: false\n });\n return;\n }\n\n const values = this.toNestedValues(this.form?.getRawValue?.() ?? {});\n const dependencyValue = source.dependsOn ? this.getValueByPath(values, source.dependsOn) : undefined;\n const dependencyKey = source.dependsOn ? `${source.dependsOn}:${this.safeStringify(dependencyValue ?? null)}` : '__init__';\n const previousDependencyKey = this.optionSourceDependencyValueByField.get(field.name);\n\n if (!force && previousDependencyKey === dependencyKey) {\n return;\n }\n\n this.optionSourceDependencyValueByField.set(field.name, dependencyKey);\n\n if (source.dependsOn && (dependencyValue === null || dependencyValue === undefined || dependencyValue === '')) {\n this.optionSourceSubs.get(field.name)?.unsubscribe();\n this.optionSourceSubs.delete(field.name);\n this.clearFieldValue(field);\n this.updateFieldOptionsState(field.name, { options: [], loading: false });\n return;\n }\n\n this.optionSourceSubs.get(field.name)?.unsubscribe();\n this.updateFieldOptionsState(field.name, { loading: true });\n\n let optionsResult: AppSelectOption[] | unknown[] | Promise<AppSelectOption[] | unknown[]> | Observable<AppSelectOption[] | unknown[]>;\n try {\n optionsResult = this.selectOptionsResolver(source, {\n field,\n values,\n dependencyValue\n });\n } catch (error) {\n this.handleOptionsSourceError(field, source, error);\n return;\n }\n\n const sub = this.toObservable(optionsResult).subscribe({\n next: items => {\n const options = this.mapOptionsSourceItems(items, source);\n this.updateFieldOptionsState(field.name, { options, loading: false });\n this.clearInvalidFieldValue(field.name, options);\n },\n error: error => this.handleOptionsSourceError(field, source, error),\n complete: () => this.updateFieldOptionsState(field.name, { loading: false })\n });\n\n this.optionSourceSubs.set(field.name, sub);\n }\n\n private handleOptionsSourceError(field: FormField, source: SelectOptionsSource, error: unknown): void {\n this.updateFieldOptionsState(field.name, { options: [], loading: false });\n this.optionsSourceError.emit({ field, source, error });\n }\n\n private toObservable(\n value: AppSelectOption[] | unknown[] | Promise<AppSelectOption[] | unknown[]> | Observable<AppSelectOption[] | unknown[]>\n ): Observable<AppSelectOption[] | unknown[]> {\n if (isObservable(value)) {\n return value;\n }\n\n if (value instanceof Promise) {\n return from(value);\n }\n\n return of(value ?? []);\n }\n\n private mapOptionsSourceItems(items: unknown[] | AppSelectOption[], source: SelectOptionsSource): AppSelectOption[] {\n if (!Array.isArray(items)) return [];\n\n return items.map(item => this.mapOptionsSourceItem(item, source));\n }\n\n private mapOptionsSourceItem(item: unknown, source: SelectOptionsSource): AppSelectOption {\n if (item && typeof item === 'object') {\n const record = item as Record<string, any>;\n const id = this.getValueByPath(record, source.idField?.trim() || 'id');\n const fallbackText = this.getValueByPath(record, source.textField?.trim() || 'text');\n const optionId = this.isValidOptionId(id)\n ? id\n : this.isValidOptionId(fallbackText)\n ? fallbackText\n : String(fallbackText ?? '');\n\n return {\n detail: typeof record['detail'] === 'string' ? record['detail'] : undefined,\n icon: typeof record['icon'] === 'string' ? record['icon'] : undefined,\n iconColor: typeof record['iconColor'] === 'string' ? record['iconColor'] : undefined,\n id: optionId,\n text: source.textTemplate\n ? this.renderOptionsSourceTemplate(source.textTemplate, record)\n : String(fallbackText ?? id ?? '')\n };\n }\n\n return {\n id: String(item ?? ''),\n text: String(item ?? '')\n };\n }\n\n private renderOptionsSourceTemplate(template: string, item: Record<string, any>): string {\n return template.replace(/\\{\\{\\s*([\\w.]+)\\s*\\}\\}/g, (_match, path: string) => {\n const value = this.getValueByPath(item, path);\n return value === null || value === undefined ? '' : String(value);\n });\n }\n\n private updateFieldOptionsState(\n fieldName: string,\n values: { options?: AppSelectOption[]; loading?: boolean }\n ): void {\n if (!this.effectiveSchema?.blocks?.length) return;\n\n for (const block of this.effectiveSchema.blocks) {\n const index = block.fields.findIndex(field => field.name === fieldName);\n if (index === -1) continue;\n\n const field = block.fields[index];\n block.fields[index] = {\n ...field,\n ...(values.options !== undefined ? { options: values.options } : {}),\n ...(values.loading !== undefined ? { loading: values.loading } : {})\n };\n block.fields = [...block.fields];\n this.effectiveSchema.blocks = [...this.effectiveSchema.blocks];\n return;\n }\n }\n\n private clearInvalidFieldValue(fieldName: string, options: AppSelectOption[]): void {\n const control = this.getFieldControl(fieldName);\n if (!control) return;\n\n const currentValue = control.value;\n if (currentValue === null || currentValue === undefined || currentValue === '') return;\n\n if (Array.isArray(currentValue)) {\n const validIds = new Set(options.map(option => option.id));\n const filteredValue = currentValue.filter(value => validIds.has(value));\n if (filteredValue.length !== currentValue.length) {\n control.setValue(filteredValue, { emitEvent: false });\n this.handleFormChange();\n }\n return;\n }\n\n if (!options.some(option => option.id === currentValue)) {\n control.setValue(null, { emitEvent: false });\n this.handleFormChange();\n }\n }\n\n private clearFieldValue(field: FormField): void {\n const control = this.getFieldControl(field.name);\n if (!control) return;\n\n const blankValue = this.blankValue(field);\n if (control.value !== blankValue) {\n control.setValue(blankValue, { emitEvent: false });\n this.handleFormChange();\n }\n }\n\n private hasUsableOptionsSource(field: FormField): boolean {\n return this.supportsOptions(field) && !!field.optionsSource?.key?.trim();\n }\n\n private supportsOptions(field: FormField): boolean {\n return field.type === 'select' || field.type === 'pool' || field.type === 'multyselect' || field.type === 'radio';\n }\n\n private isValidOptionId(value: unknown): value is string | number | null {\n return typeof value === 'string' || typeof value === 'number' || value === null;\n }\n\n private getValueByPath(source: Record<string, any>, path?: string): any {\n if (!path) return undefined;\n return path.split('.').reduce((current, key) => current?.[key], source);\n }\n\n private safeStringify(value: any): string {\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n }\n\n private clearOptionSourceSubscriptions(): void {\n this.optionSourceSubs.forEach(sub => sub.unsubscribe());\n this.optionSourceSubs.clear();\n this.optionSourceDependencyValueByField.clear();\n }\n\r\n private collectAllFields(): FormField[] {\r\n return (this.effectiveSchema?.blocks ?? []).flatMap(block => block.fields ?? []);\r\n }\r\n\r\n updateFieldValue(name: string, value: any) {\r\n const field = this.findFieldByName(name);\r\n this.getFieldControl(name)?.patchValue(this.normalizeFieldValue(field, value), { emitEvent: false });\r\n }\r\n\r\n updateFieldConfig(name: string, config: Omit<FormField, 'name'|'type' >) {\r\n if (!this.effectiveSchema?.blocks?.length) return;\r\n\r\n for (const block of this.effectiveSchema.blocks) {\r\n const index = block.fields.findIndex(field => field.name === name);\r\n if (index === -1) continue;\r\n\r\n const current = block.fields[index];\r\n const restConfig: Partial<FormField> = { ...(config ?? {}) };\r\n delete (restConfig as any).name;\r\n delete (restConfig as any).type;\r\n\r\n const updatedField: FormField = {\r\n ...current,\r\n ...restConfig,\r\n name: current.name,\r\n type: current.type,\r\n };\r\n\r\n block.fields[index] = updatedField;\r\n block.fields = [...block.fields];\r\n this.effectiveSchema.blocks = [...this.effectiveSchema.blocks];\r\n\r\n const control = this.getFieldControl(name);\r\n if (control) {\r\n control.setValidators(this.mapValidatorsFromField(updatedField));\r\n control.updateValueAndValidity({ onlySelf: true, emitEvent: false });\r\n }\r\n this.updateDisabledState();\r\n return;\r\n }\r\n }\r\n\r\n updateFieldDisabled(name: string, disabled: boolean): void {\r\n const control = this.getFieldControl(name);\r\n if (!control) return;\r\n\r\n if (disabled || this.disabled) {\r\n control.disable({ emitEvent: false });\r\n } else {\r\n control.enable({ emitEvent: false });\r\n }\r\n\r\n this.updateSchemaField(name, { disabled }, this.effectiveSchema.blocks);\r\n }\r\n\r\n updateFieldLoading(name: string, loading: boolean): void {\r\n this.updateSchemaField(name, { loading }, this.effectiveSchema.blocks);\r\n }\r\n\r\n submit() {\r\n return this.handleSubmit();\r\n }\r\n\r\n clean(hardReset: boolean = false) {\r\n if (!this.form) return;\r\n\r\n const fields = this.collectAllFields();\r\n const fieldMap = new Map(fields.map(field => [field.name, field]));\r\n const resetValues: uicFormValuesRecord = {};\r\n\r\n Object.keys(this.form.controls).forEach(name => {\r\n const field = fieldMap.get(name);\r\n resetValues[name] = this.resolveResetValue(name, field, hardReset);\r\n });\r\n\r\n this.form.reset(resetValues, { emitEvent: false });\r\n this.handleFormChange();\r\n }\r\n\r\n addFieldControl(field: FormField, after?: string) {\r\n if (this.form.contains(field.name)) return;\r\n\r\n const validators = this.mapValidatorsFromField(field);\r\n const controlState = {\r\n value: this.normalizeFieldValue(field, this.newFieldInitialValue(field)),\r\n disabled: this.disabled || !!field.disabled\r\n };\r\n\r\n this.form.addControl(field.name, this.fb.control(controlState, validators), { emitEvent: false });\r\n this.updateExtenalData();\r\n\r\n if (this.insertField(field, this.effectiveSchema.blocks, after)) return;\r\n\r\n if (this.effectiveSchema.blocks?.length) {\r\n this.effectiveSchema.blocks[0].fields.push(field);\r\n }\r\n }\r\n\r\n removeFieldControl(name: string) {\r\n if (this.form.contains(name)) {\r\n this.form.removeControl(name, { emitEvent: false });\r\n }\r\n\r\n const removeSchemaField = (blocks?: FormBlock[]) => {\r\n if (!blocks) return false;\r\n for (const block of blocks) {\r\n const index = block.fields.findIndex(field => field.name === name);\r\n if (index !== -1) {\r\n block.fields.splice(index, 1);\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n removeSchemaField(this.effectiveSchema.blocks);\r\n }\r\n\r\n private resolveResetValue(name: string, field: FormField | undefined, hardReset: boolean) {\r\n if (!hardReset) {\r\n const initial = this.normalizeFieldValue(field, this.resolveInitialValue(name));\r\n if (initial !== null && initial !== undefined) return initial;\r\n }\r\n return this.blankValue(field);\r\n }\r\n\r\n private blankValue(field?: FormField) {\r\n if (!field) return null;\r\n\r\n switch (field.type) {\r\n case 'text':\r\n case 'textarea':\r\n case 'phone':\r\n return '';\r\n case 'checkbox':\r\n case 'switch':\r\n return false;\r\n case 'multyselect':\r\n return [];\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n private newFieldInitialValue(field: FormField, useFallbackSelect = false) {\r\n let initial = this.resolveInitialValue(field.name);\r\n if ((field.type === 'checkbox' || field.type === 'switch') && initial == null) initial = false;\r\n if (field.type === 'slider' && initial == null) initial = field.min ?? 0;\r\n if (this.fillSelects && useFallbackSelect && field.type === 'select' && initial == null && field.options?.length) {\r\n initial = field.options[0].id;\r\n }\r\n return initial;\r\n }\r\n\r\n private insertField(field: FormField, blocks?: FormBlock[], after?: string) {\r\n if (!blocks) return false;\r\n\r\n for (const block of blocks) {\r\n const idx = block.fields.findIndex(item => item.name === after);\r\n if (idx !== -1) {\r\n block.fields.splice(idx + 1, 0, field);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private updateSchemaField(\r\n name: string,\r\n values: { disabled?: boolean; loading?: boolean },\r\n blocks?: FormBlock[]\r\n ): boolean {\r\n if (!blocks) return false;\r\n\r\n for (const block of blocks) {\r\n const field = block.fields.find(item => item.name === name);\r\n if (field) {\r\n if (values.loading !== undefined) field.loading = values.loading;\r\n if (values.disabled !== undefined) field.disabled = values.disabled;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private getFieldControl(name: string) {\r\n return this.form.get([name]);\r\n }\r\n\r\n private findFieldByName(name: string): FormField | undefined {\r\n return this.collectAllFields().find(field => field.name === name);\r\n }\r\n\r\n private resolveInitialValue(name: string): any {\r\n if (!this.initialValues) return null;\r\n if (Object.prototype.hasOwnProperty.call(this.initialValues, name)) {\r\n return this.initialValues[name];\r\n }\r\n\r\n const parts = name.split('.');\r\n if (parts.length === 1) return null;\r\n\r\n let current: any = this.initialValues;\r\n for (const part of parts) {\r\n if (current == null || typeof current !== 'object' || !Object.prototype.hasOwnProperty.call(current, part)) {\r\n return null;\r\n }\r\n current = current[part];\r\n }\r\n return current;\r\n }\r\n\r\n private normalizeNumericControls(form: FormGroup, fields: FormField[]) {\r\n for (const field of fields) {\r\n const control = form.get([field.name]);\r\n if (!control) continue;\r\n\r\n const normalized = this.normalizeFieldValue(field, control.value);\r\n if (control.value !== normalized) {\r\n control.setValue(normalized, { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private normalizeFieldValue(field: FormField | undefined, value: any) {\r\n if (field?.type !== 'number') {\r\n return value;\r\n }\r\n\r\n if (value === '' || value == null) {\r\n return null;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return Number.isNaN(value) ? null : value;\r\n }\r\n\r\n const normalized = Number(value);\r\n return Number.isNaN(normalized) ? null : normalized;\r\n }\r\n\r\n private toNestedValues(values: uicFormValuesRecord): uicFormValuesRecord {\r\n const nested: uicFormValuesRecord = {};\r\n Object.entries(values ?? {}).forEach(([key, value]) => {\r\n this.setNestedValue(nested, key, value);\r\n });\r\n return nested;\r\n }\r\n\r\n private setNestedValue(target: uicFormValuesRecord, key: string, value: any) {\r\n const parts = key.split('.');\r\n if (parts.length === 1) {\r\n target[key] = value;\r\n return;\r\n }\r\n\r\n let current: any = target;\r\n for (let i = 0; i < parts.length - 1; i++) {\r\n const part = parts[i];\r\n const next = current[part];\r\n\r\n if (next == null) {\r\n current[part] = {};\r\n } else if (typeof next !== 'object' || Array.isArray(next)) {\r\n target[key] = value;\r\n return;\r\n }\r\n current = current[part];\r\n }\r\n\r\n current[parts[parts.length - 1]] = value;\r\n }\r\n\r\n private syncEffectiveSchema() {\r\n if (this.schema) {\r\n this.effectiveSchema = this.schema;\r\n return;\r\n }\r\n\r\n this.effectiveSchema = {\r\n cols: this.cols ?? 2,\r\n blocks: [\r\n {\r\n fields: [...(this.fields ?? [])]\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (ngSubmit)=\"handleSubmit()\">\r\n @for (block of effectiveSchema.blocks; track $index) {\r\n \r\n <section class=\"form-block\">\r\n @if (block.title){\r\n <div class=\"block-title\">{{ block.title }}</div>\r\n }\r\n @if (block.subtitle){\r\n <div class=\"block-subtitle\">{{ block.subtitle }}</div>\r\n }\r\n @if (loading) {\r\n <ui-skeleton-loader\r\n [cols]=\"effectiveSchema.cols\"\r\n [inputs]=\"block.fields.length\"\r\n ></ui-skeleton-loader>\r\n } @else {\r\n <ui-dynamic-form\n [cols]=\"effectiveSchema.cols\"\n [disabled]=\"disabled\"\n [fileUidResolverFn]=\"fileUidResolverFn\"\n [fields]=\"block.fields\"\n [form]=\"form\"\n [selectOptionsResolver]=\"selectOptionsResolver\">\n </ui-dynamic-form>\n }\r\n </section>\r\n }\r\n @if ( showButtons ) {\r\n\r\n <div class=\"form-buttons\">\r\n <ui-button color=\"black\" type=\"bordered\" (click)=\"clean()\">{{'common.clear' | uicTranslate}}</ui-button>\r\n <ui-button color=\"black\" (click)=\"submit()\">{{'common.save' | uicTranslate}}</ui-button>\r\n </div>\r\n }\r\n</form>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ui-step-tabs',\r\n imports: [],\r\n templateUrl: './step-tabs.component.html',\r\n styleUrl: './step-tabs.component.scss'\r\n})\r\nexport class UicStepTabsComponent {\r\n @Input() tabs:string[] = [];\r\n @Input() currentTab:string = '';\r\n @Input() navigationEnabled = false;\r\n @Input() showStepTitle = true;\r\n @Output() currentTabChange = new EventEmitter<string>();\r\n\r\n currentIndex = 1;\r\n\r\n changeTab(newTab:string){\r\n if ( this.navigationEnabled ){\r\n this.currentIndex = (this.tabs.findIndex(f=>f==newTab)??0) + 1;\r\n this.currentTab = newTab;\r\n this.currentTabChange.emit(newTab)\r\n }\r\n }\r\n}\r\n","<div class=\"tabs-wrapper\">\r\n @for (tab of tabs; track tab) {\r\n <div class=\"form-tab\" \r\n [class.selected-tab]=\"tab == currentTab\" \r\n [class.tab-hover]=\"navigationEnabled && tab != currentTab\"\r\n (click)=\"changeTab(tab)\">\r\n <div class=\"form-tab-title\">{{tab}}</div>\r\n <div class=\"form-tab-bar\"></div>\r\n </div>\r\n }\r\n</div>\r\n@if (showStepTitle) {\r\n <h1 class=\"tab-title\"> {{currentIndex + \". \" + currentTab}} </h1>\r\n}","import { Component, EventEmitter, Input, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { FormResult, FormStep } from '../form.models';\r\nimport { UicStepTabsComponent } from './step-tabs/step-tabs.component';\r\nimport { ButtonColor, UicButtonComponent } from '../../button/button.component';\r\nimport { UicFormWrapperComponent } from '../form-wrapper/form-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'ui-steps-form',\r\n imports: [UicStepTabsComponent, UicButtonComponent, UicFormWrapperComponent, UicTranslatePipe],\r\n templateUrl: './steps-form.component.html',\r\n styleUrl: './steps-form.component.scss'\r\n})\r\nexport class UicStepsFormComponent {\r\n @ViewChildren(UicFormWrapperComponent) allForms!: QueryList<UicFormWrapperComponent>;\r\n @Input() steps:FormStep[]=[];\r\n @Input() navigationEnabled = false;\r\n @Input() showStepTitle = true;\r\n @Input() showButtons = true;\r\n @Input() buttonsColor:ButtonColor = 'black';\r\n \r\n @Output() formSubmit = new EventEmitter<FormResult>(); \r\n\r\n\r\n externalData={};\r\n formDisabled=false;\r\n loading=false;\r\n\r\n tabs:string[] = [];\r\n completedForms = new Map<string,Record<string,any>>();\r\n currentTabTitle = '';\r\n\r\n\r\n ngOnInit(){\r\n this.tabs = this.steps.map(p=>p.title);\r\n this.currentTabTitle = this.tabs[0];\r\n }\r\n\r\n private getFormByTitle(title: string): UicFormWrapperComponent | undefined {\r\n return this.allForms.find((form, index) => this.steps[index].title === title);\r\n }\r\n\r\n // CONTROLES DE FORMULARIO\r\n updateFieldValue(step:string,controlName:string, value:string){\r\n const stepForm = this.getFormByTitle(step);\r\n stepForm?.updateFieldValue(controlName,value);\r\n }\r\n\r\n updateFildDisabled(step:string,controlName:string, value:boolean){\r\n const stepForm = this.getFormByTitle(step);\r\n stepForm?.updateFieldDisabled(controlName,value);\r\n }\r\n\r\n updateFildLoading(step:string,controlName:string, value:boolean){\r\n const stepForm = this.getFormByTitle(step);\r\n stepForm?.updateFieldLoading(controlName,value);\r\n }\r\n \r\n // CONTROLES DE MOVIMIENTO\r\n next(){\r\n if (!this.isLast){\r\n if ( this.handleStepSubmit( this.currentTabTitle ) ){\r\n this.currentTabTitle = this.steps[this.currentIdx + 1]?.title??'';\r\n }\r\n }else if ( this.handleStepSubmit( this.currentTabTitle ) ){\r\n this.formSubmit.emit({\r\n result:true,\r\n form: this.getMergedForm()\r\n }); \r\n }\r\n }\r\n\r\n back(){\r\n if (!this.isFirst){\r\n this.currentTabTitle = this.steps[this.currentIdx - 1]?.title??'';\r\n }\r\n }\r\n \r\n\r\n\r\n private handleStepSubmit(title:string):boolean{\r\n const stepForm = this.getFormByTitle(this.currentTabTitle);\r\n const result = stepForm?.handleSubmit();\r\n if ( !result?.result ){\r\n return false;\r\n }else{\r\n this.completedForms.set(title,result.form??{});\r\n return true;\r\n }\r\n }\r\n\r\n private getMergedForm() {\r\n return Object.assign({}, ...Array.from(this.completedForms.values()));\r\n }\r\n\r\n\r\n get currentIdx(): number {\r\n return this.steps.findIndex(f => f.title === this.currentTabTitle);\r\n }\r\n\r\n get isFirst(): boolean {\r\n return this.currentIdx === 0;\r\n }\r\n\r\n get isLast(): boolean {\r\n return this.currentIdx === this.steps.length - 1;\r\n }\r\n}\r\n","<ui-step-tabs \r\n [(currentTab)]=\"currentTabTitle\" \r\n [navigationEnabled]=\"navigationEnabled\"\r\n [showStepTitle]=\"showStepTitle\"\r\n [tabs]=\"tabs\"></ui-step-tabs>\r\n\r\n\r\n<!-- formulario -->\r\n@for (step of steps; track $index) {\r\n <div [class.hidden-form]=\"step.title!==currentTabTitle\" >\r\n <ui-form-wrapper [schema]=\"step.form\" \r\n [externalData]=\"externalData\"\r\n [disabled]=\"formDisabled\"\r\n [loading]=\"loading\"></ui-form-wrapper>\r\n </div>\r\n}\r\n\r\n@if (showButtons) {\r\n <div style=\"display: flex; gap: 10px;\">\r\n <ui-button [color]=\"buttonsColor\" type=\"bordered\" [disabled]=\"isFirst\" (click)=\"back()\" >{{'step_form.back' | uicTranslate}}</ui-button>\r\n <ui-button [color]=\"buttonsColor\" (click)=\"next()\">{{isLast?('step_form.submit' | uicTranslate):('step_form.next' | uicTranslate)}}</ui-button>\r\n </div>\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { UicSearcherComponent } from '../uic-searcher/uic-searcher.component';\r\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'ui-multy-searcher',\r\n imports: [UicButtonComponent, UicTranslatePipe],\r\n templateUrl: './multy-searcher.component.html',\r\n styleUrl: './multy-searcher.component.scss'\r\n})\r\nexport class UicMultySearcherComponent {\r\n\r\n @Input() itemDisplayFn?: (item: any) => string = item => String(item);\r\n @Input() disabled = false;\r\n @Input() values:any[]=[];\r\n @Output() valuesChange = new EventEmitter<any[]>();\r\n \r\n\r\n removeItem(idx:number){\r\n this.values.splice(idx,1);\r\n this.valuesChange.emit(this.values);\r\n }\r\n}\r\n\r\n\r\n\r\n","<div class=\"search-results\">\r\n @for (item of values; track $index) {\r\n <div class=\"search-result\" [class.disabledresult]=\"disabled\">\r\n <div [innerHTML]=\"itemDisplayFn?itemDisplayFn(item):''\">\r\n </div>\r\n @if ( !disabled ){\r\n <ui-button (click)=\"removeItem($index)\" [iconOnly]=\"true\" icon=\"ri-delete-bin-line\" type=\"ghost\" color=\"red\" size=\"s\"></ui-button>\r\n }\r\n </div>\r\n }\r\n @if (disabled && values.length == 0) {\r\n <div class=\"search-result-empty\">\r\n {{'searcher.without_selected' | uicTranslate}}\r\n </div>\r\n }\r\n</div>\r\n","import { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, ContentChild, ElementRef, EventEmitter, InjectionToken, Input, OnDestroy, Output, TemplateRef, ViewChild, ViewContainerRef, forwardRef, inject } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\n\r\nexport interface DropdownOverlayControls {\r\n close(): void;\r\n open(): void;\r\n toggle(): void;\r\n readonly isOpen: boolean;\r\n}\r\n\r\nexport const DROPDOWN_OVERLAY_CONTROLS = new InjectionToken<DropdownOverlayControls>('DROPDOWN_OVERLAY_CONTROLS');\r\n\r\nconst DEFAULT_POSITIONS: ConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' },\r\n];\r\n\r\n@Component({\r\n selector: 'ui-dropdown-container',\r\n imports: [CommonModule],\r\n templateUrl: './dropdown-container.component.html',\r\n styleUrl: './dropdown-container.component.scss',\r\n providers: [\r\n {\r\n provide: DROPDOWN_OVERLAY_CONTROLS,\r\n useExisting: forwardRef(() => UicDropdownContainerComponent),\r\n },\r\n ],\r\n})\r\nexport class UicDropdownContainerComponent implements OnDestroy, DropdownOverlayControls {\r\n private _disabled = false;\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n @Input() buttonLabel = 'common.open';\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (value) {\r\n this.close();\r\n }\r\n }\r\n @Input() positions: ConnectedPosition[] = DEFAULT_POSITIONS;\r\n @Input() matchTriggerWidth = false;\r\n @Input() width?: number | string;\r\n @Input() minWidth?: number | string;\r\n @Input() maxWidth?: number | string;\r\n @Input() backdropClass = 'cdk-overlay-transparent-backdrop';\r\n @Input() hasBackdrop = true;\r\n @Input() closeOnBackdropClick = true;\r\n @Input() closeOnEscape = true;\r\n @Input() closeOnContentClick = false;\r\n @Input() offsetX = 0;\r\n @Input() offsetY = 4;\r\n @Input() push = false;\r\n @Input() flexibleDimensions = true;\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n @ViewChild('contentTemplate', { static: true }) contentTemplate?: TemplateRef<unknown>;\r\n @ContentChild(TemplateRef) projectedTemplate?: TemplateRef<unknown>;\r\n\r\n private overlayRef?: OverlayRef;\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private overlaySubscriptions: Subscription = new Subscription();\r\n private contentClickHandler?: (event: MouseEvent) => void;\r\n\r\n get isOpen(): boolean {\r\n return !!this.overlayRef;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyOverlay();\r\n }\r\n\r\n open(): void {\r\n if (this.disabled || this.overlayRef) {\r\n return;\r\n }\r\n\r\n if ( !this.contentTemplate) {\r\n console.warn('ui-dropdown-container: Falta definir contenido para el dropdown.');\r\n return;\r\n }\r\n\r\n const origin = this.host.nativeElement.querySelector('.triggerButton') as HTMLElement | null;\r\n if (!origin) {\r\n console.warn('ui-dropdown-container: No se encontró el trigger para posicionar el overlay.');\r\n return;\r\n }\r\n const positionStrategy = this.createPositionStrategy(origin);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n hasBackdrop: this.hasBackdrop,\r\n backdropClass: this.backdropClass,\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n width: this.resolveDimension(this.width, this.matchTriggerWidth ? origin.offsetWidth : undefined),\r\n minWidth: this.resolveDimension(this.minWidth),\r\n maxWidth: this.resolveDimension(this.maxWidth),\r\n });\r\n\r\n const portal = new TemplatePortal(this.contentTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.bindOverlayEvents(this.overlayRef);\r\n }\r\n\r\n close(): void {\r\n if (!this.overlayRef) return;\r\n this.destroyOverlay();\r\n this.closed.emit();\r\n }\r\n\r\n toggle(): void {\r\n if (this.overlayRef) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n onTriggerClick(event: Event): void {\r\n if (this.disabled && !this.isOpen) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.toggle();\r\n }\r\n\r\n private createPositionStrategy(origin: HTMLElement): FlexibleConnectedPositionStrategy {\r\n return this.overlay.position()\r\n .flexibleConnectedTo(origin)\r\n .withPositions(this.positions)\r\n .withPush(this.push)\r\n .withFlexibleDimensions(this.flexibleDimensions)\r\n .withDefaultOffsetX(this.offsetX)\r\n .withDefaultOffsetY(this.offsetY);\r\n }\r\n\r\n\r\n\r\n private destroyOverlay(): void {\r\n if (!this.overlayRef) return;\r\n\r\n this.overlaySubscriptions.unsubscribe();\r\n this.overlaySubscriptions = new Subscription();\r\n\r\n if (this.contentClickHandler) {\r\n this.overlayRef.overlayElement.removeEventListener('click', this.contentClickHandler);\r\n this.contentClickHandler = undefined;\r\n }\r\n\r\n this.overlayRef.dispose();\r\n this.overlayRef = undefined;\r\n }\r\n\r\n private resolveDimension(value?: number | string, fallback?: number): number | string | undefined {\r\n if (value === undefined || value === null) {\r\n return fallback;\r\n }\r\n return value;\r\n }\r\n\r\n private bindOverlayEvents(ref: OverlayRef): void {\r\n this.overlaySubscriptions.unsubscribe();\r\n this.overlaySubscriptions = new Subscription();\r\n\r\n if (this.hasBackdrop && this.closeOnBackdropClick) {\r\n this.overlaySubscriptions.add(\r\n ref.backdropClick().subscribe(() => this.close())\r\n );\r\n }\r\n\r\n if (this.closeOnEscape) {\r\n this.overlaySubscriptions.add(\r\n ref.keydownEvents().pipe(filter(event => event.key === 'Escape')).subscribe(() => this.close())\r\n );\r\n }\r\n\r\n if (this.closeOnContentClick) {\r\n this.contentClickHandler = () => this.close();\r\n ref.overlayElement.addEventListener('click', this.contentClickHandler);\r\n }\r\n }\r\n}\r\n","\n<div #triggerButton class=\"triggerButton\" (click)=\"onTriggerClick($event)\">\n <ng-content select=\"[button]\"></ng-content>\n</div>\n\n<ng-template #contentTemplate >\n <div class=\"ui-dropdown-panel\">\n <ng-content select=\"[content]\"></ng-content>\n </div>\n</ng-template>","import { Directive, HostListener, inject } from '@angular/core';\nimport { UicDropdownContainerComponent } from './dropdown-container.component';\n\n@Directive({\n selector: '[uiDropdownClose]',\n standalone: true,\n})\nexport class UiDropdownCloseDirective {\n private readonly dropdown = inject(UicDropdownContainerComponent);\n\n @HostListener('click')\n handleClick(): void {\n this.dropdown.close();\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UicToolTipDirective } from '../../../directives/tool-tip.directive';\r\nimport { UicInputComponent } from '../../inputs/input/input.component';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'uic-table-searcher',\r\n imports: [UicButtonComponent, FormsModule, UicToolTipDirective, UicInputComponent, UicTranslatePipe],\r\n templateUrl: './table-searcher.component.html',\r\n styleUrl: './table-searcher.component.scss'\r\n})\r\nexport class UicTableUicSearcherComponent {\r\n @Input() placeholder = 'table.search_placeholder';\r\n @Input() label = 'table.search_label';\r\n @Input() searchOnKeydown = false;\r\n @Input() showButtonText = false;\r\n @Input() showSearchButton = false;\r\n @Output() filter = new EventEmitter<string>();\r\n text = \"\";\r\n\r\n reset(){\r\n this.text = '';\r\n this.filter.emit(this.text);\r\n }\r\n\r\n updateText(){\r\n if ( this.searchOnKeydown ){\r\n this.filter.emit(this.text);\r\n }\r\n }\r\n}\r\n","\r\n<div class=\"ui-table-searcher\">\r\n <ui-input [internalIcon]=\"!showSearchButton?'ri-search-line':''\">\r\n <input [(ngModel)]=\"text\" type=\"text\" (ngModelChange)=\"updateText()\" (keydown.enter)=\"filter.emit(text)\" [placeholder]=\"placeholder | uicTranslate\">\r\n </ui-input>\r\n @if (showSearchButton) {\r\n <ui-button [iconOnly]=\"!showButtonText\" (click)=\"filter.emit(text)\" color=\"black\" type=\"bordered\" rightIcon=\"showSearchButton ri-search-2-line\" size=\"m\">{{showButtonText?('common.search' | uicTranslate):''}}</ui-button>\r\n }\r\n <ui-button [iconOnly]=\"!showButtonText\" (click)=\"reset()\" color=\"black\" type=\"bordered\" rightIcon=\"ri-eraser-line\" size=\"m\">{{showButtonText?('common.clear' | uicTranslate):''}}</ui-button>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'uic-table-pagination',\r\n imports: [CommonModule, UicButtonComponent, FormsModule, UicTranslatePipe],\r\n templateUrl: './table-pagination.component.html',\r\n styleUrl: './table-pagination.component.scss'\r\n})\r\nexport class UicTablePaginationComponent {\r\n @Input() buttonSize: 's'|'m'| 'l' = 'm';\r\n @Input() currentPage = 1;\r\n @Input() totalPages = 1;\r\n @Input() size = 25;\r\n @Input() loading = false;\r\n @Input() showText = true;\r\n @Input() nextButtonText = 'table.next_short';\r\n @Input() previousButtonText = 'table.previous_short';\r\n visiblePages = 3;\r\n pagesInView:number[] = [];\r\n\r\n @Output() pageChange = new EventEmitter<number>();\r\n @Output() sizeChange = new EventEmitter<number>();\r\n\r\n get pages(): (number | string)[] {\r\n const pages: (number | string)[] = [];\r\n const range = Math.floor(this.visiblePages / 2);\r\n let start = Math.max(1, this.currentPage - range);\r\n let end = Math.min(this.totalPages, this.currentPage + range);\r\n\r\n if (end === this.totalPages) {\r\n start = Math.max(1, this.totalPages - (this.visiblePages - 1));\r\n }\r\n if (start === 1) {\r\n end = Math.min(this.totalPages, this.visiblePages);\r\n }\r\n\r\n if (start > 1) {\r\n pages.push(1);\r\n if (start > 2) pages.push('...');\r\n }\r\n\r\n for (let i = start; i <= end; i++) {\r\n pages.push(i);\r\n }\r\n\r\n if (end < this.totalPages) {\r\n if (end < this.totalPages - 1) pages.push('...');\r\n pages.push(this.totalPages);\r\n }\r\n\r\n return pages;\r\n }\r\n\r\n changePage(newPage: number) {\r\n if (newPage >= 1 && newPage <= this.totalPages && newPage !== this.currentPage) {\r\n this.currentPage = newPage;\r\n this.pageChange.emit(this.currentPage);\r\n }\r\n }\r\n}\r\n","\r\n<div class=\"table-page\">\r\n <ui-button \r\n [disabled]=\"loading || currentPage == 1\" \r\n (click)=\"changePage(currentPage - 1)\" \r\n [size]=\"buttonSize\" \r\n color=\"black\" \r\n type=\"bordered\" \r\n [text]=\"showText?(previousButtonText | uicTranslate):''\"\r\n [iconOnly]=\"!showText\" \r\n icon=\"ri-arrow-left-line\" > \r\n </ui-button> \r\n <div class=\"table-numbers\">\r\n @for (p of pages; track $index) {\r\n @if ( p!= '...' ){\r\n <button [disabled]=\"loading\" (click)=\"changePage(+p)\" [ngClass]=\"{'selected':currentPage==p}\" class=\"number\">{{p}}</button>\r\n } @else {\r\n <div class=\"space\">...</div>\r\n }\r\n }\r\n </div>\r\n <div class=\"current-mobile\"> {{currentPage}} </div>\r\n <ui-button \r\n [disabled]=\"loading || currentPage == totalPages\" \r\n (click)=\"changePage(currentPage + 1)\" \r\n [size]=\"buttonSize\" \r\n color=\"black\" \r\n type=\"bordered\" \r\n [text]=\"showText?(nextButtonText | uicTranslate):''\"\r\n [iconOnly]=\"!showText\" \r\n rightIcon=\"ri-arrow-right-line\" > \r\n </ui-button>\r\n</div>\r\n","import { animate, keyframes, state, style, transition, trigger } from \"@angular/animations\";\r\n\r\nexport const highlightRow = trigger('highlightRow', [\r\n state('highlighted', style({ backgroundColor: '#efe1f5' })),\r\n transition('* => highlighted', [\r\n animate('1000ms ease-in', keyframes([\r\n style({ backgroundColor: '#ffffff', offset: 0 }),\r\n style({ backgroundColor: '#efe1f5', offset: 0.3 }),\r\n style({ backgroundColor: '#ffffff', offset: 1.0 }),\r\n ]))\r\n ])\r\n ]);","import { animate, style, transition, trigger } from \"@angular/animations\";\r\nexport const animatedRow = trigger('animatedRow', [\r\n transition(':enter', [\r\n style({ opacity: 0, transform: 'translateY(-15px)' }),\r\n animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\r\n ]),\r\n transition(':leave', [\r\n animate('300ms ease-in', style({ opacity: 0, height: 0, padding: 0, margin: 0 }))\r\n ]),\r\n ]);","import { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { Component, ElementRef, EventEmitter, inject, Input, Output, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { UicCheckboxComponent } from '../inputs/checkbox/checkbox.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonSize, UicButtonComponent } from '../button/button.component';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'ui-action-button',\r\n imports: [UicCheckboxComponent, UicButtonComponent, FormsModule, UicTranslatePipe],\r\n templateUrl: './uic-action-button.component.html',\r\n styleUrl: './uic-action-button.component.scss'\r\n})\r\nexport class UicActionButtonComponent {\r\n @Input() icon = 'ri-more-2-line';\r\n @Input() options: ActionMenuOption[] = [];\r\n @Input() multiselect = false;\r\n @Input() size:ButtonSize = 's';\r\n\r\n @Output() optionSelected = new EventEmitter<ActionMenuOption>();\r\n @Output() optionsApplied = new EventEmitter<ActionMenuOption[]>();\r\n\r\n @ViewChild('menuTemplate') menuTemplate!: TemplateRef<any>;\r\n private overlayRef!: OverlayRef;\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n selectedSet = new Set<string | number>();\r\n allSelected = false;\r\n\r\n overlayPositions: ConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' },\r\n ];\r\n\r\n openMenu() {\r\n if (this.overlayRef) {\r\n this.closeMenu();\r\n return;\r\n }\r\n\r\n const origin = this.host.nativeElement.querySelector('.action-btn');\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy =\r\n this.overlay.position()\r\n .flexibleConnectedTo(origin as HTMLElement)\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(false)\r\n .withPush(true);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n });\r\n\r\n const portal = new TemplatePortal(this.menuTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.closeMenu());\r\n }\r\n\r\n /** SINGLE SELECT MODE */\r\n selectOption(option: ActionMenuOption) {\r\n if (!this.multiselect) {\r\n this.optionSelected.emit(option);\r\n this.closeMenu();\r\n }\r\n }\r\n\r\n /** MULTISELECT MODE */\r\n toggleOption(opt: ActionMenuOption) {\r\n if (this.selectedSet.has(opt.id)) {\r\n this.selectedSet.delete(opt.id);\r\n } else {\r\n this.selectedSet.add(opt.id);\r\n }\r\n this.updateAllSelected();\r\n }\r\n\r\n toggleAll(checked: boolean) {\r\n this.allSelected = checked;\r\n this.selectedSet.clear();\r\n if (checked) {\r\n this.options.forEach(o => this.selectedSet.add(o.id));\r\n }\r\n }\r\n\r\n applySelection() {\r\n const selected = this.options.filter(o => this.selectedSet.has(o.id));\r\n this.optionsApplied.emit(selected);\r\n this.closeMenu();\r\n }\r\n\r\n updateAllSelected() {\r\n this.allSelected = this.options.length > 0 && this.selectedSet.size === this.options.length;\r\n }\r\n\r\n closeMenu() {\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n this.overlayRef = null!;\r\n }\r\n }\r\n}\r\n\r\nexport interface ActionMenuOption {\r\n id: string;\r\n label: string;\r\n icon?: string;\r\n}\r\n","<!-- Botón -->\r\n<ui-button class=\"action-btn\" [size]=\"size\" [icon]=\"icon\" color=\"black\" [iconOnly]=\"true\" type=\"ghost\" (click)=\"openMenu()\">\r\n</ui-button>\r\n\r\n<!-- Menú -->\r\n<ng-template #menuTemplate>\r\n <div class=\"action-menu\">\r\n @if (multiselect) {\r\n <div class=\"action-menu-header\">\r\n <ui-checkbox [noPadding]=\"true\" \r\n [ngModel]=\"allSelected\" \r\n (ngModelChange)=\"toggleAll($event)\" [placeholder]=\"'common.all' | uicTranslate\"></ui-checkbox>\r\n </div>\r\n }\r\n <div class=\"action-menu-body\">\r\n @for (opt of options; track $index) {\r\n <div class=\"action-menu-item\" (click)=\"multiselect ? toggleOption(opt) : selectOption(opt)\">\r\n @if (multiselect) {\r\n <div>\r\n <ui-checkbox [noPadding]=\"true\" [ngModel]=\"selectedSet.has(opt.id)\"></ui-checkbox>\r\n </div>\r\n }\r\n @if (icon) {\r\n <i [class]=\"opt.icon\"></i>\r\n }\r\n <span>{{ opt.label | uicTranslate }}</span>\n </div>\n }\n </div>\n\r\n <!-- Footer con botón aplicar -->\r\n @if (multiselect) {\r\n <div class=\"action-menu-footer\">\r\n <ui-button type=\"bordered\" color=\"black\" size=\"t\" (click)=\"closeMenu()\">{{'common.close' | uicTranslate}}</ui-button>\r\n <ui-button color=\"black\" size=\"t\" (click)=\"applySelection()\">{{'common.apply' | uicTranslate}}</ui-button>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { Component, Input } from '@angular/core';\r\nimport { TableList } from '../table.models';\r\n\r\n@Component({\r\n selector: 'uic-table-list',\r\n imports: [],\r\n templateUrl: './table-list.component.html',\r\n styleUrl: './table-list.component.scss'\r\n})\r\nexport class UicTableListComponent {\r\n @Input() list:TableList[]=[];\r\n}\r\n","@for (item of list; track $index) {\r\n <div class=\"list-item\">\r\n <i [class]=\"item.icon??'ri-capsule-fill'\"></i>\r\n <div class=\"list-item-data\">\r\n <div>{{item.text}}</div>\r\n <p>{{item.subtext}}</p>\r\n </div> \r\n </div>\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'nameInitials'\r\n})\r\nexport class UicNameInitsPipe implements PipeTransform {\r\n\r\n transform(value: string): string {\r\n if (!value){\r\n return \"\";\r\n }\r\n const names:string[] = value.split(\" \");\r\n if (names.length > 1){\r\n return names[0].charAt(0) + names[1].charAt(0).toUpperCase(); \r\n }else if ( names[0].length>=2){\r\n return names[0].substring(0,2).toUpperCase();\r\n }else{\r\n return '';\r\n }\r\n }\r\n\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { TableUser } from '../table.models';\r\nimport { UicNameInitsPipe } from '../../../pipes/name-inits.pipe';\r\n\r\n@Component({\r\n selector: 'uic-table-user',\r\n imports: [UicNameInitsPipe],\r\n templateUrl: './table-user.component.html',\r\n styleUrl: './table-user.component.scss'\r\n})\r\nexport class UicTableUserComponent {\r\n @Input() user:TableUser | undefined;\r\n\r\n}\r\n","@if (user) {\r\n <div class=\"user-row\">\r\n @if (!user.hideAvatar) {\r\n <div class=\"user-inits\" [style]=\"user.photo? 'background-image: url('+ user.photo +')' :'' \">\r\n {{ !user.photo? (user.name | nameInitials) :''}}\r\n </div>\r\n }\r\n <div class=\"user-row-data\">\r\n <div>{{user.name}}</div>\r\n <p>{{user.id}}</p>\r\n </div>\r\n </div>\r\n}@else{\r\n -\r\n}","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ui-status-label',\r\n imports: [],\r\n templateUrl: './status-label.component.html',\r\n styleUrl: './status-label.component.scss'\r\n})\r\nexport class UicStatusLabelComponent {\r\n @Input() color = 'grey';\r\n @Input() type: 'status'|'tag' = 'status';\r\n @Input() icon = 'ri-circle-fill';\r\n}\r\n","<div [class]=\"'status-label sl-' + type + ' ' + (type == 'status' ? 'slc-' : 'slt-') + color\" >\r\n @if (icon!='' && type == 'status') {\r\n <i [class]=\"icon\"></i>\r\n }\r\n <div class=\"sl-text\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>","export const MODAL_DATA = 'MODAL_DATA';\r\nexport const MODAL_COMPONENT = 'MODAL_COMPONENT';\r\nexport const MODAL_CONFIG = 'MODAL_CONFIG';\r\nexport const MODAL_CLOSE_EVENT = 'modalClosed'; \r\nexport const MODAL_CLOSE_REQUEST = 'modalCloserRequested'; ","import { OverlayRef } from \"@angular/cdk/overlay\";\r\nimport { Observable, Subject } from \"rxjs\";\r\nimport { UicModalService } from \"./modal.service\";\r\n\r\nexport class UiModalRef<T = any> {\r\n private readonly _afterClosed = new Subject<{status:boolean, data: T | null}>();\r\n\r\n constructor(\r\n private readonly overlayRef: OverlayRef,\r\n private readonly modalService: UicModalService\r\n ) {}\r\n\r\n close(result: T | null = null): void {\r\n this.modalService.close(this.overlayRef, result);\r\n this._afterClosed.next({status: result!=null, data:result });\r\n this._afterClosed.complete();\r\n }\r\n\r\n closeFloating(result: T | null = null): void {\r\n this.modalService.closeFloating(this.overlayRef, result);\r\n this._afterClosed.next({status: result!=null, data:result });\r\n this._afterClosed.complete();\r\n }\r\n\r\n afterClosed(): Observable<{status:boolean, data: T | null}> {\r\n return this._afterClosed.asObservable();\r\n }\r\n\r\n}","import { Component, Inject } from '@angular/core';\r\nimport { AlertData, AlertResponseData } from './tiny-alert.model';\r\nimport { MODAL_DATA } from '../../services/modal.constant';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { UiModalRef } from '../../services/modaRef';\r\nimport { UicInputComponent } from '../inputs/input/input.component';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'ui-tiny-alert',\r\n imports: [\r\n UicButtonComponent,\r\n UicInputComponent,\r\n UicTranslatePipe\r\n ],\r\n templateUrl: './tiny-alert.component.html',\r\n styleUrl: './tiny-alert.component.scss'\r\n})\r\nexport class TinyAlertComponent {\r\n data:AlertData;\r\n constructor(\r\n @Inject(MODAL_DATA) inData:{alert:AlertData,editing:boolean},\r\n @Inject(UiModalRef) private readonly modalRef: UiModalRef )\r\n {\r\n this.data = inData.alert;\r\n }\r\n response:AlertResponseData = {};\r\n\r\n\r\n close(value:boolean){\r\n this.modalRef.closeFloating(value?this.response:null);\r\n }\r\n}\r\n","<div class=\"alert-wrapper\">\r\n @if (data.iconPath) {\r\n <img [src]=\"data.iconPath\" alt=\"\"> \r\n }@else{\r\n <i [class]=\"'alert-main-icon icon-'+data.type + ' ' + data.iconChar\" ></i>\r\n }\r\n <div class=\"h3-alert\" [class]=\"'icon-'+data.type\"> {{data.title | uicTranslate}} </div>\r\n \r\n <div class=\"alert-body\" [innerHTML]=\"data.body | uicTranslate\"> </div>\n \r\n @if ( data.showInput ){\r\n <ui-input>\r\n <input type=\"text\">\r\n </ui-input>\r\n }\r\n\r\n <div class=\"tinyalert-buttons\">\r\n @if (data.showCancelButton) {\r\n <ui-button (click)=\"close(false)\" type=\"bordered\" [color]=\"data.cancelButtonColor??'black'\" size=\"l\"> {{(data.cancelButtonText??'common.cancel') | uicTranslate}} </ui-button>\r\n }\r\n <ui-button (click)=\"close(true)\" [color]=\"data.okButtonColor??'primary'\" size=\"l\"> {{(data.okButtonText??'common.continue') | uicTranslate}} </ui-button>\r\n </div>\r\n \r\n <button class=\"floating-close\" (click)=\"close(false)\" >\r\n <i class=\"ri-close-line\"></i>\r\n </button>\r\n</div>\r\n","import { animate, style, transition, trigger } from \"@angular/animations\";\r\nexport const pushTop = trigger('pushTop', [\r\n transition(':enter',[style({opacity:0, transform: 'translateY(20px)'}), animate('.3s ease', style({opacity:1, transform: 'translateY(0)'}))]),\r\n transition(':leave', [animate('.3s ease', style({opacity:0, transform: 'translateY(-20px)'}))])\r\n ]);","import { CommonModule } from '@angular/common';\r\nimport { Component, Inject, Injector, Type, ViewChild } from '@angular/core';\r\nimport { CdkPortalOutlet, ComponentPortal, PortalModule } from '@angular/cdk/portal';\r\nimport { MODAL_COMPONENT, MODAL_CONFIG, MODAL_DATA } from '../../../services/modal.constant';\r\nimport { ModalConfig } from './modalconfig.model';\r\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { pushTop } from '../../../animations/pushTop.animation';\r\nimport { UiModalRef } from '../../../services/modaRef';\r\n\r\n\r\n@Component({\r\n selector: 'ui-modal',\r\n imports: [CommonModule,PortalModule,UicButtonComponent],\r\n templateUrl: './modal.component.html',\r\n styleUrl: './modal.component.scss',\r\n animations:[pushTop]\r\n})\r\nexport class UicModalComponent {\r\n myConfig:ModalConfig = {};\r\n ready = false;\r\n title='';\r\n @ViewChild(CdkPortalOutlet, { static: true }) portalOutlet!: CdkPortalOutlet;\r\n\r\n constructor(\r\n @Inject(UiModalRef) private readonly modalRef: UiModalRef,\r\n @Inject(MODAL_COMPONENT) private readonly component: Type<any>,\r\n @Inject(MODAL_CONFIG) private readonly congif: ModalConfig,\r\n private readonly injector: Injector\r\n ) {\r\n this.myConfig = congif;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const childInjector = Injector.create({\r\n providers: [\r\n { provide: UiModalRef, useValue: this.modalRef },\r\n { provide: MODAL_DATA, useValue: this.congif.data }\r\n ],\r\n parent: this.injector\r\n });\r\n const portal = new ComponentPortal(this.component, null, childInjector);\r\n this.portalOutlet.attachComponentPortal(portal);\r\n }\r\n\r\n\r\n closeOuside(){\r\n if ( this.congif.preventCloseingOutside === true ) return;\r\n this.modalRef.closeFloating(null);\r\n }\r\n\r\n close() {\r\n this.modalRef.closeFloating(null);\r\n }\r\n}\r\n","<div class=\"uic_backdrop\" (click)=\"closeOuside()\"> \n <div @pushTop class=\"uic_modal\" \n [class]=\"myConfig.size ? 'uic_' + myConfig.size : ''\"\n (click)=\"$event.stopPropagation()\">\n \n @if ( myConfig.title) {\n <div class=\"uic_modal-header\">\n {{myConfig.title}}\n <ui-button color=\"red\" type=\"ghost\" icon=\"ri-close-large-line\" (click)=\"close()\" [iconOnly]=\"true\"></ui-button>\n </div>\n }\n <div class=\"uic_modal-body\" [class.uic_body-padding]=\"myConfig.title!='' && !myConfig.noPadding\">\n <ng-template cdkPortalOutlet></ng-template>\n </div>\n\n </div>\n</div>\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\r\nexport const sideModal = trigger('sideModal', [\r\n state('visible', style({ transform: 'translateX(0)' })),\r\n state('hidden', style({ transform: 'translateX(100%)' })),\r\n\r\n // animación al CREARSE\r\n transition('void => visible', [\r\n style({ opacity: .8, transform: 'translateX(100%)' }),\r\n animate('.5s ease')\r\n ]),\r\n\r\n // animación al CERRAR\r\n transition('visible => hidden', [\r\n animate('.5s ease')\r\n ])\r\n])\r\n\r\nexport const fadeBackdrop =trigger('fadeBackdrop', [\r\n state('visible', style({ opacity: 1 })),\r\n state('hidden', style({ opacity: 0 })),\r\n transition('void => visible', [\r\n style({ opacity: 0 }),\r\n animate('300ms ease-out')\r\n ]),\r\n transition('visible => hidden', [\r\n animate('300ms ease-in')\r\n ])\r\n ])","import { CdkPortalOutlet, ComponentPortal, PortalModule } from '@angular/cdk/portal';\r\nimport { Component, Inject, Injector, Type, ViewChild } from '@angular/core';\r\nimport { MODAL_CLOSE_REQUEST, MODAL_COMPONENT, MODAL_CONFIG, MODAL_DATA } from '../../../services/modal.constant';\r\nimport { OverlayRef } from '@angular/cdk/overlay';\r\nimport { SideModalConfig } from './sideModalConfig.model';\r\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { fadeBackdrop, sideModal } from '../../../animations/sideModal.animation';\r\nimport { UiModalRef } from '../../../services/modaRef';\r\nimport { UicModalService } from '../../../services/modal.service';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\n\r\n\r\n@Component({\r\n selector: 'ui-side-modal',\r\n imports: [PortalModule,UicButtonComponent, UicTranslatePipe],\r\n templateUrl: './side-modal.component.html',\r\n styleUrl: './side-modal.component.scss',\r\n animations: [ sideModal, fadeBackdrop ]\r\n})\r\nexport class UicSideModalComponent {\r\n overlayRef!: OverlayRef; // lo setea el servicio\r\n state: 'visible' | 'hidden' = 'visible';\r\n show = true;\r\n myConfig:SideModalConfig = {};\r\n ready = false;\r\n @ViewChild(CdkPortalOutlet, { static: true }) portalOutlet!: CdkPortalOutlet;\r\n\r\n constructor(\r\n @Inject(UiModalRef) private readonly modalRef: UiModalRef,\r\n @Inject(MODAL_COMPONENT) private readonly component: Type<any>,\r\n @Inject(MODAL_CONFIG) private readonly congif: SideModalConfig,\r\n private readonly injector: Injector,\r\n private readonly modal:UicModalService\r\n ) {\r\n this.myConfig = congif;\r\n }\r\n\r\n ngOnInit() {\r\n if (this.overlayRef){\r\n this.overlayRef.hostElement.addEventListener(MODAL_CLOSE_REQUEST, () => {\r\n this.close();\r\n });\r\n }\r\n}\r\n\r\n ngAfterViewInit(): void {\r\n const childInjector = Injector.create({\r\n providers: [\r\n { provide: UiModalRef, useValue: this.modalRef },\r\n { provide: MODAL_DATA, useValue: this.congif.data }\r\n ],\r\n parent: this.injector\r\n });\r\n const portal = new ComponentPortal(this.component, null, childInjector);\r\n this.portalOutlet.attachComponentPortal(portal);\r\n }\r\n\r\n\r\n closeOuside(){\r\n if ( this.congif.preventCloseingOutside === true ) return;\r\n this.close();\r\n }\r\n\r\n close() {\r\n this.state = 'hidden';\r\n }\r\n\r\n cancel(){\r\n if ( this.myConfig.preventCloseOnCancel ){\r\n this.modal.triggerSave(false);\r\n }else{\r\n this.close();\r\n }\r\n }\r\n\r\n onAnimationDone(event: any) {\r\n if (event.toState === 'hidden' && event.triggerName === 'sideModal') {\r\n this.overlayRef.dispose();\r\n }\r\n }\r\n\r\n save(){\r\n this.modal.triggerSave();\r\n }\r\n}\r\n","<div [@fadeBackdrop]=\"state\" class=\"backdrop\" (click)=\"closeOuside()\"> \r\n</div>\r\n<div [@sideModal]=\"state\" \r\n (@sideModal.done)=\"onAnimationDone($event)\" \r\n class=\"sidemodal\" \r\n [style.width]=\"myConfig.width??'60%'\" \r\n (click)=\"$event.stopPropagation()\">\r\n @if (myConfig.headerEnabled) {\r\n <div class=\"modal-header\">\r\n <div class=\"modal-header-title\">\r\n <div class=\"f-title\">{{myConfig.title}}</div>\r\n <div class=\"f-subtitle\">{{myConfig.subtitle}}</div>\r\n </div>\r\n <ui-button class=\"close-icon\" (click)=\"close()\" icon=\"ri-close-large-line\" type=\"ghost\" color=\"black\" [iconOnly]=\"true\" size=\"m\"></ui-button>\r\n </div>\r\n }\r\n <div class=\"sidemodal-body\" [class.nopadding]=\"myConfig.noPadding\" >\r\n <ng-template cdkPortalOutlet></ng-template>\r\n </div>\r\n @if (myConfig.footerEnabled) {\r\n <div class=\"sidemodal-footer\">\r\n @if (myConfig.showCancelButton) {\r\n <ui-button (click)=\"cancel()\" color=\"black\" size=\"l\" type=\"bordered\" [icon]=\"myConfig.footerCancelIcon??'ri-close-line'\">{{(myConfig.footerCancelButtonText??'modal.cancel') | uicTranslate}}</ui-button>\r\n }\r\n <ui-button (click)=\"save()\" color=\"black\" size=\"l\" [rightIcon]=\"myConfig.footerOkIcon??'ri-check-line'\">{{(myConfig.footerOkButtonText??'modal.next') | uicTranslate}}</ui-button>\r\n </div>\r\n }\r\n</div>\r\n","import { EnvironmentInjector, inject, Injectable, Injector, Type } from '@angular/core';\r\nimport { MODAL_CLOSE_EVENT, MODAL_CLOSE_REQUEST, MODAL_COMPONENT, MODAL_CONFIG } from './modal.constant';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { UiModalRef } from './modaRef';\r\nimport { ModalConfig } from '../components/modal/floating-modal/modalconfig.model';\r\nimport { SideModalConfig } from '../components/modal/side-modal/sideModalConfig.model';\r\nimport { UicModalComponent } from '../components/modal/floating-modal/modal.component';\r\nimport { UicSideModalComponent } from '../components/modal/side-modal/side-modal.component';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UicModalService {\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly envInjector = inject(EnvironmentInjector);\r\n\r\n openFloatingModal<TComponent>(\r\n component: Type<TComponent>,\r\n config: ModalConfig = {}\r\n ): UiModalRef {\r\n return this.openModal(component,config,true);\r\n }\r\n\r\n openSideModal<TComponent>(\r\n component: Type<TComponent>,\r\n config: SideModalConfig = {}\r\n ): UiModalRef {\r\n return this.openModal(component,config,false);\r\n }\r\n\r\n private openModal<TComponent>(\r\n component: Type<TComponent>,\r\n config: ModalConfig|SideModalConfig = {},\r\n isFloating = false\r\n ){\r\n const overlayConfig = this.createOverlayConfig(isFloating);\r\n const overlayRef = this.overlay.create(overlayConfig);\r\n const modalRef = new UiModalRef(overlayRef, this);\r\n const injector = this.createModalInjector(overlayRef,modalRef,component,config); \r\n if ( isFloating){\r\n const modalPortal = new ComponentPortal(UicModalComponent, null, injector);\r\n overlayRef.attach(modalPortal);\r\n }else{\r\n const modalPortal = new ComponentPortal( UicSideModalComponent, null, injector);\r\n const componentRef = overlayRef.attach(modalPortal);\r\n componentRef.instance.overlayRef = overlayRef;\r\n }\r\n return modalRef; \r\n }\r\n\r\n close(overlayRef: OverlayRef, result: any = null): void { \r\n overlayRef.hostElement.dispatchEvent(\r\n new CustomEvent(MODAL_CLOSE_REQUEST, { detail: result })\r\n );\r\n } \r\n\r\n closeFloating(overlayRef: OverlayRef, result: any = null){\r\n overlayRef.backdropElement?.dispatchEvent(\r\n new CustomEvent(MODAL_CLOSE_EVENT, { detail: result })\r\n );\r\n overlayRef.dispose();\r\n }\r\n\r\n private readonly _save$ = new Subject<boolean>();\r\n save$ = this._save$.asObservable();\r\n\r\n triggerSave(result=true): void {\r\n this._save$.next(result);\r\n }\r\n\r\n private createOverlayConfig(isFloating: boolean): OverlayConfig {\r\n const positionStrategy = isFloating \r\n ? this.overlay.position().global().left()\r\n : this.overlay.position().global().right();\r\n\r\n return {\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-dark-backdrop',\r\n positionStrategy,\r\n scrollStrategy: this.overlay.scrollStrategies.block(),\r\n disposeOnNavigation: true, \r\n };\r\n }\r\n\r\n private createModalInjector<TComponent>(\r\n overlayRef: OverlayRef,\r\n modalRef: UiModalRef,\r\n component: Type<TComponent>,\r\n config: ModalConfig | SideModalConfig\r\n ): Injector {\r\n return Injector.create({\r\n providers: [\r\n { provide: OverlayRef, useValue: overlayRef },\r\n { provide: UiModalRef, useValue: modalRef },\r\n { provide: MODAL_COMPONENT, useValue: component },\r\n { provide: MODAL_CONFIG, useValue: config }\r\n ],\r\n parent: this.envInjector,\r\n });\r\n }\r\n}\r\n\r\n","import { AlertData } from '../tiny-alert/tiny-alert.model';\r\n\r\nlet nextId = 1;\r\n\r\nexport function createTinySuccess(\r\n body: string,\r\n options?: Partial<AlertData>\r\n): AlertData {\r\n return {\r\n body,\r\n title: 'alerts.success_title',\r\n type: 'success',\r\n iconChar: 'ri-emotion-laugh-line',\r\n okButtonColor: 'green',\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createTinyError(\r\n body: string,\r\n options?: Partial<AlertData>\r\n): AlertData {\r\n return {\r\n body,\r\n title: 'alerts.error_title',\r\n iconChar: 'ri-emotion-unhappy-line',\r\n okButtonColor: 'red',\r\n okButtonText: 'common.close',\r\n type: 'error',\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createTinyDelete(\r\n body: string,\r\n options?: Partial<AlertData>\r\n): AlertData {\r\n return {\r\n body,\r\n title: 'alerts.delete_title',\r\n iconChar: 'ri-delete-bin-line',\r\n okButtonColor: 'red',\r\n okButtonText: 'alerts.delete_confirm',\r\n showCancelButton: true,\r\n cancelButtonText: 'common.cancel',\r\n type: 'delete',\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createTinyWarning(\r\n body: string,\r\n options?: Partial<AlertData>\r\n): AlertData {\r\n return {\r\n body,\r\n title: 'alerts.warning_title',\r\n iconChar: 'ri-alarm-warning-line',\r\n okButtonColor: 'yellow',\r\n type: 'warning',\r\n ...options,\r\n };\r\n}\r\n\r\nexport function createTinyInfo(\r\n body: string,\r\n options?: Partial<AlertData>\r\n): AlertData {\r\n return {\r\n body,\r\n iconChar: 'ri-information-line',\r\n okButtonColor: 'black',\r\n type: 'info',\r\n ...options,\r\n };\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { AlertData, AlertResponse } from '../components/tiny-alert/tiny-alert.model';\r\nimport { TinyAlertComponent } from '../components/tiny-alert/tiny-alert.component';\r\nimport { UicModalService } from './modal.service';\r\nimport { createTinyDelete, createTinyError, createTinyInfo, createTinySuccess, createTinyWarning } from '../components/push-alerts/tynyalert.helpers';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UicTinyAlertService {\r\n\r\n private readonly modal = inject(UicModalService);\r\n\r\n showAlert(data: AlertData): Promise<AlertResponse> {\r\n return new Promise<AlertResponse>((resolve) => {\r\n this.modal.openFloatingModal(TinyAlertComponent, {\r\n data: { alert: data }\r\n }).afterClosed().subscribe(result => {\r\n resolve({\r\n value: result?.status,\r\n data: result?.data\r\n });\r\n });\r\n });\r\n }\r\n\r\n success(message:string,options?: Partial<AlertData>){\r\n return this.showAlert( createTinySuccess(message,options) )\r\n }\r\n\r\n error(message:string,options?: Partial<AlertData>){\r\n return this.showAlert( createTinyError(message,options) )\r\n }\r\n\r\n warning(message:string,options?: Partial<AlertData>){\r\n return this.showAlert( createTinyWarning(message,options) )\r\n }\r\n info(message:string,options?: Partial<AlertData>){\r\n return this.showAlert( createTinyInfo(message,options) )\r\n }\r\n\r\n deleteConfirmation(message:string,options?: Partial<AlertData>){\r\n return this.showAlert( createTinyDelete(message,options) )\r\n }\r\n \r\n}\r\n","import { Component, DoCheck, EventEmitter, inject, Input, Output } from '@angular/core';\r\nimport { ColumnTypes, TableRow, TableRowData } from '../table/table.models';\r\nimport { UicToolTipDirective } from '../../directives/tool-tip.directive';\r\nimport { UicTableListComponent } from '../table/table-list/table-list.component';\r\nimport { UicTableUserComponent } from '../table/table-user/table-user.component';\r\nimport { UicCheckboxComponent } from '../inputs/checkbox/checkbox.component';\r\nimport { UicStatusLabelComponent } from '../status-label/status-label.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UicSwichComponent } from '../inputs/toggle-button/toggle-button.component';\r\nimport { CurrencyPipe, DatePipe } from '@angular/common';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { UicTinyAlertService } from '../../services/tiny-alert.service';\r\nimport { AlertData } from '../tiny-alert/tiny-alert.model';\r\n\r\n@Component({\r\n selector: 'ui-item-value',\r\n imports: [\r\n UicToolTipDirective,\r\n UicTableUserComponent,\r\n UicSwichComponent,\r\n UicStatusLabelComponent,\r\n UicTableListComponent,\r\n FormsModule,\r\n UicButtonComponent,\r\n CurrencyPipe,\r\n DatePipe\r\n ],\r\n templateUrl: './item-value.component.html',\r\n styleUrl: './item-value.component.scss'\r\n})\r\nexport class ItemValueComponent implements DoCheck {\r\n\r\n private readonly alers = inject(UicTinyAlertService);\r\n\r\n @Input() key:string|number = '';\r\n @Input() type:ColumnTypes = 'text';\r\n @Input() alignment = '';\r\n @Input() row!:TableRow;\r\n @Input() disabled = false;\r\n\r\n @Input() data:TableRowData|null = null;\r\n\r\n @Input() switchValidation:AlertData[] = [];\r\n @Output() switchConfirmed = new EventEmitter<boolean>();\r\n \r\n expanded = false;\r\n checked = false;\r\n currentData:TableRowData|null = null;\r\n\r\n private previousRow?: TableRow;\r\n private previousRowData?: TableRowData[];\r\n private previousKey: string|number = '';\r\n private previousInputData: TableRowData|null = null;\r\n\r\n ngDoCheck(){\r\n this.syncCurrentData();\r\n }\r\n\r\n private syncCurrentData(): void {\r\n const nextData = this.resolveCurrentData();\r\n\r\n if (\r\n this.previousRow !== this.row ||\r\n this.previousRowData !== this.row?.data ||\r\n this.previousKey !== this.key ||\r\n this.previousInputData !== this.data ||\r\n this.currentData !== nextData\r\n ) {\r\n this.currentData = nextData;\r\n this.checked = nextData?.checked ?? false;\r\n this.previousRow = this.row;\r\n this.previousRowData = this.row?.data;\r\n this.previousKey = this.key;\r\n this.previousInputData = this.data;\r\n }\r\n }\r\n\r\n private resolveCurrentData(): TableRowData|null {\r\n if (this.data) {\r\n return this.data;\r\n }\r\n\r\n if (!this.row) {\r\n return null;\r\n }\r\n\r\n return this.row.data.find(f => f.key == this.key) ?? null;\r\n }\r\n\r\n switchHandler(rowId:string|number, value:boolean){\r\n if ( this.currentData && this.switchValidation.length >0 ){\r\n const OK = this.switchValidation[0];\r\n const CANCEL = this.switchValidation[1]??this.switchValidation[0];\r\n\r\n this.alers.showAlert( value? OK : CANCEL ).then(r=>{\r\n if ( r.value ){\r\n this.switchConfirmed.emit(value);\r\n }else{\r\n if ( this.currentData){\r\n this.currentData.checked = !value\r\n this.checked = this.currentData.checked;\r\n }\r\n setTimeout(() => {\r\n }, 100);\r\n }\r\n \r\n });\r\n }else{\r\n this.switchConfirmed.emit(value);\r\n }\r\n }\r\n\r\n expand (click:MouseEvent){\r\n click.stopPropagation();\r\n this.expanded = !this.expanded;\r\n }\r\n copyText(text:string,click:MouseEvent){\r\n click.stopPropagation();\r\n navigator.clipboard.writeText(text)\r\n .then(() => {\r\n })\r\n .catch(err => {\r\n console.error('No se pudo copiar: ', err);\r\n }); \r\n }\r\n}\r\n","@if (currentData) {\r\n @if (type == 'text' || !type) {\r\n <div [class]=\"'ui-trc-' + currentData.textColor \">\r\n @if( currentData.icon ){ <i [class]=\"currentData.icon + ' ui-trc-' + currentData.iconColor\"></i>}\r\n {{ currentData.value }} \r\n @if( currentData.rightIcon ){ <i [class]=\"currentData.rightIcon + ' ui-trc-' + currentData.iconColor\"></i>}\r\n </div>\r\n }\r\n @if (type == 'copy') {\r\n <div class=\"copy-div\">\r\n {{ currentData.value }} \r\n <ui-button (click)=\"copyText((currentData.value??'').toString(),$event)\" type=\"ghost\" size=\"s\" [iconOnly]=\"true\" icon=\"ri-file-copy-line\"></ui-button>\r\n </div>\r\n }\r\n @if (type == 'money'){\r\n {{ (currentData.value??0) | currency: currentData.currencyCode||''}} \r\n }\r\n @if (type == 'bold'){\r\n <b>{{ currentData.value}}</b>\r\n }\r\n @if (type == 'date'){\r\n {{ (currentData.value??'').toString() | date: 'dd/MM/yyyy'}} \r\n }\r\n @if (type == 'bigtext') {\r\n <div (click)=\"expand($event)\" class=\"expandible-row\" [class.expandedrow]=\"expanded\">\r\n {{ currentData.value }} \r\n @if( currentData.value && currentData.value.toString().length > 0){\r\n <i [class]=\"expanded?'ri-arrow-up-s-line':'ri-arrow-down-s-line'\"></i>\r\n }\r\n @if (!expanded && currentData.value && currentData.value.toString().length > 0) {\r\n <div class=\"fade-overlay\"></div>\r\n }\r\n </div>\r\n }\r\n @if (type == 'icon-list') {\r\n @for (alert of currentData.list; track $index) {\r\n <i [uiTooltip]=\"alert.text\" [class]=\"alert.icon + ' ui-alert'\" ></i>\n }\r\n }\r\n @else if (type == 'list'){\r\n <uic-table-list [list]=\"currentData.list??[]\"></uic-table-list> \r\n }\r\n @else if (type == 'user'){\r\n <uic-table-user [user]=\"currentData.user\"></uic-table-user> \r\n }\r\n @else if (type == 'status'){\r\n @if (currentData.value) {\r\n <ui-status-label [icon]=\"currentData.icon??'ri-circle-fill'\" [color]=\"currentData.color??''\"> {{currentData.value}} </ui-status-label> \r\n }@else {\r\n -\r\n }\r\n }\r\n @else if (type == 'tag'){\r\n <ui-status-label type=\"tag\" [icon]=\"currentData.icon??'ri-circle-fill'\" [color]=\"currentData.color??''\"> {{currentData.value}} </ui-status-label> \r\n }\r\n @else if (type == 'switch'){\r\n <div (click)=\"$event.stopPropagation()\">\r\n <ui-switch [disabled]=\"disabled\" [(checked)]=\"checked\" (checkedChange)=\"switchHandler(row.id,$event)\"></ui-switch> \r\n </div>\r\n }\r\n\r\n @if( currentData.subtext ){\r\n <div [class]=\"'subtext ui-alignment-'+alignment\">{{ currentData.subtext }}</div>\r\n }\r\n}\r\n\r\n","import { Component, Input } from '@angular/core';\r\nimport { UicStatusLabelComponent } from '../status-label/status-label.component';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { CurrencyPipe, DatePipe } from '@angular/common';\r\nimport { BackgroundColors, ColumnTypes, TableList, TableRowData, TableTextColors, TableUser } from '../table/table.models';\r\nimport { ItemValueComponent } from '../item-value/item-value.component';\r\nimport { AlertData } from '../tiny-alert/tiny-alert.model';\r\n\r\n\r\n@Component({\r\n selector: 'ui-portlet-card',\r\n imports: [\r\n ItemValueComponent\r\n],\r\n templateUrl: './uic-portlet-card.component.html',\r\n styleUrl: './uic-portlet-card.component.scss'\r\n})\r\nexport class UicPortletCardComponent {\r\n\r\n @Input() title = '';\r\n @Input() data: UicPortletData[] = [];\r\n @Input() layout: 'horizontal' | 'vertical' = 'horizontal';\r\n @Input() cols = 1;\r\n @Input() gap = 20;\r\n @Input() labelWeight= 400;\r\n @Input() valueWeight= 500;\r\n @Input() valueSize= 14;\r\n @Input() switchValidation:AlertData[] = [];\r\n finalData:TableRowData[]=[];\r\n\r\n ngOnInit(){\r\n this.finalData = this.data.map(p=>({...p,key:p.label??'-'}));\r\n }\r\n\r\n get gridTemplateColumns(): string | null {\r\n if (this.layout !== 'vertical') {\r\n return null;\r\n }\r\n const columns = Math.max(1, Math.floor(this.cols || 1));\r\n return `repeat(${columns}, minmax(0, 1fr))`;\r\n }\r\n\r\n copyText(text:string){\r\n navigator.clipboard.writeText(text)\r\n .then(() => {\r\n })\r\n .catch(err => {\r\n console.error('No se pudo copiar: ', err);\r\n }); \r\n }\r\n\r\n switchHandler(key:string,value:boolean){\r\n \r\n }\r\n\r\n}\r\n\r\nexport interface UicPortletData{\r\n value?: string|number;\r\n label?:string;\r\n type?:ColumnTypes;\r\n subtext?: string|number;\r\n checked?:boolean;\r\n list?:TableList[];\r\n user?:TableUser;\r\n icon?: string;\r\n rightIcon?:string;\r\n iconColor?:string;\r\n textColor?: TableTextColors;\r\n color?: BackgroundColors;\r\n expanded?:boolean;\r\n currencyCode?:string;\r\n}\r\n","@if ( title) {\r\n <h2>{{title}}</h2>\r\n}\r\n<div class=\"portlet\" \r\n [class.portlet-vertical]=\"layout === 'vertical'\" \r\n [style.gridTemplateColumns]=\"gridTemplateColumns\"\r\n [style]=\"'gap: ' + gap + 'px;'\" >\r\n @for (item of finalData; track $index) {\r\n <div class=\"portlet-row\" [class.portlet-row-vertical]=\"layout === 'vertical'\">\r\n <div class=\"portlet-row-label\" [style.fontWeight]=\"labelWeight\">{{item.label}}:</div>\r\n <div class=\"portlet-row-value\" [style.fontWeight]=\"valueWeight\" [style.fontSize.px]=\"valueSize\">\r\n <ui-item-value\r\n [type]=\"item.type??'text'\"\r\n [data]=\"item\"\r\n [alignment]=\" layout === 'horizontal' ? 'right' : 'left'\"\r\n [switchValidation]=\"switchValidation\"\r\n (switchConfirmed)=\"switchHandler('xx', $event)\"\r\n ></ui-item-value>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { TableColums, TableRow, TableRowData } from '../table/table.models';\r\nimport { UicPortletCardComponent, UicPortletData } from '../uic-portlet-card/uic-portlet-card.component';\r\n\r\n@Component({\r\n selector: 'ui-short-table',\r\n imports: [UicPortletCardComponent],\r\n templateUrl: './short-table.component.html',\r\n styleUrl: './short-table.component.scss'\r\n})\r\nexport class UicShortTableComponent {\r\n \r\n @Input() columns:TableColums[] = [];\r\n @Input() data!:TableRow;\r\n @Input() loading = false;\r\n @Input() disabled = false;\r\n @Input() cols = 2;\r\n\r\n portlet:UicPortletData[] =[];\r\n\r\n ngOnInit(){\r\n this.portlet = this.apTableToPortlets(this.columns,this.data);\r\n }\r\n\r\n apTableToPortlets(\r\n columns: TableColums[],\r\n row: TableRow\r\n ): UicPortletData[] {\r\n return columns.filter(f=> !!f.hideOn )\r\n .map(col => {\r\n const cell = row.data.find(d => d.key === col.key);\r\n if (!cell) return null;\r\n\r\n return {\r\n type: col.type == 'bigtext' ? 'text' : col.type,\r\n label: col.label, \r\n ...cell\r\n } as UicPortletData;\r\n\r\n })\r\n .filter((p): p is UicPortletData => p !== null);\r\n\r\n }\r\n}\r\n","<ui-portlet-card \r\n [gap]=\"20\" \r\n layout=\"vertical\" \r\n [cols]=\"cols\" \r\n [data]=\"portlet\">\r\n</ui-portlet-card>","import { EditableBlock, FormBlock, TableColums, TableRowData } from \"../public-api\";\r\n\r\n\r\n// Mapea datos a tablas (deben tener el mismo nombre)\r\nexport function helperTableMapDatoToColums(data:Record<string,any>,headers:TableColums[]){\r\n const row:TableRowData[] = [];\r\n headers.forEach( head =>{\r\n if ( head.key in data && (head.type=='text' || !head.type)){\r\n row.push({\r\n key: head.key,\r\n value: data[head.key]\r\n });\r\n }\r\n });\r\n return row;\r\n }\r\n\r\n// MAPEA EL RESULTADO DE UN FORMULARIO AL DTO\r\nexport function helperFormMapFormdataToObject<T extends object>(formData: Record<string, any>, defaults: T): T {\r\n return {\r\n ...defaults,\r\n ...Object.fromEntries(\r\n Object.keys(defaults) \r\n .filter(key => key in formData)\r\n .map(key => [key, formData[key]])\r\n )\r\n } as T; \r\n}\r\n\r\n\r\nexport function isMobile(): boolean {\r\n const mobileBP = getComputedStyle(document.documentElement)\r\n .getPropertyValue('--bp-mobile');\r\n return window.matchMedia(`(max-width: ${mobileBP})`).matches;\r\n}\r\n\r\nexport function helperShowFormFromBuilder(blocks: EditableBlock[], cols: number, editable = false) {\r\n return {\r\n cols: cols,\r\n blocks: mapEditableBlocksToBlocks(blocks, editable)\r\n };\r\n}\r\n\r\n\r\nfunction mapEditableBlocksToBlocks(blocks: EditableBlock[], editable: boolean): FormBlock[] {\r\n const fieldCodeToName = new Map<string, string>();\r\n blocks.forEach(block => {\r\n block.fields.forEach(field => {\r\n fieldCodeToName.set(field.code, field.fieldData.name);\r\n });\r\n });\r\n\r\n return blocks.map(block => ({\r\n title: block.title,\r\n subtitle: block.subtitle,\r\n fields: block.fields.map(field => {\r\n const visibilityRules = field.fieldData.visibilityRules?.map(rule => ({\n ...rule,\n fieldName: fieldCodeToName.get(rule.fieldName) ?? rule.fieldName\n }));\n const optionsSource = field.fieldData.optionsSource?.dependsOn\n ? {\n ...field.fieldData.optionsSource,\n dependsOn: fieldCodeToName.get(field.fieldData.optionsSource.dependsOn) ?? field.fieldData.optionsSource.dependsOn\n }\n : field.fieldData.optionsSource;\n\n return {\n ...field.fieldData,\n disabled: !editable,\n optionsSource,\n visibilityRules: visibilityRules ?? field.fieldData.visibilityRules\n };\n })\n }));\r\n }\n","import { Component, ContentChild, ElementRef, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { TableAction, TableCellChange, TableColums, TableRow, TableFilters, TableRowData, TableButton } from './table.models';\r\nimport { ButtonColor, UicButtonComponent } from '../button/button.component';\r\nimport { UicTableUicSearcherComponent } from './table-searcher/table-searcher.component';\r\nimport { UicTablePaginationComponent } from './table-pagination/table-pagination.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UicToolTipDirective } from '../../directives/tool-tip.directive';\r\nimport { highlightRow } from '../../animations/highlightRow.animation';\r\nimport { animatedRow } from '../../animations/animatedRow.animation';\r\nimport { UicCheckboxComponent } from '../inputs/checkbox/checkbox.component';\r\nimport { ActionMenuOption, UicActionButtonComponent } from '../uic-action-button/uic-action-button.component';\r\nimport { UicShortTableComponent } from '../short-table/short-table.component';\r\nimport { ItemValueComponent } from '../item-value/item-value.component';\r\nimport { isMobile } from '../../helpers'\r\nimport { AlertData } from '../tiny-alert/tiny-alert.model';\r\nimport { UicInputComponent } from '../inputs/input/input.component';\r\nimport { UicSelectComponent } from '../inputs/select/select.component';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'ui-table',\r\n imports: [CommonModule, \r\n UicButtonComponent, \r\n ItemValueComponent,\r\n UicShortTableComponent,\r\n UicActionButtonComponent,\r\n UicTableUicSearcherComponent, \r\n UicTablePaginationComponent,\r\n UicTranslatePipe,\r\n UicToolTipDirective,\r\n UicCheckboxComponent, \r\n UicInputComponent,\r\n UicSelectComponent,\r\n FormsModule],\r\n templateUrl: './table.component.html',\r\n styleUrl: './table.component.scss',\r\n animations: [ highlightRow, animatedRow ]\r\n})\r\nexport class UicTableComponent {\r\n \r\n @Input() columns:TableColums[] = [];\r\n @Input() data:TableRow[] = [];\r\n @Input() loading = false;\r\n @Input() disabled = false;\r\n @Input() editable = false;\r\n @Input() rowClickable = false;\r\n @Input() rowExpandible = false;\r\n @Input() pages = 0;\r\n @Input() size = 25;\r\n @Input() squeletonRows = 5;\r\n @Input() buttonSize: 'm'|'l'|'s' = 'm';\r\n @Input() highlightedId: string |number = 0;\r\n @Input() headerText = '';\r\n @Input() headerSubtitle = '';\r\n @Input() totalItems = 0;\r\n @Input() alignment: 'left'|'center' = 'center';\r\n \r\n @Input() searchEnabled = true;\r\n @Input() searchLabel = 'table.search_label';\r\n @Input() searchPlaceholder = 'table.search_placeholder';\r\n \r\n @Input() headerClass = '';\r\n @Input() headerBackgroundColor:ButtonColor = 'grey';\r\n @Input() striped = false;\r\n @Input() showPagination = true;\r\n @Input() searchOnKeydown = false;\r\n \r\n @Input() showEmptyMessage = true;\r\n @Input() showSearchButton = false;\r\n @Input() showTextPagination = true;\r\n @Input() emptyMessage = 'table.empty';\r\n @Input() switchValidation:AlertData[] = [];\r\n @Input() nextButtonText = 'table.next_short';\r\n @Input() previousButtonText = 'table.previous_short';\r\n @Input() mobilePortletCols = 2;\r\n \r\n @Input() searcherShowButtonText = false;\r\n \r\n \r\n \r\n @Output() action = new EventEmitter<TableAction>();\r\n @Output() update = new EventEmitter<TableFilters>();\r\n @Output() checkedChange = new EventEmitter<(string|number)[]>(); \r\n @Output() switchChange = new EventEmitter<{key:string|number,value:boolean,columName:string}>(); \r\n @Output() clickedRow = new EventEmitter<string|number>(); \r\n @Output() cellChange = new EventEmitter<TableCellChange>();\r\n \r\n allSelected = false;\r\n \r\n checkedIds = new Set<string | number >();\r\n sortKey = '';\r\n sortAsc = true;\r\n filter = '';\r\n page=1;\r\n\r\n fullViewRows:(string|number)[] = [];\r\n\r\n mobileView = false;\r\n private editableValues: Record<string, string|number|null> = {};\r\n\r\n ngOnInit(){\r\n this.mobileView = isMobile();\r\n this.syncEditableValues();\r\n }\r\n\r\n getValue(data:TableRowData[],key:string):string{\r\n const col = data.find(col => col.key == key);\r\n return col?.value?.toString()??'';\r\n }\r\n\r\n\r\n getMoreActions(actions:TableButton[], row:TableRowData[]):ActionMenuOption[]{\r\n return actions\r\n .filter(f=> this.isValidRule(row, f.rule))\r\n .map(p=>({id:p.key,label:p.text??'',icon:p.icon??''}))\r\n }\r\n\r\n getFontColor(data:TableRowData[],key:string){\r\n const col = data.find(col => col.key == key);\r\n return 'ui-trc-' + (col?.textColor??'black');\r\n }\r\n\r\n isValidRule(data:TableRowData[],key:string[]|undefined):boolean{\r\n if ( !key ) return true;\r\n let valid = true;\r\n\r\n key.forEach(k => {\r\n const col = data.find(col => col.key == k);\r\n valid = valid && !!(col?.value);\r\n });\r\n \r\n return valid;\r\n }\r\n\r\n\r\n sortClick(key:string){\r\n if ( this.sortKey != key ){\r\n this.sortKey = key;\r\n this.sortAsc = true;\r\n }else if ( this.sortAsc ){\r\n this.sortAsc = false;\r\n }else{\r\n this.sortKey = '';\r\n this.sortAsc = true;\r\n }\r\n this.updateData();\r\n }\r\n sizeChabge(newSize:number){\r\n this.size = newSize;\r\n this.updateData(); \r\n }\r\n pageChage(newPage:number){\r\n this.page = newPage;\r\n this.updateData();\r\n }\r\n search(text:string){\r\n this.filter = text;\r\n this.updateData();\r\n }\r\n updateData(){\r\n this.update.emit({\r\n sortBy:this.sortKey,\r\n isSortAscending:this.sortAsc,\r\n pageNumber:this.page,\r\n pageSize:this.size,\r\n filter: this.filter\r\n })\r\n }\r\n \r\n toggleSelection(id: string|number, checked: boolean){\r\n if (checked) {\r\n this.checkedIds.add(id);\r\n } else {\r\n this.checkedIds.delete(id);\r\n }\r\n this.areAllSelected();\r\n this.checkedChange.emit(Array.from(this.checkedIds));\r\n }\r\n \r\n toggleAll(checked: boolean) {\r\n if (checked) {\r\n this.data.forEach(item => this.checkedIds.add(item.id));\r\n } else {\r\n this.checkedIds.clear();\r\n }\r\n this.checkedChange.emit(Array.from(this.checkedIds));\r\n }\r\n areAllSelected() {\r\n this.allSelected = this.checkedIds.size === this.data.length && this.data.length > 0;\r\n }\r\n \r\n ngOnChanges(change:SimpleChanges) {\r\n if (change['data'] || change['columns']) {\r\n this.syncEditableValues();\r\n }\r\n this.areAllSelected();\r\n }\r\n\r\n doAction(rowId:string|number,key:string,event?: MouseEvent){\r\n event?.stopPropagation();\r\n this.action.emit({rowId,key});\r\n }\r\n\r\n\r\n resetCheckedIds() {\r\n this.checkedIds.clear();\r\n this.checkedChange.emit([]);\r\n }\r\n\r\n switchHandler(key:string|number,value:boolean, columName:string){\r\n this.switchChange.emit({key,value,columName});\r\n }\r\n\r\n\r\n @ContentChild('[actions]') actionsRef?: ElementRef;\r\n\r\n hasActions = false;\r\n\r\n ngAfterContentInit() {\r\n this.hasActions = !!this.actionsRef;\r\n }\r\n\r\n clickRow(id:number|string){\r\n if (this.rowClickable)\r\n this.clickedRow.emit(id);\r\n \r\n\r\n if ( this.rowExpandible && this.mobileView){\r\n if ( this.fullViewRows.includes(id) ) { \r\n this.fullViewRows = this.fullViewRows.filter(f=>f!=id);\r\n }else{\r\n this.fullViewRows.push(id)\r\n }\r\n }\r\n }\r\n\r\n isCellEditable(column: TableColums): boolean {\r\n if (!this.editable || this.disabled || !column.editable) return false;\r\n const editionType = column.editionType ?? 'input';\r\n return editionType === 'input' || editionType === 'select';\r\n }\r\n\r\n getEditableCellValue(rowId: string|number, columnKey: string): string|number|null {\r\n return this.editableValues[this.getEditableCellKey(rowId, columnKey)] ?? null;\r\n }\r\n\r\n onEditableInputChange(rowId: string|number, columnKey: string, value: string): void {\r\n this.editableValues[this.getEditableCellKey(rowId, columnKey)] = value;\r\n }\r\n\r\n onEditableInputBlur(rowId: string|number, rowData: TableRowData[], columnKey: string): void {\r\n const key = this.getEditableCellKey(rowId, columnKey);\r\n const newValue = this.editableValues[key] ?? null;\r\n const previousValue = this.getRawValue(rowData, columnKey);\r\n if (this.areSameValue(newValue, previousValue)) return;\r\n this.cellChange.emit({ rowId, columnKey, value: newValue, previousValue });\r\n }\r\n\r\n onEditableSelectChange(rowId: string|number, rowData: TableRowData[], columnKey: string, value: string|number|null): void {\r\n const key = this.getEditableCellKey(rowId, columnKey);\r\n this.editableValues[key] = value;\r\n const previousValue = this.getRawValue(rowData, columnKey);\r\n if (this.areSameValue(value, previousValue)) return;\r\n this.cellChange.emit({ rowId, columnKey, value, previousValue });\r\n }\r\n\r\n private syncEditableValues(): void {\r\n const nextValues: Record<string, string|number|null> = {};\r\n for (const row of this.data) {\r\n for (const col of this.columns) {\r\n if (!col.editable) continue;\r\n nextValues[this.getEditableCellKey(row.id, col.key)] = this.getRawValue(row.data, col.key);\r\n }\r\n }\r\n this.editableValues = nextValues;\r\n }\r\n\r\n private getEditableCellKey(rowId: string|number, columnKey: string): string {\r\n return `${rowId}::${columnKey}`;\r\n }\r\n\r\n private getRawValue(data: TableRowData[], key: string): string|number|null {\r\n const col = data.find(c => c.key === key);\r\n return col?.value ?? null;\r\n }\r\n\r\n private areSameValue(a: string|number|null, b: string|number|null): boolean {\r\n return `${a ?? ''}` === `${b ?? ''}`;\r\n }\r\n}\r\n","@if ( hasActions || searchEnabled){\r\n <div class=\"ui-table-filters\">\r\n @if (searchEnabled) {\r\n <uic-table-searcher \r\n [showSearchButton]=\"showSearchButton\" \r\n [showButtonText]=\"searcherShowButtonText\" \r\n [searchOnKeydown]=\"searchOnKeydown\"\r\n (filter)=\"search($event)\" \r\n [placeholder]=\"searchPlaceholder\" >\r\n </uic-table-searcher>\r\n }\r\n <div class=\"ui-filter-actions\">\r\n <ng-content select=\"[actions]\"></ng-content>\r\n </div>\r\n </div>\r\n}\r\n<ng-content select=\"[filters]\"></ng-content>\r\n<div class=\"ui-table-wrapper\">\r\n @if (headerText) {\r\n <div class=\"ui-table-topbar\"> \r\n <div>\r\n {{headerText}} <span class=\"hightlited-note\"> ({{totalItems}}) </span> \r\n </div>\r\n <p> {{headerSubtitle}} </p>\r\n </div>\r\n }\r\n <div class=\"ui-table-container\"> \r\n <table class=\"ui-table\" [class.ui-striped]=\"striped\">\r\n <thead>\r\n <tr [class]=\" headerClass || 'header-'+headerBackgroundColor\">\r\n @for (header of columns; track $index) {\r\n <th [class.noshow-small]=\"header.hideOn == 'small'\"\r\n [class.noshow-medium]=\"header.hideOn == 'medium'\">\r\n <div [class]=\"'ui-th-wrap ui-alignment-'+alignment\" >\r\n @if (header.type=='checkbox') {\r\n <div>\r\n <ui-checkbox style=\"margin-right: 5px;\" [(ngModel)]=\"allSelected\" (ngModelChange)=\"toggleAll($event)\"></ui-checkbox>\r\n </div>\r\n }\r\n {{header.label.toUpperCase() }} \r\n @if (header.sortEnable) {\r\n <div class=\"ui-sort-arrow\" (click)=\"sortClick(header.key)\" [ngClass]=\"{'ui-sort-active':header.key == sortKey}\">\r\n <i [class]=\"(sortAsc||header.key != sortKey)?'ri-arrow-down-line':'ri-arrow-up-line'\"></i> \r\n </div>\r\n }\r\n </div>\r\n </th> \r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n\r\n @if (loading) {\r\n @for (item of [].constructor(squeletonRows); track $index) {\r\n <tr>\r\n @for (header of columns; track $index) {\r\n <td> <div class=\"ui-row-loader\"></div> </td>\r\n }\r\n </tr> \r\n }\r\n } @else {\r\n @for (row of data; track row.id) {\r\n <tr [@highlightRow]=\"highlightedId === row.id ? 'highlighted' : null\" \r\n [class.ui-tr-highlighted]=\"row.highlighted\"\r\n [class.clickable-row]=\"rowClickable\"\r\n (click)=\"clickRow(row.id)\"\r\n >\r\n @for (header of columns; track $index) {\r\n <!-- TIPOS DE HEADERS -->\r\n <td [class]=\"getFontColor(row.data,header.key)\"\r\n [class.noshow-small]=\"header.hideOn == 'small'\"\r\n [class.noshow-medium]=\"header.hideOn == 'medium'\">\r\n\r\n <div [class]=\"'ui-cell-content ui-alignment-'+alignment\" \r\n [style.justify-content]=\"header.align||null\"\r\n [style.width.px]=\"header.width || null\">\r\n @if (header.type == 'actions') { \r\n <div class=\"ui-centered-cell-content\">\r\n @for (btn of header.actions; track $index) {\r\n @if (isValidRule(row.data,btn.rule)) {\r\n <ui-button \r\n [disabled]=\"loading\"\r\n [uiTooltip]=\"btn.tooltip??''\"\n size=\"s\"\r\n [disabled]=\"disabled\"\r\n [text]=\"btn.text??''\"\r\n [type]=\"btn.type??'filled'\"\r\n [iconOnly]=\"!btn.text\"\r\n [icon]=\"btn.icon??''\"\r\n [color]=\"btn.color??'black'\"\r\n (click)=\"doAction(row.id,btn.key,$event)\">\r\n </ui-button> \r\n }\r\n } \r\n @if ( header.moreActions && header.moreActions.length>0 ) {\r\n @for (ma of header.moreActions; track $index) {\r\n <ui-action-button [icon]=\"ma.icon??'ri-more-2-line'\" (optionSelected)=\"doAction(row.id,$event.id)\" [options]=\"getMoreActions(ma.actions||[],row.data)\"></ui-action-button>\r\n }\r\n }\r\n </div> \r\n }\r\n @else if (header.type == 'checkbox'){\r\n <ui-checkbox [disabled]=\"disabled\" [ngModel]=\"checkedIds.has(row.id)\" [placeholder]=\"getValue(row.data,header.key)\" (ngModelChange)=\"toggleSelection(row.id,$event)\" ></ui-checkbox> \r\n }\r\n @else if (isCellEditable(header)) {\r\n @if ((header.editionType ?? 'input') === 'select') {\r\n <div class=\"ui-editable-cell\" (click)=\"$event.stopPropagation()\">\r\n <ui-select\r\n [disabled]=\"disabled\"\r\n [options]=\"header.editionTypeOptions || []\"\r\n [ngModel]=\"getEditableCellValue(row.id, header.key)\"\r\n (ngModelChange)=\"onEditableSelectChange(row.id, row.data, header.key, $event)\">\r\n </ui-select>\r\n </div>\r\n } @else {\r\n <div class=\"ui-editable-cell\" (click)=\"$event.stopPropagation()\">\r\n <ui-input [disabled]=\"disabled\">\r\n <input\r\n [disabled]=\"disabled\"\r\n [ngModel]=\"getEditableCellValue(row.id, header.key)\"\r\n (ngModelChange)=\"onEditableInputChange(row.id, header.key, $event)\"\r\n (blur)=\"onEditableInputBlur(row.id, row.data, header.key)\" />\r\n </ui-input>\r\n </div>\r\n }\r\n }\r\n @else {\r\n <ui-item-value\r\n [disabled]=\"disabled\"\r\n [key]=\"header.key\"\r\n [type]=\"header.type??'text'\"\r\n [row]=\"row\"\r\n [alignment]=\"alignment\"\r\n [switchValidation]=\"switchValidation\"\r\n (switchConfirmed)=\"switchHandler(row.id, $event, header.label)\"\r\n ></ui-item-value>\r\n }\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n @if (fullViewRows.includes(row.id)) {\r\n <tr style=\"border-top: none ;\">\r\n <td [colSpan]=\"columns.length\">\r\n <div class=\"full-space-row\">\r\n <ui-short-table [columns]=\"columns\" [cols]=\"mobilePortletCols\" [data]=\"row\"></ui-short-table>\r\n </div>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n @empty {\r\n @if (showEmptyMessage) {\r\n <tr> \r\n <td [colSpan]=\"columns.length\">\r\n <div class=\"ui-empty\">{{emptyMessage | uicTranslate}} </div>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n \r\n @if (showPagination) {\r\n <uic-table-pagination \r\n [loading]=\"loading\" \r\n [totalPages]=\"pages\" \r\n [showText]=\"showTextPagination\"\r\n [size]=\"size\"\r\n [nextButtonText]=\"nextButtonText\"\r\n [previousButtonText]=\"previousButtonText\"\r\n [buttonSize]=\"buttonSize\"\r\n (sizeChange)=\"sizeChabge($event)\"\r\n (pageChange)=\"pageChage($event)\">\r\n </uic-table-pagination>\r\n }\r\n</div>\r\n","import { ButtonColor, ButtonType } from \"../button/button.component\";\r\nimport { AppSelectOption } from \"../inputs/select/select.component\";\r\nimport { UicPortletData } from \"../uic-portlet-card/uic-portlet-card.component\";\r\n\r\nexport interface TableColums{\r\n key: string;\r\n label: string;\r\n width?:number;\r\n align?: 'flex-start'| 'flex-end'| 'center';\r\n type?: ColumnTypes;\r\n sortEnable?: boolean;\r\n editable?:boolean;\r\n editionType?: 'input'|'select';\r\n editionTypeOptions?:AppSelectOption[];\r\n actions?: TableButton[];\r\n hideOn?: 'small' | 'medium';\r\n moreActions?: {icon?:string;actions:TableButton[]}[];\r\n}\r\nexport interface TableButton{\r\n key: string;\r\n color?: ButtonColor;\r\n icon?: string;\r\n text?: string;\r\n type?:ButtonType;\r\n tooltip?: string;\r\n rule?: string[];\r\n}\r\nexport interface TableRow{\r\n id: number|string;\r\n data:TableRowData[];\r\n highlighted?:boolean;\r\n}\r\n\r\nexport interface TableRowData extends UicPortletData{\r\n key: string;\r\n}\r\n\r\nexport interface TableList{text:string; subtext?:string,icon?:string; color?:string};\r\nexport interface TableUser{name:string;id:string;photo?:string,icon?:string,hideAvatar?:boolean};\r\nexport interface TableAction{\r\n rowId: number|string;\r\n key: string;\r\n}\r\nexport interface TableCellChange{\r\n rowId: number|string;\r\n columnKey: string;\r\n value: string|number|null;\r\n previousValue: string|number|null;\r\n}\r\nexport type ColumnTypes = \r\n'actions' \r\n| 'text' \r\n| 'bold'\r\n| 'list' \r\n| 'money'\r\n| 'copy'\r\n| 'user' \r\n| 'checkbox' \r\n| 'icon-list' \r\n| 'status' \r\n| 'switch' \r\n| 'bigtext' \r\n| 'date' \r\n| 'tag';\r\n\r\nexport type TableTextColors = 'primary' | 'red' | 'green' | 'blue' | 'yellow' | 'black' | 'grey' ;\r\nexport type BackgroundColors = 'primary' | 'secondary' | 'red' | 'green' | 'blue' | 'yellow' | 'black' | 'grey' | 'transparent' | 'white' ;\r\nexport interface TableFilters {\r\n sortBy:string;\r\n isSortAscending:boolean;\r\n pageNumber:number;\r\n pageSize:number;\r\n filter: string;\r\n }\r\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'ui-skeleton-cards',\n imports: [ CommonModule ],\n templateUrl: './skeleton-cards.component.html',\n styleUrl: './skeleton-cards.component.scss'\n})\nexport class UicSkeletonCardsComponent {\n @Input() cards: number = 6;\n @Input() gap: number = 16;\n @Input() minCardWidthPx: number = 220;\n\n get gridStyle() {\n const cardsGap = this.gap > 0 ? this.gap : 0;\n const minWidth = this.minCardWidthPx > 0 ? this.minCardWidthPx : 120;\n return {\n 'grid-template-columns': `repeat(auto-fit, minmax(${minWidth}px, 1fr))`,\n gap: `${cardsGap}px`\n };\n }\n\n get cardsCount(): number {\n return this.cards > 0 ? this.cards : 0;\n }\n}\n","<div class=\"skeleton-cards-grid\" [ngStyle]=\"gridStyle\">\n @for (card of [].constructor(cardsCount); track $index) {\n <div class=\"skeleton-card skeleton-gradient\"></div>\n }\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { Alert } from '../alert.model';\r\n\r\n\r\n@Component({\r\n selector: 'ui-alert',\r\n imports: [],\r\n templateUrl: './alert.component.html',\r\n styleUrl: './alert.component.scss'\r\n})\r\nexport class UiAlertComponent implements OnInit{\r\n @Input() alert!: Alert;\r\n @Output() closeAlert = new EventEmitter<number>();\r\n \r\n interval: any;\r\n progressValue = 0;\r\n animationIntevalMs = 100;\r\n pauseAnimation = false;\r\n id = 0;\r\n\r\n\r\n ngOnInit(){\r\n this.id = this.alert.id;\r\n if(this.alert.duration && this.alert.duration > 0){\r\n const duration = this.alert.duration;\r\n let count = 0;\r\n this.interval = setInterval(() => {\r\n count = this.pauseAnimation? count : count + this.animationIntevalMs;\r\n this.progressValue = Math.floor((count / duration)*100);\r\n if (this.progressValue > 100){\r\n this.close();\r\n }\r\n }, this.animationIntevalMs);\r\n\r\n }\r\n }\r\n\r\n close(){\r\n clearInterval( this.interval );\r\n this.closeAlert.emit(this.id);\r\n }\r\n\r\n \r\n}\r\n","<div [class]=\"'alert ' + alert.type + ' ' + (alert.style??'filled')\" >\r\n @if (alert.showProgressBar) {\r\n <div class=\"alert-process\">\r\n <div class=\"alert-process-bar\" [style.width.%]=\"progressValue\"></div>\r\n </div>\r\n }\r\n <div class=\"alert-body\">\r\n <button class=\"close\" (click)=\"close()\"> ✕ </button>\r\n @if (alert.icon) {\r\n <i [class]=\"'highlighted ' + alert.icon\"></i>\r\n }\r\n <div>\r\n <div class=\"toast-title highlighted\">{{alert.title}}</div>\r\n <div class=\"toast-body\">{{alert.message}}</div>\r\n @if ( alert.okButtonText || alert.cancelButtonText){\r\n <div class=\"toast-buttons \">\r\n @if ( alert.okButtonText ) {\r\n <button style=\"font-weight: 500;\">{{alert.okButtonText}}</button>\r\n }\r\n @if ( alert.cancelButtonText ){\r\n <button (click)=\"close()\">{{alert.cancelButtonText}}</button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { Alert } from '../alert.model';\r\nimport { UicPushAlertService } from '../../../services/push-alert.service';\r\nimport { UiAlertComponent } from '../alert/alert.component';\r\n\r\n@Component({\r\n selector: 'ui-alert-container',\r\n imports: [UiAlertComponent],\r\n templateUrl: './alert-container.component.html',\r\n styleUrl: './alert-container.component.scss'\r\n})\r\nexport class UicAlertContainerComponent implements OnInit {\r\n alerts: Alert[] = [];\r\n\r\n constructor(private readonly alertService: UicPushAlertService) {}\r\n\r\n ngOnInit() {\r\n this.alertService.stream.subscribe( alert => {\r\n this.alerts.push(alert);\r\n });\r\n }\r\n\r\n dismis(id:number){\r\n const idx = this.alerts.findIndex(f=>f.id == id);\r\n this.alerts.splice(idx,1);\r\n }\r\n\r\n}\r\n","<div class=\"alert-container\">\r\n @for (alert of alerts; track alert.id){\r\n <ui-alert\r\n (closeAlert)=\"dismis($event)\"\r\n [alert]=\"alert\">\r\n </ui-alert>\r\n } \r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { createValueAccessor } from '../dynamic-form/base-value-accessot';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\n\r\nconst base = createValueAccessor<Blob | null>();\r\n\r\n@Component({\r\n selector: 'ui-signature-pad',\r\n imports: [CommonModule, UicButtonComponent, UicTranslatePipe],\r\n templateUrl: './signature-pad.component.html',\r\n styleUrls: ['./signature-pad.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicSignaturePadComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class UicSignaturePadComponent extends base implements AfterViewInit {\r\n @Input() width = 400;\r\n @Input() height = 200;\r\n @Input() strokeColor = '#111827';\r\n @Input() strokeWidth = 2;\r\n @Input() disabled = false;\r\n @Output() imageChange = new EventEmitter<Blob | null>();\r\n\r\n @ViewChild('canvas', { static: true }) canvasRef!: ElementRef<HTMLCanvasElement>;\r\n\r\n private ctx: CanvasRenderingContext2D | null = null;\r\n private drawing = false;\r\n\r\n ngAfterViewInit(): void {\r\n const canvas = this.canvasRef.nativeElement;\r\n canvas.width = this.width;\r\n canvas.height = this.height;\r\n this.ctx = canvas.getContext('2d');\r\n if (this.ctx) {\r\n this.ctx.lineWidth = this.strokeWidth;\r\n this.ctx.lineCap = 'round';\r\n this.ctx.lineJoin = 'round';\r\n this.ctx.strokeStyle = this.strokeColor;\r\n }\r\n }\r\n\r\n startDraw(event: PointerEvent) {\r\n if (!this.ctx || this.disabled) return;\r\n this.drawing = true;\r\n const { x, y } = this.relativePosition(event);\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(x, y);\r\n this.canvasRef.nativeElement.setPointerCapture(event.pointerId);\r\n event.preventDefault();\r\n }\r\n\r\n draw(event: PointerEvent) {\r\n if (!this.drawing || !this.ctx || this.disabled) return;\r\n const { x, y } = this.relativePosition(event);\r\n this.ctx.lineTo(x, y);\r\n this.ctx.stroke();\r\n event.preventDefault();\r\n }\r\n\r\n endDraw(event: PointerEvent) {\r\n if (!this.drawing || !this.ctx || this.disabled) return;\r\n this.ctx.closePath();\r\n this.drawing = false;\r\n this.canvasRef.nativeElement.releasePointerCapture(event.pointerId);\r\n this.emitSignature();\r\n event.preventDefault();\r\n }\r\n\r\n clear() {\r\n if (!this.ctx) return;\r\n this.resetCanvas();\r\n this.notifyChange(null as any);\r\n this.imageChange.emit(null);\r\n }\r\n\r\n private emitSignature() {\r\n if (this.disabled) return;\r\n const canvas = this.canvasRef.nativeElement;\r\n canvas.toBlob((blob) => {\r\n if (!blob) return;\r\n this.notifyChange(blob as any);\r\n this.imageChange.emit(blob);\r\n }, 'image/png');\r\n }\r\n\r\n private relativePosition(event: PointerEvent) {\r\n const rect = this.canvasRef.nativeElement.getBoundingClientRect();\r\n return {\r\n x: event.clientX - rect.left,\r\n y: event.clientY - rect.top,\r\n };\r\n }\r\n\r\n override writeValue(value: Blob | null): void {\r\n super.writeValue(value as any);\r\n if (!this.ctx) return;\r\n if (!value) {\r\n this.resetCanvas();\r\n return;\r\n }\r\n const url = URL.createObjectURL(value);\r\n const img = new Image();\r\n img.onload = () => {\r\n this.resetCanvas();\r\n this.ctx!.drawImage(img, 0, 0, this.width, this.height);\r\n URL.revokeObjectURL(url);\r\n };\r\n img.src = url;\r\n }\r\n\r\n private resetCanvas() {\r\n if (this.ctx) {\r\n this.ctx.clearRect(0, 0, this.width, this.height);\r\n }\r\n }\r\n}\r\n","<div class=\"signature-pad\" [style.width.px]=\"width\">\r\n <canvas\r\n #canvas\r\n class=\"signature-canvas\"\r\n [attr.width]=\"width\"\r\n [attr.height]=\"height\"\r\n (pointerdown)=\"startDraw($event)\"\r\n (pointermove)=\"draw($event)\"\r\n (pointerup)=\"endDraw($event)\"\r\n (pointerleave)=\"endDraw($event)\"\r\n ></canvas>\r\n <div class=\"signature-actions\">\r\n <ui-button size=\"s\" type=\"ghost\" icon=\"ri-delete-bin-line\" (click)=\"clear()\">{{'common.clear' | uicTranslate}}</ui-button>\r\n </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { ButtonColor } from '../button/button.component';\r\n\r\n@Component({\r\n selector: 'ui-kpi-card',\r\n imports: [],\r\n templateUrl: './kpi-card.component.html',\r\n styleUrl: './kpi-card.component.scss'\r\n})\r\nexport class UicKpiCardComponent {\r\n @Input() data!:UicKpiContet;\r\n @Input() loading = false;\r\n\r\n}\r\n\r\nexport interface UicKpiContet{\r\n label: string;\r\n value: string;\r\n icon?: string;\r\n iconColor?: ButtonColor;\r\n textColor?: ButtonColor;\r\n}","@if (data) {\r\n <div class=\"kpi-card\">\r\n <div >\r\n <div class=\"kpi-card-label\">{{data.label}}</div>\r\n @if (loading) {\r\n <div class=\"kpi-card-value-loading\"></div>\r\n }@else {\r\n\r\n <div [class]=\"'kpi-card-value ui-trc-' + data.textColor\">{{data.value}}</div>\r\n }\r\n </div>\r\n <i [class]=\"data.icon + ' ui-trc-' + data.iconColor\"></i>\r\n </div>\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { UicToolTipDirective } from '../../directives/tool-tip.directive';\r\n\r\n@Component({\r\n selector: 'ui-tabs-button',\r\n imports: [UicToolTipDirective],\r\n templateUrl: './tabs-button.component.html',\r\n styleUrl: './tabs-button.component.scss'\r\n})\r\nexport class UicTabsButtonComponent {\r\n\r\n @Input() tabs:UiBtnTab[] = [];\r\n @Input() activeTab = '';\r\n @Output() activeTabChange = new EventEmitter<string>();\r\n\r\n selectTab(tab:string){\r\n this.activeTab = tab;\r\n this.activeTabChange.emit(this.activeTab);\r\n }\r\n}\r\nexport interface UiBtnTab{key:string; text:string; icon?:string, subtitle?:string, warning?:string} ","<div class=\"tabs\">\r\n @for (tab of tabs; track $index) {\r\n <div (click)=\"selectTab(tab.key)\" [class.active-tab]=\"tab.key == activeTab\" class=\"tab\"> \r\n @if (tab.icon) {\r\n <i [class]=\"tab.icon\"></i> \r\n }\r\n <div class=\"tab-text\">\r\n {{tab.text}}\r\n @if(tab.warning){\r\n <span [uiTooltip]=\"tab.warning\" class=\"warning-tab\">!</span>\n }\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentRef,\r\n EventEmitter,\r\n HostBinding,\r\n inject,\r\n Input,\r\n Output,\r\n Type,\r\n ViewChild,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { UicToolTipDirective } from '../../directives/tool-tip.directive';\r\nimport { UicTinyAlertService } from '../../services/tiny-alert.service';\r\nimport { AlertData } from '../tiny-alert/tiny-alert.model';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\nimport { ActionMenuOption, UicActionButtonComponent } from '../uic-action-button/uic-action-button.component';\r\n\r\nexport interface WorkPanelTabConfig {\r\n id?: string;\r\n title?: string;\r\n label: string;\r\n icon?:string;\r\n componentType: Type<any>;\r\n componentInputs?: Record<string, any>;\r\n}\r\n\r\n@Component({\r\n selector: 'ui-work-panel',\r\n imports: [UicButtonComponent, UicToolTipDirective, UicTranslatePipe, UicActionButtonComponent],\r\n templateUrl: './work-panel.component.html',\r\n styleUrl: './work-panel.component.scss'\r\n})\r\nexport class UicWorkPanelComponent implements AfterViewInit {\r\n @ViewChild('host', { read: ViewContainerRef, static: true })\r\n host!: ViewContainerRef;\r\n\r\n private readonly tinyAlert = inject(UicTinyAlertService);\r\n\r\n @Input() moreActions: ActionMenuOption[] = [];\r\n @Output() actionSelected = new EventEmitter<ActionMenuOption&{panelId:string}>();\r\n @Input() componentType?: Type<any>;\r\n @Input() componentInputs: Record<string, any> = {};\r\n @Input() tabs: WorkPanelTabConfig[] = [];\r\n @Input() closeWarning!:AlertData;\r\n @Input() width= '50%';\r\n @Input() duplicateValidationMessage = \"\";\r\n\r\n\r\n @Output() tabsChange = new EventEmitter<WorkPanelTabConfig[]>();\r\n @Output() tabClosed = new EventEmitter<string>();\r\n @Output() tabSelected = new EventEmitter<string>();\r\n @Output() tabAdded = new EventEmitter<string>();\r\n @Output() fullViewChange = new EventEmitter<boolean>();\r\n\r\n @Input() minPosition = 1;\r\n @Input() showAddButton = true;\r\n fullView = false;\r\n isMinimized = false;\r\n\r\n activeTabId?: string;\r\n activeTabTitle?: string;\r\n tabInstances: Array<WorkPanelTabConfig & { id: string; componentRef: ComponentRef<any> }> = [];\r\n private idCounter = 0;\r\n private initialized = false;\r\n\r\n constructor(private readonly cdr: ChangeDetectorRef) {}\r\n\r\n @HostBinding('style.--panel-width')\r\n get panelWidth() {\r\n return `${this.width}`;\r\n }\r\n ngAfterViewInit(): void {\r\n this.initialized = true;\r\n this.initializeTabs();\r\n this.renderActiveTab();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n private initializeTabs() {\r\n if (this.tabs?.length) {\r\n this.tabs.forEach(tab => this.createTab(tab, false));\r\n } else if (this.componentType) {\r\n this.createTab(\r\n {\r\n label: this.componentInputs['title'] ?? 'Panel',\r\n componentType: this.componentType,\r\n componentInputs: this.componentInputs\r\n },\r\n false\r\n );\r\n }\r\n }\r\n\r\n changeSizeBtn(b:boolean){\r\n this.fullView = b;\r\n this.fullViewChange.emit( this.isFullViewActivated() )\r\n }\r\n\r\n addTab(tabConfig: WorkPanelTabConfig): string {\r\n const idx = this.tabInstances.findIndex(f => f.label == tabConfig.label);\r\n if ( idx != -1){\r\n if ( this.duplicateValidationMessage ){\r\n this.tinyAlert.info(this.duplicateValidationMessage);\r\n }\r\n this.openTab(this.tabInstances[idx].id);\r\n return \"\";\r\n }\r\n\r\n \r\n if (!this.initialized || !this.host) {\r\n const id = tabConfig.id ?? `tab-${++this.idCounter}`;\r\n this.tabs.push({ ...tabConfig, id });\r\n this.activeTabId = id;\r\n this.activeTabTitle = tabConfig.title;\r\n this.isMinimized = false;\r\n return id;\r\n }\r\n\r\n const instance = this.createTab(tabConfig, true);\r\n this.activeTabId = instance.id;\r\n this.activeTabTitle = instance.title;\r\n this.isMinimized = false;\r\n this.renderActiveTab();\r\n this.tabAdded.emit(instance.id);\r\n this.tabSelected.emit(instance.id);\r\n return instance.id;\r\n }\r\n\r\n openTab(id:string){\r\n this.isMinimized = false;\r\n this.activeTabId = id;\r\n this.activeTabTitle = this.tabInstances.find(f=>f.id === id)?.title;\r\n this.renderActiveTab();\r\n this.tabSelected.emit(id);\r\n }\r\n\r\n selectTab(id: string) {\r\n if (this.activeTabId === id) {\r\n this.minimizePanel();\r\n return;\r\n }\r\n this.openTab(id);\r\n }\r\n\r\n closeActiveTab(omitWarning:boolean=false) {\r\n if (this.activeTabId) {\r\n this.closeTab(this.activeTabId,omitWarning);\r\n }\r\n return this.activeTabId; \r\n }\r\n\r\n closeTab(id: string,omitWarning:boolean=false) {\r\n if ( this.closeWarning && !omitWarning){\r\n this.tinyAlert.showAlert(this.closeWarning).then(r=>{\r\n if (r.value) this.destroyPanel(id);\r\n });\r\n }else{\r\n this.destroyPanel(id);\r\n }\r\n }\r\n\r\n private destroyPanel(id:string){\r\n const index = this.tabInstances.findIndex(tab => tab.id === id);\r\n if (index === -1) {\r\n return;\r\n }\r\n const [tab] = this.tabInstances.splice(index, 1);\r\n\r\n const viewIndex = this.host.indexOf(tab.componentRef.hostView);\r\n if (viewIndex > -1) {\r\n this.host.detach(viewIndex);\r\n }\r\n tab.componentRef.destroy();\r\n\r\n if (this.activeTabId === id) {\r\n const next = this.tabInstances[index] ?? this.tabInstances[index - 1];\r\n this.activeTabId = next?.id;\r\n this.activeTabTitle = next?.title;\r\n }\r\n if (!this.activeTabId) {\r\n this.isMinimized = true;\r\n }\r\n this.renderActiveTab();\r\n this.emitTabsChange();\r\n this.tabClosed.emit(id);\r\n this.fullViewChange.emit(this.isFullViewActivated());\r\n }\r\n\r\n minimizePanel() {\r\n this.isMinimized = true;\r\n this.activeTabId = '';\r\n this.activeTabTitle = '';\r\n this.fullViewChange.emit(this.isFullViewActivated()); \r\n }\r\n\r\n emitAction(option: ActionMenuOption){\r\n this.actionSelected.emit({...option, panelId:this.activeTabId ?? \"\"});\r\n \r\n }\r\n private createTab(tabConfig: WorkPanelTabConfig, emitChange = true) {\r\n if (!this.host) {\r\n throw new Error('WorkPanel host ViewContainerRef not ready');\r\n }\r\n const id = tabConfig.id ?? `tab-${++this.idCounter}`;\r\n const componentRef = this.host.createComponent(tabConfig.componentType);\r\n Object.assign(componentRef.instance, tabConfig.componentInputs ?? {});\r\n\r\n const viewIndex = this.host.indexOf(componentRef.hostView);\r\n if (viewIndex > -1) {\r\n this.host.detach(viewIndex);\r\n }\r\n\r\n const instance = { ...tabConfig, id, componentRef };\r\n this.tabInstances.push(instance);\r\n\r\n if (!this.activeTabId) {\r\n this.activeTabId = id;\r\n this.activeTabTitle = tabConfig.title;\r\n }\r\n if (emitChange) {\r\n this.emitTabsChange();\r\n }\r\n return instance;\r\n }\r\n\r\n private renderActiveTab() {\r\n while (this.host.length) {\r\n this.host.detach(0);\r\n }\r\n const active = this.tabInstances.find(tab => tab.id === this.activeTabId);\r\n if (active) {\r\n this.host.insert(active.componentRef.hostView);\r\n this.fullViewChange.emit(this.isFullViewActivated())\r\n }\r\n }\r\n\r\n private emitTabsChange() {\r\n const snapshot = this.tabInstances.map(({ componentRef, ...tab }) => ({ ...tab }));\r\n this.tabsChange.emit(snapshot);\r\n }\r\n\r\n private isFullViewActivated(){\r\n return !(this.isMinimized || !this.activeTabId) && this.fullView;\r\n }\r\n}\r\n","<div\r\n [class.dynamic-width]=\"!fullView\"\r\n [class]=\"fullView ? 'open-panel' : 'mid-panel'\"\r\n [class.panel-hidden]=\"isMinimized || !activeTabId\"\r\n>\r\n <div class=\"panel-header\">\r\n @if (activeTabTitle) {\r\n <div class=\"wp-title\">{{activeTabTitle}}</div>\r\n }\r\n @if (moreActions.length > 0) { \r\n <ui-action-button [options]=\"moreActions\" (optionSelected)=\"emitAction($event)\"></ui-action-button>\r\n }\r\n <ui-button class=\"nomob\" (click)=\"minimizePanel()\" size=\"s\" [uiTooltip]=\"'work_panel.minimize' | uicTranslate\" [iconOnly]=\"true\" color=\"black\" type=\"bordered\" rightIcon=\"ri-subtract-fill\"></ui-button>\n @if (fullView) {\r\n <ui-button class=\"nomob\" (click)=\"changeSizeBtn(false)\" size=\"s\" [uiTooltip]=\"'work_panel.reduce' | uicTranslate\" [iconOnly]=\"true\" color=\"black\" type=\"bordered\" rightIcon=\"ri-collapse-diagonal-fill\"></ui-button>\n } @else {\r\n <ui-button class=\"nomob\" (click)=\"changeSizeBtn(true)\" size=\"s\" [uiTooltip]=\"'work_panel.expand' | uicTranslate\" [iconOnly]=\"true\" color=\"black\" type=\"bordered\" rightIcon=\"ri-expand-diagonal-fill\"></ui-button>\n }\r\n <ui-button (click)=\"closeActiveTab()\" size=\"s\" [uiTooltip]=\"'work_panel.close' | uicTranslate\" [iconOnly]=\"true\" color=\"black\" type=\"bordered\" rightIcon=\"ri-close-line\"></ui-button>\n </div>\r\n <div class=\"panel-overflow\">\r\n <!-- contenido dinamico -->\r\n <ng-container #host></ng-container>\r\n </div>\r\n</div>\r\n@if (tabInstances.length > 0) {\r\n <div class=\"panel-nav-bar\">\r\n <div class=\"panel-tabs\">\r\n @for (tab of tabInstances; track tab.id) {\r\n <div class=\"minimized-panel\" [class.active]=\"tab.id === activeTabId\">\r\n <button class=\"min-btn\" type=\"button\" (click)=\"selectTab(tab.id)\">\r\n <i [class]=\"tab.icon?tab.icon : 'ri-dossier-line'\"></i>\r\n <div class=\"min-text\">{{ tab.label }}</div>\r\n </button>\r\n <i (click)=\"closeTab(tab.id)\" class=\"close-btn ri-close-line\"></i>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n","import { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { Component, ElementRef, inject, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ui-overlay-card',\r\n imports: [],\r\n templateUrl: './overlay-card.component.html',\r\n styleUrl: './overlay-card.component.scss'\r\n})\r\nexport class UicOverlayCardComponent {\r\n\r\n @ViewChild('menuTemplate') menuTemplate!: TemplateRef<any>;\r\n private overlayRef!: OverlayRef;\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n selectedSet = new Set<string | number>();\r\n allSelected = false;\r\n\r\n overlayPositions: ConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' },\r\n ];\r\n\r\n openMenu() {\r\n if (this.overlayRef) {\r\n this.close();\r\n return;\r\n }\r\n\r\n const origin = this.host.nativeElement.querySelector('.button-container');\r\n\r\n const positionStrategy: FlexibleConnectedPositionStrategy =\r\n this.overlay.position()\r\n .flexibleConnectedTo(origin as HTMLElement)\r\n .withPositions(this.overlayPositions)\r\n .withFlexibleDimensions(false)\r\n .withPush(true);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n });\r\n\r\n const portal = new TemplatePortal(this.menuTemplate, this.vcr);\r\n this.overlayRef.attach(portal);\r\n\r\n this.overlayRef.backdropClick().subscribe(() => this.close());\r\n }\r\n\r\n\r\n\r\n close() {\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n this.overlayRef = null!;\r\n }\r\n }\r\n}\r\n","<!-- Botón -->\r\n <div (click)=\"openMenu()\" class=\"button-container\">\r\n <ng-content select=\"[button]\"></ng-content>\r\n </div>\r\n\r\n<!-- Menú -->\r\n<ng-template #menuTemplate>\r\n <div class=\"action-menu\">\r\n <ng-content select=\"[content]\"></ng-content>\r\n </div>\r\n</ng-template>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { UiBtnTab } from '../tabs-button/tabs-button.component';\n\n\n@Component({\n selector: 'ui-accordion',\n imports: [],\n templateUrl: './accordion.component.html',\n styleUrl: './accordion.component.scss',\n animations: [\n trigger('accordionBody', [\n transition(':enter', [\n style({\n height: 0,\n opacity: 0,\n paddingTop: 0,\n paddingBottom: 0\n }),\n animate('200ms ease', style({ height: '*', opacity: 1, paddingTop: '*', paddingBottom: '*' }))\n ]),\n transition(':leave', [\n style({ height: '*', opacity: 1, paddingTop: '*', paddingBottom: '*' }),\n animate('200ms ease', style({ height: 0, opacity: 0, paddingTop: 0, paddingBottom: 0 }))\n ])\n ])\n ]\n})\n\nexport class UicAccordionComponent {\n @Input() tabs:UiBtnTab[] = [];\n @Input() activeTab = '';\n @Output() activeTabChange = new EventEmitter<string>();\n\n changeTab(key:string) {\n this.activeTab = this.activeTab === key ? '' : key;\n this.activeTabChange.emit(this.activeTab);\n }\n}\n","<div class=\"accordion-reel\">\r\n @for (item of tabs; track $index) {\r\n <div class=\"accordion-item\">\r\n <div class=\"accordion-header\" (click)=\"changeTab(item.key)\">\r\n <div class=\"accordion-header-title\"> \r\n @if (item.icon) {\r\n <i [class]=\"item.icon\"></i> \r\n }\r\n {{item.text}} \r\n </div>\r\n @if (item.subtitle) {\r\n <div class=\"accordion-header-subtitle\">{{item.subtitle}}</div>\r\n }\r\n </div>\r\n @if (activeTab == item.key) {\r\n <div class=\"accordion-body\" [@accordionBody]>\r\n <ng-content></ng-content>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { AfterViewChecked, Component, ElementRef, EventEmitter, inject, Input, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { UicSkeletonLoaderComponent } from '../skeleton-loader/skeleton-loader.component';\r\nimport { UicSwichComponent } from '../inputs/toggle-button/toggle-button.component';\r\nimport { UicPushAlertService } from '../../services/push-alert.service';\r\nimport { UicInputComponent } from '../inputs/input/input.component';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\nimport { UicTranslateService } from '../../services/translate.service';\r\n\r\n@Component({\r\n selector: 'ui-tree-admin',\r\n imports: [\r\n UicInputComponent,\r\n UicButtonComponent,\r\n UicSkeletonLoaderComponent,\r\n UicSwichComponent,\r\n UicTranslatePipe\r\n ],\r\n templateUrl: './tree-admin.component.html',\r\n styleUrl: './tree-admin.component.scss'\r\n})\r\nexport class UicTreeAdminComponent implements AfterViewChecked {\r\n\r\n @Input() searchEnabled = true;\r\n @Input() loading = false;\r\n @Input() emptyMessage = 'tree.empty';\r\n @Input() duplicateNameMessage = 'tree.duplicate_name';\r\n @Output() edit = new EventEmitter<TreeActionEvent>();\r\n @Output() remove = new EventEmitter<TreeActionEvent>();\r\n @Output() deactivate = new EventEmitter<TreeToggleEvent>();\r\n @Output() nameChange = new EventEmitter<TreeNameChangeEvent>();\r\n @Output() create = new EventEmitter<TreeCreateRequestEvent>();\r\n\r\n @Input() tree:TreeData[] = [\r\n {\r\n id:0,\r\n name:'Sin hijos',\r\n enabled:true\r\n },\r\n {\r\n id:1,\r\n name:'Equipo A',\r\n enabled: true,\r\n children:[\r\n {\r\n id:10,\r\n enabled: true,\r\n name:'Miembro 1'\r\n },\r\n {\r\n id:11,\r\n enabled: true,\r\n name:'Miembro 3',\r\n tag:'Admin',\r\n tagColor:'red'\r\n },\r\n {\r\n id:12,\r\n enabled: true,\r\n name:'Miembro 5'\r\n },\r\n {\r\n id:13,\r\n enabled: true,\r\n name:'Miembro 10'\r\n },\r\n {\r\n id:14,\r\n enabled: true,\r\n name:'Miembro 9'\r\n }\r\n ]\r\n },\r\n {\r\n id:2,\r\n name:'Team B',\r\n enabled: true,\r\n children:[\r\n {\r\n id:20,\r\n enabled: true,\r\n name:'Person 1'\r\n },\r\n {\r\n id:21,\r\n enabled: true,\r\n name:'Person 3'\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n @ViewChildren('childNameInput') childNameInputs!: QueryList<ElementRef<HTMLInputElement>>;\r\n @ViewChildren('parentNameInput') parentNameInputs!: QueryList<ElementRef<HTMLInputElement>>;\r\n\r\n private readonly pushAler = inject(UicPushAlertService);\r\n private readonly i18n = inject(UicTranslateService);\r\n\r\n private collapsedIds = new Set<TreeData['id']>();\r\n private editingParentId: TreeData['id'] | null = null;\r\n private editingChildId: TreeData['id'] | null = null;\r\n private pendingFocusParentId: TreeData['id'] | null = null;\r\n private pendingFocusChildId: TreeData['id'] | null = null;\r\n private pendingCreateIds = new Set<TreeData['id']>();\r\n private originalNames = new Map<TreeData['id'], string>();\r\n private tempId = 0;\r\n filterTerm = '';\r\n\r\n ngAfterViewChecked(): void {\r\n this.cleanupPendingCreateIds();\r\n if (this.pendingFocusParentId !== null) {\r\n const targetId = String(this.pendingFocusParentId);\r\n const target = this.parentNameInputs?.find(\r\n (input) => input.nativeElement.dataset['id'] === targetId\r\n );\r\n if (target) {\r\n target.nativeElement.focus();\r\n target.nativeElement.select();\r\n this.pendingFocusParentId = null;\r\n }\r\n }\r\n\r\n if (this.pendingFocusChildId !== null) {\r\n const targetId = String(this.pendingFocusChildId);\r\n const target = this.childNameInputs?.find(\r\n (input) => input.nativeElement.dataset['id'] === targetId\r\n );\r\n if (target) {\r\n target.nativeElement.focus();\r\n target.nativeElement.select();\r\n this.pendingFocusChildId = null;\r\n }\r\n }\r\n }\r\n\r\n isExpanded(item: TreeData): boolean {\r\n return !this.collapsedIds.has(item.id);\r\n }\r\n\r\n toggleItem(item: TreeData): void {\r\n if (this.collapsedIds.has(item.id)) {\r\n this.collapsedIds.delete(item.id);\r\n } else {\r\n this.collapsedIds.add(item.id);\r\n }\r\n }\r\n\r\n startEditParent(item: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n this.editingParentId = item.id;\r\n this.pendingFocusParentId = item.id;\r\n if (!this.originalNames.has(item.id)) {\r\n this.originalNames.set(item.id, item.name);\r\n }\r\n }\r\n\r\n stopEditParent(): void {\r\n this.editingParentId = null;\r\n }\r\n\r\n isEditingParent(item: TreeData): boolean {\r\n return this.editingParentId === item.id;\r\n }\r\n\r\n startEditChild(subitem: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n if (this.pendingCreateIds.has(subitem.id)) {\r\n return;\r\n }\r\n this.editingChildId = subitem.id;\r\n this.pendingFocusChildId = subitem.id;\r\n if (!this.originalNames.has(subitem.id)) {\r\n this.originalNames.set(subitem.id, subitem.name);\r\n }\r\n }\r\n\r\n stopEditChild(): void {\r\n this.editingChildId = null;\r\n }\r\n\r\n isEditingChild(subitem: TreeData): boolean {\r\n return this.editingChildId === subitem.id;\r\n }\r\n\r\n updateParentName(item: TreeData, event: Event): void {\r\n item.name = (event.target as HTMLInputElement).value;\r\n }\r\n\r\n updateChildName(parent: TreeData, subitem: TreeData, event: Event): void {\r\n subitem.name = (event.target as HTMLInputElement).value;\r\n }\r\n\r\n updateFilter(event: Event): void {\r\n this.filterTerm = (event.target as HTMLInputElement).value ?? '';\r\n }\r\n\r\n clearFilter(): void {\r\n this.filterTerm = '';\r\n }\r\n\r\n getVisibleTree(): TreeData[] {\r\n if (!this.hasActiveFilter()) {\r\n return this.tree;\r\n }\r\n return this.tree.filter((item) => this.getFilteredChildren(item).length > 0);\r\n }\r\n\r\n getFilteredChildren(item: TreeData): TreeData[] {\r\n if (!item.children?.length) {\r\n return [];\r\n }\r\n if (!this.hasActiveFilter()) {\r\n return item.children;\r\n }\r\n const term = this.filterTerm.trim().toLowerCase();\r\n return item.children.filter((child) => child.name.toLowerCase().includes(term));\r\n }\r\n\r\n finalizeParentEdit(item: TreeData): void {\r\n const original = this.originalNames.get(item.id);\r\n if (original === undefined || original !== item.name) {\r\n this.nameChange.emit({ kind: 'parent', id: item.id, name: item.name });\r\n }\r\n this.originalNames.delete(item.id);\r\n this.stopEditParent();\r\n }\r\n\r\n finalizeChildEdit(parent: TreeData, subitem: TreeData): void {\r\n const trimmed = subitem.name.trim();\r\n if (!trimmed) {\r\n this.removeChild(parent, subitem);\r\n this.originalNames.delete(subitem.id);\r\n return;\r\n }\r\n subitem.name = trimmed;\r\n const original = this.originalNames.get(subitem.id);\r\n const isNew = this.isNewChild(subitem.id);\r\n \r\n if (isNew) {\r\n if (original !== undefined && original === subitem.name) {\r\n this.originalNames.delete(subitem.id);\r\n this.stopEditChild();\r\n return;\r\n }\r\n if (this.hasDuplicateChildName(parent, subitem)) {\r\n this.pushAler.warning(this.i18n.translate(this.duplicateNameMessage));\r\n this.removeChild(parent, subitem);\r\n this.originalNames.delete(subitem.id);\r\n return;\r\n }\r\n this.pendingCreateIds.add(subitem.id);\r\n this.create.emit({ parentId: parent.id, name: subitem.name, tempId: subitem.id });\r\n } else {\r\n if (original === undefined || original !== subitem.name) {\r\n this.nameChange.emit({ kind: 'child', parentId: parent.id, id: subitem.id, name: subitem.name });\r\n }\r\n }\r\n this.originalNames.delete(subitem.id);\r\n this.stopEditChild();\r\n }\r\n\r\n cancelParentEdit(item: TreeData): void {\r\n const original = this.originalNames.get(item.id);\r\n if (original !== undefined) {\r\n item.name = original;\r\n }\r\n this.originalNames.delete(item.id);\r\n this.stopEditParent();\r\n }\r\n\r\n cancelChildEdit(parent: TreeData, subitem: TreeData): void {\r\n const original = this.originalNames.get(subitem.id);\r\n if (original !== undefined) {\r\n subitem.name = original;\r\n }\r\n this.originalNames.delete(subitem.id);\r\n if (this.isNewChild(subitem.id) && !subitem.name.trim()) {\r\n this.removeChild(parent, subitem);\r\n return;\r\n }\r\n this.stopEditChild();\r\n }\r\n\r\n addSubItem(item: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n if (!item.children) {\r\n item.children = [];\r\n }\r\n const newId = `new-${Date.now()}-${this.tempId++}`;\r\n const newChild: TreeData = { id: newId, name: '', enabled: true };\r\n item.children.unshift(newChild);\r\n this.collapsedIds.delete(item.id);\r\n this.editingChildId = newChild.id;\r\n this.pendingFocusChildId = newChild.id;\r\n }\r\n\r\n emitEditParent(item: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n this.edit.emit({ kind: 'parent', id: item.id });\r\n this.startEditParent(item);\r\n }\r\n\r\n emitEditChild(parent: TreeData, subitem: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n this.edit.emit({ kind: 'child', parentId: parent.id, id: subitem.id });\r\n }\r\n\r\n emitDeleteParent(item: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n this.remove.emit({ kind: 'parent', id: item.id });\r\n }\r\n\r\n emitDeleteChild(parent: TreeData, subitem: TreeData, event?: MouseEvent): void {\r\n event?.stopPropagation();\r\n this.remove.emit({ kind: 'child', parentId: parent.id, id: subitem.id });\r\n }\r\n\r\n emitDeactivateParent(item: TreeData, checked: boolean): void {\r\n item.enabled = checked;\r\n this.deactivate.emit({ kind: 'parent', id: item.id, checked });\r\n }\r\n\r\n emitDeactivateChild(parent: TreeData, subitem: TreeData, checked: boolean): void {\r\n subitem.enabled = checked;\r\n this.deactivate.emit({ kind: 'child', parentId: parent.id, id: subitem.id, checked });\r\n }\r\n\r\n isPendingCreate(subitem: TreeData): boolean {\r\n return this.pendingCreateIds.has(subitem.id);\r\n }\r\n\r\n private removeChild(parent: TreeData, subitem: TreeData): void {\r\n if (!parent.children) {\r\n return;\r\n }\r\n parent.children = parent.children.filter((child) => child.id !== subitem.id);\r\n if (this.editingChildId === subitem.id) {\r\n this.editingChildId = null;\r\n }\r\n this.pendingCreateIds.delete(subitem.id);\r\n }\r\n\r\n private isNewChild(id: TreeData['id']): boolean {\r\n if (id === null || id === undefined) {\r\n return true;\r\n }\r\n if (typeof id === 'string') {\r\n return id.trim() === '' || id.startsWith('new-');\r\n }\r\n return id <= 0;\r\n }\r\n\r\n private hasDuplicateChildName(parent: TreeData, subitem: TreeData): boolean {\r\n const trimmed = subitem.name.trim().toLowerCase();\r\n if (!trimmed || !parent.children) {\r\n return false;\r\n }\r\n return parent.children.some(\r\n (child) => child.id !== subitem.id && child.name.trim().toLowerCase() === trimmed\r\n );\r\n }\r\n\r\n private hasActiveFilter(): boolean {\r\n return this.filterTerm.trim().length > 0;\r\n }\r\n\r\n private cleanupPendingCreateIds(): void {\r\n if (!this.pendingCreateIds.size) {\r\n return;\r\n }\r\n const idsInTree = new Set<TreeData['id']>();\r\n for (const parent of this.tree) {\r\n if (parent.children?.length) {\r\n for (const child of parent.children) {\r\n idsInTree.add(child.id);\r\n }\r\n }\r\n }\r\n for (const pendingId of Array.from(this.pendingCreateIds)) {\r\n if (!idsInTree.has(pendingId)) {\r\n this.pendingCreateIds.delete(pendingId);\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\nexport interface TreeData{\r\n id: number | string;\r\n name: string;\r\n enabled: boolean;\r\n tag?: string;\r\n tagColor?: 'yellow' | 'red' | 'green' | 'blue';\r\n children?:TreeData[];\r\n}\r\n\r\nexport interface TreeActionEvent {\r\n kind: 'parent' | 'child';\r\n id: number | string;\r\n parentId?: number | string;\r\n}\r\n\r\nexport interface TreeToggleEvent extends TreeActionEvent {\r\n checked: boolean;\r\n}\r\n\r\nexport interface TreeNameChangeEvent extends TreeActionEvent {\r\n name: string;\r\n}\r\n\r\nexport interface TreeCreateRequestEvent {\r\n parentId: number | string;\r\n name: string;\r\n tempId: number | string;\r\n}\r\n","@if (loading) {\r\n <div class=\"tree-skeleton\">\r\n <ui-skeleton-loader [inputs]=\"4\" [cols]=\"1\"></ui-skeleton-loader>\r\n </div>\r\n} @else {\r\n @if (searchEnabled) {\r\n <div class=\"filter-bar\">\r\n {{'tree.search_label' | uicTranslate}}\r\n <ui-input>\r\n <input #inp [placeholder]=\"'tree.search_placeholder' | uicTranslate\" [value]=\"filterTerm\" (input)=\"updateFilter($event)\">\r\n </ui-input>\r\n <ui-button\r\n [iconOnly]=\"true\"\r\n icon=\"ri-eraser-line\"\r\n type=\"bordered\"\r\n color=\"black\"\r\n [disabled]=\"!filterTerm\"\r\n (click)=\"clearFilter(); inp.focus()\"\r\n ></ui-button>\r\n </div>\r\n }\r\n @for (item of getVisibleTree(); track item.id) {\r\n <div class=\"tree-item\" [class.is-collapsed]=\"!isExpanded(item)\">\r\n <div class=\"tree-header\" (click)=\"toggleItem(item)\">\r\n <i class=\"ri-arrow-down-s-line tree-arrow\" [class.is-collapsed]=\"!isExpanded(item)\"></i>\r\n <div class=\"tree-header-name\">\r\n @if (isEditingParent(item)) {\r\n <input\r\n #parentNameInput\r\n class=\"tree-name-input\"\r\n [attr.data-id]=\"item.id\"\r\n [value]=\"item.name\"\r\n (input)=\"updateParentName(item, $event)\"\r\n (blur)=\"finalizeParentEdit(item)\"\r\n (keydown.enter)=\"finalizeParentEdit(item)\"\r\n (keydown.escape)=\"cancelParentEdit(item)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n } @else {\r\n <div class=\"tree-name-text\" (click)=\"startEditParent(item, $event)\">\r\n {{item.name}}\r\n </div>\r\n }\r\n <span>{{item.children?.length || 0}}</span>\r\n </div>\r\n <div>\r\n <ui-switch\r\n [checked]=\"item.enabled\"\r\n (click)=\"$event.stopPropagation()\"\r\n (checkedChange)=\"emitDeactivateParent(item, $event)\"\r\n ></ui-switch>\r\n </div>\r\n <ui-button (click)=\"addSubItem(item, $event)\" icon=\"ri-add-line\" type=\"ghost\" [iconOnly]=\"true\" size=\"s\"></ui-button>\r\n <ui-button (click)=\"emitEditParent(item, $event)\" icon=\"ri-edit-line\" type=\"ghost\" [iconOnly]=\"true\" size=\"s\"></ui-button>\r\n @if (!item.children?.length) {\r\n <ui-button (click)=\"emitDeleteParent(item, $event)\" icon=\"ri-delete-bin-line\" type=\"ghost\" [iconOnly]=\"true\" size=\"s\"></ui-button>\r\n }\r\n </div>\r\n <div class=\"tree-body\">\r\n @if (getFilteredChildren(item).length) {\r\n @for (subitem of getFilteredChildren(item); track subitem.id) {\r\n <div\r\n class=\"tree-subitem\"\r\n [class.is-disabled]=\"!subitem.enabled\"\r\n [class.is-pending]=\"isPendingCreate(subitem)\"\r\n [class.is-parent-disabled]=\"!item.enabled\"\r\n >\r\n <div class=\"tree-subitem-name\">\r\n <i\r\n class=\"ri-circle-fill tree-subitem-status\"\r\n [class.is-enabled]=\"subitem.enabled\"\r\n [class.is-disabled]=\"!subitem.enabled\"\r\n ></i>\r\n @if (isEditingChild(subitem)) {\r\n <input\r\n #childNameInput\r\n class=\"tree-name-input tree-name-input--sub\"\r\n [attr.data-id]=\"subitem.id\"\r\n [value]=\"subitem.name\"\r\n (input)=\"updateChildName(item, subitem, $event)\"\r\n (blur)=\"finalizeChildEdit(item, subitem)\"\r\n (keydown.enter)=\"finalizeChildEdit(item, subitem)\"\r\n (keydown.escape)=\"cancelChildEdit(item, subitem)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n } @else {\r\n <span\r\n class=\"tree-name-text\"\r\n (click)=\"!isPendingCreate(subitem) && startEditChild(subitem, $event)\"\r\n >{{subitem.name}}</span> \r\n @if (subitem.tag) {\r\n <span class=\"tree-tag tag-{{subitem.tagColor}}\" >{{subitem.tag}}</span>\r\n }\r\n }\r\n </div>\r\n <div class=\"tree-subitem-actions\">\r\n <ui-switch\r\n [checked]=\"subitem.enabled\"\r\n [disabled]=\"isPendingCreate(subitem)\"\r\n (checkedChange)=\"emitDeactivateChild(item, subitem, $event)\"\r\n ></ui-switch>\r\n <ui-button\r\n (click)=\"emitEditChild(item, subitem, $event)\"\r\n [disabled]=\"isPendingCreate(subitem)\"\r\n icon=\"ri-edit-line\"\r\n type=\"ghost\"\r\n [iconOnly]=\"true\"\r\n size=\"s\"\r\n ></ui-button>\r\n <ui-button \r\n (click)=\"emitDeleteChild(item, subitem, $event)\" \r\n icon=\"ri-delete-bin-line\" \r\n [disabled]=\"isPendingCreate(subitem)\"\r\n type=\"ghost\" \r\n [iconOnly]=\"true\" size=\"s\"></ui-button>\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"tree-empty\">\r\n {{emptyMessage | uicTranslate}}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n}\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, ElementRef, EventEmitter, inject, input, Input, Output, signal } from '@angular/core';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { ActionMenuOption, UicActionButtonComponent } from '../uic-action-button/uic-action-button.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\nimport { UicTinyAlertService } from '../../services/tiny-alert.service';\r\nimport { UicToolTipDirective } from '../../directives/tool-tip.directive';\r\nimport { UicTranslateService } from '../../services/translate.service';\r\n\r\nconst DEFAULT_CONFIG: EditableTableConfig = {\r\n canAddRow: true,\r\n canDeleteRow: true,\r\n canAddColumn: true,\r\n canDeleteColumn: true,\r\n resizeableColumns: true\r\n};\r\n\r\n@Component({\r\n selector: 'ui-editable-table',\r\n imports: [\r\n CommonModule,\r\n UicButtonComponent,\r\n UicActionButtonComponent,\r\n FormsModule,\r\n UicTranslatePipe,\r\n UicToolTipDirective\r\n],\r\n templateUrl: './editable-table.component.html',\r\n styleUrl: './editable-table.component.scss'\r\n})\r\nexport class UicEditableTableComponent {\r\n readonly actionColumnWidth = 30;\r\n\r\n config = input<Partial<EditableTableConfig>>({});\r\n columnsConfig = input<EditableTableColumnsConfig>({});\r\n\r\n resolvedConfig = computed<EditableTableConfig>(() => ({\r\n ...DEFAULT_CONFIG,\r\n ...this.config()\r\n }));\r\n\r\n rowActions = computed<ActionMenuOption[]>(() => {\r\n const actions: ActionMenuOption[] = [];\r\n if (this.resolvedConfig().canAddRow) {\r\n actions.push(\r\n { id: 'TOP', label: 'editable_table.add_row_above' },\r\n { id: 'BOTTOM', label: 'editable_table.add_row_below' }\r\n );\r\n }\r\n if (this.resolvedConfig().canDeleteRow) {\r\n actions.push({ id: 'DELETE', label: 'editable_table.delete_row' });\r\n }\r\n return actions;\r\n });\r\n\r\n constructor(private readonly hostElement: ElementRef<HTMLElement>) {}\r\n private _record: Array<Record<string, unknown>> = [];\r\n private readonly tinyAlert = inject(UicTinyAlertService);\r\n private readonly translateService = inject(UicTranslateService);\r\n private readonly _visibleRowsStep = signal(50);\r\n private readonly rowsSignal = signal<Array<Record<string, unknown>>>([]);\r\n private readonly headersSignal = signal<string[]>([]);\r\n private readonly visibleRowsCountSignal = signal(0);\r\n private readonly columnWidthsSignal = signal<number[]>([]);\r\n private readonly columnConfigsSignal = signal<Record<string, EditableTableColumnConfig>>({});\r\n\r\n @Input()\r\n set visibleRowsStep(value: number | null | undefined) {\r\n const numericValue = Number(value);\r\n this._visibleRowsStep.set(Number.isFinite(numericValue) && numericValue > 0\r\n ? Math.floor(numericValue)\r\n : 50);\r\n this.syncVisibleRows(false);\r\n }\r\n\r\n get visibleRowsStep(): number {\r\n return this._visibleRowsStep();\r\n }\r\n\r\n @Input()\r\n set record(value: Array<Record<string, unknown>> | null | undefined) {\r\n const normalizedRows = Array.isArray(value)\r\n ? value.map((row) => ({ ...row }))\r\n : [];\r\n\r\n this._record = normalizedRows;\r\n this.rows = normalizedRows;\r\n this.headers = this.buildHeadersFromRows(this.rows);\r\n this.syncColumnWidths(this.headers.length);\r\n this.syncVisibleRows(false);\r\n }\r\n\r\n get record(): Array<Record<string, unknown>> {\r\n return this._record;\r\n }\r\n\r\n get headers(): string[] {\r\n return this.headersSignal();\r\n }\r\n\r\n set headers(value: string[]) {\r\n this.headersSignal.set(value);\r\n }\r\n\r\n get rows(): Array<Record<string, unknown>> {\r\n return this.rowsSignal();\r\n }\r\n\r\n set rows(value: Array<Record<string, unknown>>) {\r\n this.rowsSignal.set(value);\r\n }\r\n\r\n get visibleRowsCount(): number {\r\n return this.visibleRowsCountSignal();\r\n }\r\n\r\n set visibleRowsCount(value: number) {\r\n this.visibleRowsCountSignal.set(value);\r\n }\r\n\r\n get columnWidths(): number[] {\r\n return this.columnWidthsSignal();\r\n }\r\n\r\n set columnWidths(value: number[]) {\r\n this.columnWidthsSignal.set(value);\r\n }\r\n readonly defaultColumnWidth = 160;\r\n private readonly minColumnWidth = 80;\r\n private resizingColumn: number | null = null;\r\n\r\n @Output() recordChange = new EventEmitter<Array<Record<string, unknown>>>();\r\n\r\n readonly visibleRows = computed(() => this.rows.slice(0, this.visibleRowsCount));\r\n readonly hasMoreRows = computed(() => this.visibleRowsCount < this.rows.length);\r\n\r\n async deleteColum(header: string): Promise<void> {\r\n const hasData = this.hasDataInColumn(header);\r\n if (hasData) {\r\n const response = await this.tinyAlert.showAlert({\r\n body: this.translateService.translate(\r\n 'editable_table.delete_column_with_data_warning',\r\n { column_name: header }\r\n ),\r\n title: 'editable_table.delete_column',\r\n okButtonText: 'editable_table.delete',\r\n cancelButtonText: 'common.cancel',\r\n okButtonColor: 'red',\r\n showCancelButton: true,\r\n });\r\n\r\n if (!response.value) {\r\n return;\r\n }\r\n }\r\n\r\n const headerIndex = this.headers.indexOf(header);\r\n this.headers = this.headers.filter((item) => item !== header);\r\n this.columnConfigsSignal.update((configs) => {\r\n const next = { ...configs };\r\n delete next[header];\r\n return next;\r\n });\r\n if (headerIndex >= 0) {\r\n this.columnWidths = [\r\n ...this.columnWidths.slice(0, headerIndex),\r\n ...this.columnWidths.slice(headerIndex + 1)\r\n ];\r\n }\r\n this.rows = this.rows.map((row) => {\r\n const { [header]: _removed, ...rest } = row;\r\n return rest;\r\n });\r\n this.emitTableDataChanges();\r\n }\r\n\r\n private hasDataInColumn(header: string): boolean {\r\n return this.rows.some((row) => {\r\n const rawValue = row[header];\r\n if (rawValue === null || rawValue === undefined) {\r\n return false;\r\n }\r\n\r\n return String(rawValue).trim() !== '';\r\n });\r\n }\r\n\r\n pendingColumnIndex: number | null = null;\r\n pendingColumnName = '';\r\n private confirmingPendingColumn = false;\r\n\r\n addColumAfert(idx:number): void {\r\n if (!this.resolvedConfig().canAddColumn) {\r\n return;\r\n }\r\n\r\n const insertAt = Math.min(Math.max(idx + 1, 0), this.headers.length);\r\n\r\n if (this.pendingColumnIndex !== null) {\r\n this.cancelPendingColumn();\r\n }\r\n\r\n this.pendingColumnIndex = insertAt;\r\n this.pendingColumnName = '';\r\n this.headers = [\r\n ...this.headers.slice(0, insertAt),\r\n '',\r\n ...this.headers.slice(insertAt),\r\n ];\r\n this.columnWidths = [\r\n ...this.columnWidths.slice(0, insertAt),\r\n this.defaultColumnWidth,\r\n ...this.columnWidths.slice(insertAt)\r\n ];\r\n\r\n setTimeout(() => {\r\n this.focusPendingColumnInput();\r\n });\r\n }\r\n\r\n async onPendingColumnNameBlur(): Promise<void> {\r\n if (this.pendingColumnIndex === null || this.confirmingPendingColumn) {\r\n return;\r\n }\r\n\r\n const newName = this.pendingColumnName.trim();\r\n if (!newName) {\r\n this.cancelPendingColumn();\r\n return;\r\n }\r\n\r\n this.confirmingPendingColumn = true;\r\n try {\r\n const response = await this.tinyAlert.showAlert({\r\n body: 'editable_table.save_or_discard_column',\r\n title: 'editable_table.save_column',\r\n okButtonText: 'editable_table.save',\r\n cancelButtonText: 'editable_table.delete',\r\n showCancelButton: true,\r\n okButtonColor: 'green'\r\n });\r\n\r\n if (response.value) {\r\n this.confirmPendingColumnName();\r\n } else {\r\n this.cancelPendingColumn();\r\n }\r\n } finally {\r\n setTimeout(() => {\r\n this.confirmingPendingColumn = false;\r\n });\r\n }\r\n }\r\n\r\n onPendingColumnCheckMouseDown(): void {\r\n this.confirmingPendingColumn = true;\r\n }\r\n\r\n onPendingColumnNameKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n this.confirmPendingColumnName();\r\n return;\r\n }\r\n\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.cancelPendingColumn();\r\n return;\r\n }\r\n }\r\n\r\n async confirmPendingColumnName(): Promise<void> {\r\n if (this.pendingColumnIndex === null) {\r\n return;\r\n }\r\n\r\n const newName = this.pendingColumnName.trim();\r\n if (!newName) {\r\n this.cancelPendingColumn();\r\n return;\r\n }\r\n\r\n const exists = this.headers.some((header, index) =>\r\n index !== this.pendingColumnIndex && header.toLowerCase() === newName.toLowerCase()\r\n );\r\n if (exists) {\r\n this.confirmingPendingColumn = true;\r\n await this.tinyAlert.error('editable_table.column_name_must_be_unique');\r\n setTimeout(() => {\r\n this.confirmingPendingColumn = false;\r\n });\r\n setTimeout(() => {\r\n this.focusPendingColumnInput();\r\n });\r\n return;\r\n }\r\n\r\n this.headers = this.headers.map((header, index) => {\r\n if (index === this.pendingColumnIndex) {\r\n return newName;\r\n }\r\n return header;\r\n });\r\n\r\n this.rows = this.rows.map((row) => ({\r\n ...row,\r\n [newName]: ''\r\n }));\r\n this.columnConfigsSignal.update((configs) => ({\r\n ...configs,\r\n [newName]: this.normalizeProvidedColumnConfig(this.columnsConfig()[newName])\r\n }));\r\n\r\n this.pendingColumnIndex = null;\r\n this.pendingColumnName = '';\r\n this.emitTableDataChanges();\r\n }\r\n\r\n onPendingColumnNameChange(value: string): void {\r\n this.pendingColumnName = value;\r\n }\r\n\r\n cancelPendingColumn(): void {\r\n if (this.pendingColumnIndex === null) {\r\n return;\r\n }\r\n\r\n this.headers = [\r\n ...this.headers.slice(0, this.pendingColumnIndex),\r\n ...this.headers.slice(this.pendingColumnIndex + 1)\r\n ];\r\n this.columnWidths = [\r\n ...this.columnWidths.slice(0, this.pendingColumnIndex),\r\n ...this.columnWidths.slice(this.pendingColumnIndex + 1)\r\n ];\r\n\r\n this.pendingColumnIndex = null;\r\n this.pendingColumnName = '';\r\n }\r\n\r\n startColumnResize(event: PointerEvent, headerIndex: number): void {\r\n event.preventDefault();\r\n\r\n const startX = event.clientX;\r\n const startWidth = this.columnWidths[headerIndex] ?? this.defaultColumnWidth;\r\n const pointerId = event.pointerId;\r\n const moveTarget = event.currentTarget as HTMLElement;\r\n\r\n if (!moveTarget) {\r\n return;\r\n }\r\n\r\n this.resizingColumn = headerIndex;\r\n moveTarget.setPointerCapture(pointerId);\r\n\r\n const onMove = (moveEvent: PointerEvent): void => {\r\n if (this.resizingColumn !== headerIndex) {\r\n return;\r\n }\r\n\r\n const nextWidth = Math.max(\r\n this.minColumnWidth,\r\n Math.floor(startWidth + (moveEvent.clientX - startX))\r\n );\r\n const nextColumnWidths = [...this.columnWidths];\r\n nextColumnWidths[headerIndex] = nextWidth;\r\n this.columnWidths = nextColumnWidths;\r\n };\r\n\r\n const onUp = (): void => {\r\n this.resizingColumn = null;\r\n moveTarget.releasePointerCapture(pointerId);\r\n window.removeEventListener('pointermove', onMove);\r\n window.removeEventListener('pointerup', onUp);\r\n };\r\n\r\n window.addEventListener('pointermove', onMove);\r\n window.addEventListener('pointerup', onUp);\r\n }\r\n\r\n readonly columnInputTypeByHeader = computed<Record<string, EditableTableInputType>>(() => {\r\n const headers = this.headers;\r\n const externalConfig = this.columnsConfig();\r\n const localConfig = this.columnConfigsSignal();\r\n\r\n const values: Record<string, EditableTableInputType> = {};\r\n headers.forEach((header) => {\r\n values[header] = this.normalizeColumnInputType(externalConfig[header]?.type)\r\n ?? this.normalizeColumnInputType(localConfig[header]?.type)\r\n ?? 'text';\r\n });\r\n return values;\r\n });\r\n\r\n readonly columnDisabledByHeader = computed<Record<string, boolean>>(() => {\r\n const headers = this.headers;\r\n const externalConfig = this.columnsConfig();\r\n const localConfig = this.columnConfigsSignal();\r\n\r\n const values: Record<string, boolean> = {};\r\n headers.forEach((header) => {\r\n const columnConfig = externalConfig[header] ?? localConfig[header];\r\n values[header] = columnConfig?.disabled ?? false;\r\n });\r\n return values;\r\n });\r\n\r\n private syncColumnWidths(columnCount: number): void {\r\n this.columnWidths = Array.from({ length: columnCount }, (_, index) => {\r\n return this.columnWidths[index] ?? this.defaultColumnWidth;\r\n });\r\n }\r\n\r\n private normalizeProvidedColumnConfig(\r\n config: EditableTableColumnConfig | null | undefined\r\n ): EditableTableColumnConfig {\r\n const normalizedType = this.normalizeColumnInputType(config?.type);\r\n\r\n return {\r\n disabled: config?.disabled ?? false,\r\n type: normalizedType ?? 'text'\r\n };\r\n }\r\n\r\n private normalizeColumnInputType(\r\n type: EditableTableInputType | string | null | undefined\r\n ): EditableTableInputType | null {\r\n if (\r\n type === 'text' ||\r\n type === 'number' ||\r\n type === 'date' ||\r\n type === 'email' ||\r\n type === 'password' ||\r\n type === 'search' ||\r\n type === 'tel' ||\r\n type === 'url' ||\r\n type === 'time' ||\r\n type === 'datetime-local' ||\r\n type === 'month'\r\n ) {\r\n return type;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n onCellBlur(): void {\r\n this.emitTableDataChanges();\r\n }\r\n\r\n onCellKeydown(event: KeyboardEvent, indexRows: number, indexCols: number): void {\r\n let targetRow = indexRows;\r\n let targetCol = indexCols;\r\n\r\n if (event.key === 'ArrowUp') {\r\n targetRow = indexRows - 1;\r\n } else if (event.key === 'ArrowDown') {\r\n targetRow = indexRows + 1;\r\n } else if (event.key === 'ArrowLeft') {\r\n targetCol = indexCols - 1;\r\n } else if (event.key === 'ArrowRight') {\r\n targetCol = indexCols + 1;\r\n } else if (event.key === 'Escape') {\r\n (event.target as HTMLInputElement).blur();\r\n return;\r\n } else {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n if (targetRow < 0 || targetRow >= this.visibleRowsCount || targetCol < 0 || targetCol >= this.headers.length) {\r\n return;\r\n }\r\n\r\n this.focusCell(targetRow, targetCol);\r\n }\r\n\r\n handleRowAction(actionId: string, rowIndex: number): void {\r\n if (actionId === 'DELETE') {\r\n this.deleteRow(rowIndex);\r\n return;\r\n }\r\n\r\n this.addEmptyRow(rowIndex, actionId);\r\n }\r\n\r\n showMoreRows(): void {\r\n this.visibleRowsCount = Math.min(this.visibleRowsCount + this.visibleRowsStep, this.rows.length);\r\n }\r\n\r\n async deleteRow(index: number): Promise<void> {\r\n if (index < 0 || index >= this.rows.length) {\r\n return;\r\n }\r\n\r\n const row = this.rows[index];\r\n const hasData = this.hasDataInRow(row);\r\n if (hasData) {\r\n const response = await this.tinyAlert.showAlert({\r\n body: this.translateService.translate('editable_table.delete_row_with_data_warning'),\r\n title: 'editable_table.delete_row',\r\n okButtonText: 'editable_table.delete',\r\n cancelButtonText: 'common.cancel',\r\n okButtonColor: 'red',\r\n showCancelButton: true,\r\n });\r\n\r\n if (!response.value) {\r\n return;\r\n }\r\n }\r\n\r\n this.rows = this.rows.filter((_, i) => i !== index);\r\n this.emitTableDataChanges();\r\n }\r\n\r\n private hasDataInRow(row: Record<string, unknown>): boolean {\r\n return Object.values(row).some((value) => {\r\n if (value === null || value === undefined) {\r\n return false;\r\n }\r\n\r\n return String(value).trim() !== '';\r\n });\r\n }\r\n\r\n addEmptyRow(index: number, position: string): void {\r\n const emptyRow: Record<string, unknown> = {};\r\n this.headers.forEach((header) => {\r\n emptyRow[header] = '';\r\n });\r\n\r\n const normalizedPosition = position.toLowerCase();\r\n const targetIndex = normalizedPosition === 'top' ? index : index + 1;\r\n const insertIndex = Math.min(Math.max(targetIndex, 0), this.rows.length);\r\n\r\n this.rows = [\r\n ...this.rows.slice(0, insertIndex),\r\n emptyRow,\r\n ...this.rows.slice(insertIndex)\r\n ];\r\n this.emitTableDataChanges();\r\n }\r\n\r\n private emitTableDataChanges(resetVisibleRows = false): void {\r\n const nextValue = this.rows.map((row) => ({ ...row }));\r\n this._record = nextValue;\r\n this.syncVisibleRows(resetVisibleRows);\r\n this.recordChange.emit(nextValue);\r\n }\r\n\r\n private focusCell(row: number, col: number): void {\r\n const cellInput = this.hostElement.nativeElement.querySelector<HTMLInputElement>(\r\n `input[data-row=\"${row}\"][data-col=\"${col}\"]`\r\n );\r\n cellInput?.focus();\r\n }\r\n\r\n private focusPendingColumnInput(): void {\r\n if (this.pendingColumnIndex === null) {\r\n return;\r\n }\r\n\r\n const input = this.hostElement.nativeElement.querySelector<HTMLInputElement>(\r\n `input[data-new-col=\"${this.pendingColumnIndex}\"]`\r\n );\r\n input?.focus();\r\n }\r\n\r\n private buildHeadersFromRows(rows: Array<Record<string, unknown>>): string[] {\r\n const keys = new Set<string>();\r\n\r\n rows.forEach((row) => {\r\n Object.keys(row).forEach((key) => keys.add(key));\r\n });\r\n\r\n return Array.from(keys);\r\n }\r\n\r\n private syncVisibleRows(reset: boolean): void {\r\n const totalRows = this.rows.length;\r\n if (totalRows === 0) {\r\n this.visibleRowsCount = 0;\r\n return;\r\n }\r\n\r\n const initialVisibleRows = Math.min(this.visibleRowsStep, totalRows);\r\n if (reset || this.visibleRowsCount === 0) {\r\n this.visibleRowsCount = initialVisibleRows;\r\n return;\r\n }\r\n\r\n if (totalRows <= this.visibleRowsStep) {\r\n this.visibleRowsCount = totalRows;\r\n return;\r\n }\r\n\r\n this.visibleRowsCount = Math.min(this.visibleRowsCount, totalRows);\r\n }\r\n}\r\n\r\nexport type EditableTableConfig = {\r\n canAddRow: boolean;\r\n canDeleteRow: boolean;\r\n canAddColumn: boolean;\r\n canDeleteColumn: boolean;\r\n resizeableColumns: boolean;\r\n};\r\n\r\nexport type EditableTableInputType = 'text' | 'number' | 'date' | 'email' | 'password' | 'search' | 'tel' | 'url' | 'time' | 'datetime-local' | 'month';\r\nexport type EditableTableColumnConfig = {\r\n type?: EditableTableInputType;\r\n disabled?: boolean;\r\n};\r\nexport type EditableTableColumnsConfig = Record<string, EditableTableColumnConfig>;\r\n","<div class=\"xlstable-overflow\">\n @if (headers.length > 0) {\n <table class=\"xls-table\">\n <colgroup>\n @if (rowActions().length > 0) {\n <col class=\"action-col\" [style.width.px]=\"actionColumnWidth\">\n }\n @for (header of headers; track $index) {\n <col [style.width.px]=\"columnWidths[$index]\">\n }\n </colgroup>\n <thead>\n <tr>\n @if (rowActions().length > 0) {\n <th class=\"action-col\"></th>\n }\n @for (header of headers; track $index) {\n <th>\n @if (pendingColumnIndex === $index) {\n <div class=\"hea-th hea-th-edit\">\n <input\n class=\"new-col-name\"\n type=\"text\"\n [(ngModel)]=\"pendingColumnName\"\n (ngModelChange)=\"onPendingColumnNameChange($event)\"\n (blur)=\"onPendingColumnNameBlur()\"\n (keydown)=\"onPendingColumnNameKeydown($event)\"\n [attr.data-new-col]=\"$index\">\n @if (pendingColumnName.trim()) {\n <ui-button (mousedown)=\"onPendingColumnCheckMouseDown()\" (click)=\"confirmPendingColumnName()\" icon=\"ri-check-line\" color=\"green\" size=\"s\" [iconOnly]=\"true\"></ui-button>\n }\n </div>\n } @else {\n <div class=\"hea-th\">\n <div style=\"flex: 1 1; min-width: 0;\">\n {{ header }} \n </div>\n \n @if (resolvedConfig().canAddColumn) {\n <ui-button [uiTooltip]=\"'editable_table.add_column' | uicTranslate\" (click)=\"addColumAfert($index)\" icon=\"ri-insert-column-right\" size=\"s\" [iconOnly]=\"true\"></ui-button> \n }\n @if (resolvedConfig().canDeleteColumn){\n <ui-button [uiTooltip]=\"'editable_table.delete_column' | uicTranslate\" (click)=\"deleteColum(header)\" icon=\"ri-delete-bin-line\" color=\"red\" size=\"s\" [iconOnly]=\"true\"></ui-button>\n }\n @if (resolvedConfig().resizeableColumns) {\n <span\n class=\"column-resize-handle\"\n (pointerdown)=\"startColumnResize($event, $index)\"\n ></span>\n }\n\n </div>\n }\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of visibleRows(); track $index; let i = $index) {\n <tr>\n @if (rowActions().length > 0) {\n <td class=\"action-col\">\n <div class=\"action-cell\">\n <ui-action-button [options]=\"rowActions()\" (optionSelected)=\"handleRowAction($event.id, i)\"></ui-action-button>\n </div>\n </td>\n }\n @for (header of headers; track $index; let col = $index) {\n <td>\n <input\n [disabled]=\"columnDisabledByHeader()[header]\"\n [type]=\"columnInputTypeByHeader()[header]\"\n [attr.data-row]=\"i\"\n [attr.data-col]=\"col\"\n [(ngModel)]=\"row[header]\"\n (blur)=\"onCellBlur()\"\n (keydown)=\"onCellKeydown($event, i, col)\">\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (hasMoreRows()) {\n <div class=\"show-more\">\n <ui-button color=\"black\" type=\"bordered\" size=\"m\" (click)=\"showMoreRows()\">\n {{'excel_table.see_more' | uicTranslate}}\n </ui-button>\n </div>\n }\n <div class=\"table-counter\">\n {{'excel_table.counter_text' | uicTranslate:{shown: visibleRows().length, total: rows.length} }}\n </div>\n } @else{\n <div class=\"empty-msg\"> {{'excel_table.empty_message' | uicTranslate}} </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { UicButtonComponent } from '../button/button.component';\nimport * as XLSX from 'xlsx';\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\nimport { UicEditableTableComponent } from '../editable-table/editable-table.component';\n\n@Component({\n selector: 'ui-excel-table',\n imports: [\n CommonModule,\n UicButtonComponent,\n UicTranslatePipe,\n UicEditableTableComponent\n ],\n templateUrl: './excel-table.component.html',\n styleUrl: './excel-table.component.scss'\n})\nexport class UicExcelTableComponent {\n @Input() headerFormat: 'lowercase' | 'uppercase' | 'none' = 'none';\n @Input() title = '';\n\n private _visibleRowsStep = 50;\n private _record: Array<Record<string, unknown>> = [];\n\n @Input()\n set visibleRowsStep(value: number | null | undefined) {\n const numericValue = Number(value);\n this._visibleRowsStep = Number.isFinite(numericValue) && numericValue > 0\n ? Math.floor(numericValue)\n : 50;\n }\n\n get visibleRowsStep(): number {\n return this._visibleRowsStep;\n }\n\n @Input()\n set record(value: Array<Record<string, unknown>> | null | undefined) {\n const normalizedRows = Array.isArray(value)\n ? value.map((row) => ({ ...row }))\n : [];\n\n this._record = normalizedRows;\n }\n\n get record(): Array<Record<string, unknown>> {\n return this._record;\n }\n\n fileName = '';\n @Output() recordChange = new EventEmitter<Array<Record<string, unknown>>>();\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (!input.files || input.files.length === 0) {\n return;\n }\n\n const file = input.files[0];\n this.fileName = file.name;\n const reader = new FileReader();\n\n reader.onload = () => {\n const buffer = reader.result as ArrayBuffer;\n const data = new Uint8Array(buffer);\n const workbook = XLSX.read(data, { type: 'array' });\n const sheetName = workbook.SheetNames[0];\n if (!sheetName) {\n this.resetData();\n return;\n }\n\n const sheet = workbook.Sheets[sheetName];\n const sheetData = XLSX.utils.sheet_to_json(sheet, {\n header: 1,\n defval: ''\n }) as unknown[][];\n\n if (!sheetData || sheetData.length === 0) {\n this.resetData();\n return;\n }\n\n const headerRow = sheetData[0] as unknown[];\n const columnCount = Math.max(\n headerRow.length,\n ...sheetData.map((row) => row.length)\n );\n\n const headerFormat = this.normalizeHeaderFormat(this.headerFormat);\n const rawHeaders = Array.from({ length: columnCount }, (_, index) => {\n const value = headerRow[index];\n const header = value === undefined || value === null ? '' : String(value).trim();\n return header !== '' ? header : `Col ${index + 1}`;\n });\n const headers = rawHeaders.map((header) => this.formatHeader(header, headerFormat));\n\n const dataRows = sheetData.slice(1);\n const rows = dataRows.map((row) => {\n const record: Record<string, unknown> = {};\n headers.forEach((header, index) => {\n record[header] = row[index] ?? '';\n });\n return record;\n });\n\n this._record = rows;\n this.recordChange.emit(rows.map((row) => ({ ...row })));\n };\n\n reader.readAsArrayBuffer(file);\n input.value = '';\n }\n\n onEditableRecordChange(value: Array<Record<string, unknown>>): void {\n const normalizedRows = value.map((row) => ({ ...row }));\n this._record = normalizedRows;\n this.recordChange.emit(normalizedRows);\n }\n\n resetData(): void {\n this._record = [];\n this.recordChange.emit([]);\n }\n\n private normalizeHeaderFormat(value: string): 'lowercase' | 'uppercase' | 'none' {\n if (value === 'lowercase' || value === 'uppercase' || value === 'none') {\n return value;\n }\n\n return 'none';\n }\n\n private formatHeader(header: string, format: 'lowercase' | 'uppercase' | 'none'): string {\n if (format === 'uppercase') {\n return header.toUpperCase();\n }\n\n if (format === 'lowercase') {\n return header.toLowerCase();\n }\n\n return header;\n }\n}\n","<input\r\n#fileInput\r\ntype=\"file\"\r\naccept=\".xlsx,.xls,.csv\"\r\n(change)=\"onFileSelected($event)\"\r\nhidden\r\n/>\r\n\r\n<div class=\"xls-title\">\r\n @if (title) {\r\n <h1 style=\"flex: 1 1;\">{{title}}</h1>\r\n }\r\n <div class=\"xls-buttons\">\r\n <ui-button color=\"black\" type=\"bordered\" size=\"m\" (click)=\"resetData()\">{{'excel_table.clear_file' | uicTranslate}}</ui-button>\r\n <ui-button color=\"black\" size=\"m\" (click)=\"fileInput.click()\">{{'excel_table.load_file' | uicTranslate}}</ui-button>\r\n </div>\r\n</div>\r\n<ui-editable-table\r\n [record]=\"record\"\r\n [visibleRowsStep]=\"visibleRowsStep\"\r\n (recordChange)=\"onEditableRecordChange($event)\"\r\n></ui-editable-table>\r\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\r\nimport { UicOverlayCardComponent } from '../overlay-card/overlay-card.component';\r\nimport { UicInputComponent } from '../inputs/input/input.component';\r\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { ButtonColor, UicButtonComponent } from '../button/button.component';\r\nimport { InputWrapperComponent } from '../inputs/input-wrapper/input-wrapper.component';\r\nimport { createValueAccessor } from '../dynamic-form/base-value-accessot';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\n\r\ntype selectId = UicTagData[];\r\nconst base = createValueAccessor<selectId>();\r\n\r\n@Component({\r\n selector: 'ui-tag-selector',\r\n imports: [\r\n UicOverlayCardComponent,\r\n UicInputComponent,\r\n FormsModule,\r\n InputWrapperComponent,\r\n UicButtonComponent,\r\n UicTranslatePipe\r\n],\r\n templateUrl: './tag-selector.component.html',\r\n styleUrl: './tag-selector.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => UicTagSelectorComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class UicTagSelectorComponent extends base{\r\n @Input() icon = ''; // Icono externo\r\n @Input() iconColor: ButtonColor = 'black';\r\n // TEXTO\r\n @Input() label = '';\r\n @Input() error = '';\r\n @Input() tip = '';\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n\r\n @Input() placeholder = 'common.search_ellipsis';\r\n @Input() buttonText = 'tag_selector.add_tag';\r\n @Input() predefinedTitle = 'tag_selector.predefined_title';\r\n @Input() newTagTitle = 'tag_selector.new_tag_title';\r\n \r\n @Input() predefinedLabels:UicTagData[] = [];\r\n\r\n @Output() createdTag = new EventEmitter<UicTagData>();\r\n @Output() selectTag = new EventEmitter<number>();\r\n @Output() unselectTag = new EventEmitter<number>();\r\n\r\n selectedTags:UicTagData[] = [];\r\n \r\n\r\n filterText = '';\r\n newTagLabel = '';\r\n filterArray:UicTagData[] = [];\r\n\r\n ngOnInit(){\r\n this.filter();\r\n }\r\n\r\n\r\n filter(){\r\n this.filterArray = this.predefinedLabels.filter(f=>f.name.toLocaleLowerCase().includes(this.filterText.toLocaleLowerCase()));\r\n }\r\n select(tag:UicTagData){\r\n const idx = this.selectedTags.findIndex(f=>f.name == tag.name);\r\n if (idx!=-1){\r\n this.selectedTags.splice(idx,1);\r\n this.unselectTag.emit(tag.id);\r\n }else{\r\n this.selectedTags.push(tag);\r\n this.selectTag.emit(tag.id);\r\n }\r\n this.notifyChange(this.selectedTags);\r\n }\r\n \r\n removeTag(tag:UicTagData){\r\n this.select(tag);\r\n }\r\n\r\n createTag(){\r\n const newTag = {\r\n id:0,\r\n color:'blue',\r\n name:this.newTagLabel\r\n };\r\n this.predefinedLabels.push(newTag);\r\n this.filterText = '';\r\n this.filter();\r\n this.select(newTag);\r\n this.newTagLabel = '';\r\n this.createdTag.emit(newTag);\r\n }\r\n\r\n isSelected(name: string): boolean {\r\n return this.selectedTags.some(t => t.name === name);\r\n }\r\n\r\n override writeValue(value: UicTagData[] | null | undefined): void {\r\n const safeValue = Array.isArray(value) ? value : [];\r\n super.writeValue(safeValue);\r\n this.selectedTags = [...safeValue];\r\n }\r\n\r\n}\r\n\r\nexport interface UicTagData{\r\n id:number;\r\n name:string;\r\n color:string;\r\n icon?: string;\r\n}\r\n","\r\n<ui-input-wrapper\r\n [icon]=\"icon\"\r\n [iconColor]=\"iconColor\"\r\n [label]=\"label\"\r\n [error]=\"error\"\r\n [tip]=\"tip\"\r\n [disabled]=\"disabled\">\r\n<div class=\"tags-reel\">\r\n @for (item of selectedTags; track $index) {\r\n <div [class]=\"'selected-tag lc-'+item.color\" ><i [class]=\"item.icon??'ri-hashtag'\"></i>{{item.name}} <i (click)=\"removeTag(item)\" class=\"ri-close-large-line close-icon\"></i> </div>\r\n }\r\n <ui-overlay-card>\r\n <ui-button button type=\"bordered\" color=\"black\" icon=\"ri-add-line\" size=\"s\">{{buttonText | uicTranslate}}</ui-button>\r\n <ng-container content >\r\n\r\n <ui-input internalIcon=\"ri-search-line\" internalIconColor=\"blue\">\r\n <input [placeholder]=\"placeholder | uicTranslate\" [(ngModel)]=\"filterText\" (ngModelChange)=\"filter()\" >\r\n </ui-input>\r\n <div class=\"tags-overflow\">\r\n <div class=\"tags-title\">{{predefinedTitle | uicTranslate}}</div>\r\n @for(item of filterArray; track $index){\r\n <div (click)=\"select(item)\" class=\"tag-option\"> \r\n <i class=\"ri-circle-fill f-grey\"></i> \r\n <div style=\"flex: 1 1;\">{{item.name}}</div> \r\n @if ( isSelected(item.name) ) {\r\n <i class=\"ri-check-line\"></i> \r\n }\r\n </div>\r\n }\r\n <div class=\"new-tag\"> \r\n <div class=\"new-tag-label\">{{newTagTitle | uicTranslate}}:</div>\r\n <div class=\"input-tag\">\r\n <input [(ngModel)]=\"newTagLabel\" (keydown.enter)=\"createTag()\" type=\"text\">\r\n <ui-button (click)=\"createTag()\" size=\"s\" [iconOnly]=\"true\" icon=\"ri-add-line\"></ui-button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ui-overlay-card>\r\n</div> \r\n</ui-input-wrapper>\r\n","import { Component, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\r\nimport { ButtonColor } from '../button/button.component';\r\n\r\n@Component({\r\n selector: 'ui-progress-bar',\r\n imports: [],\r\n templateUrl: './progress-bar.component.html',\r\n styleUrl: './progress-bar.component.scss'\r\n})\r\nexport class UicProgressBarComponent implements OnChanges, OnDestroy {\r\n @Input() progress = 0; // Progress percentage (0-100)\r\n @Input() color:ButtonColor = 'primary'; // fill var(600) not fill var(200)\r\n @Input() height = 6;\r\n\r\n displayProgress = 0;\r\n private rafId: number | null = null;\r\n\r\n get clampedProgress(): number {\r\n return Math.min(100, Math.max(0, this.progress));\r\n }\r\n\r\n get heightPx(): string {\r\n return `${this.height}px`;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['progress']) {\r\n this.scheduleProgressUpdate();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.rafId !== null) {\r\n cancelAnimationFrame(this.rafId);\r\n }\r\n }\r\n\r\n private scheduleProgressUpdate(): void {\r\n if (this.rafId !== null) {\r\n cancelAnimationFrame(this.rafId);\r\n }\r\n this.rafId = requestAnimationFrame(() => {\r\n this.displayProgress = this.clampedProgress;\r\n this.rafId = null;\r\n });\r\n }\r\n}\r\n","<div [class]=\"'progress-bar pb-' + color\" [style.--pb-height]=\"heightPx\">\r\n <div class=\"progress-bar__fill\" [style.width.%]=\"displayProgress\"></div>\r\n</div>\r\n","import { animate, style, transition, trigger } from \"@angular/animations\";\r\nexport const simpleFade = trigger('simpleFade', [\r\n transition(':enter',[style({opacity:0}), animate('.3s ease', style({opacity:1}))]),\r\n transition(':leave', [animate('.3s ease', style({opacity:0}))])\r\n ]);","import { Observable } from \"rxjs\";\r\nimport { AppSelectOption } from \"../inputs/select/select.component\";\r\nimport { ButtonColor } from \"../button/button.component\";\r\nimport { UicPhoneInputValue } from \"../inputs/phone-input/phone-input.component\";\r\n\r\nexport interface FormStep {\r\n title: string;\r\n form:FormSchema;\r\n required?:boolean;\r\n okButtonText?:string;\r\n cancelButtonText?:string;\r\n}\r\n\r\nexport interface FormSchema {\r\n cols: number;\r\n blocks?: FormBlock[];\r\n}\r\n\r\nexport interface FormBlock {\n subtitle?: string;\n title?: string;\n fields: FormField[];\n}\n\nexport interface SelectOptionsSource {\n key: string;\n idField?: string;\n textField?: string;\n textTemplate?: string;\n dependsOn?: string;\n paramName?: string;\n params?: Record<string, any>;\n}\n\nexport interface SelectOptionsContext {\n field: FormField;\n values: uicFormValuesRecord;\n dependencyValue?: any;\n query?: string;\n}\n\nexport type SelectOptionsResolver = (\n source: SelectOptionsSource,\n context: SelectOptionsContext\n) => AppSelectOption[] | unknown[] | Promise<AppSelectOption[] | unknown[]> | Observable<AppSelectOption[] | unknown[]>;\n\nexport interface FormField {\n // REQUERIDOS\r\n name: string; // identificador único del campo, se usará como key en el resultado del formulario\r\n type: FieldType; // tipo de campo, determina el componente a renderizar\r\n required?: boolean; // default false\r\n // CONFIGURACIÓN\r\n icon?: string; // icono externo\r\n label?: string; // etiqueta a mostrar en el formulario\r\n tip?: string; // subtexto o descripción\r\n newLine?: boolean; // Saltar linea en el grid\r\n colSpan?: number; // para campos que ocupan más de una columna, default 1\r\n iconColor?:ButtonColor; // color del icono externo\r\n tooltip?: string; // texto del tooltip al hoverear el campo\r\n // UTILITARIOS\r\n disabled?: boolean; \r\n loading?:boolean;\r\n clearValueOnHide?: boolean;\r\n // input y selects\r\n internalIcon?:string;\r\n internalIconColor?:ButtonColor;\r\n internalColorScale?:number[];\r\n internalColorScaleOrder?:'asc'|'desc';\r\n selectSearchEnabled?:boolean;\r\n selectNullable?:boolean;\r\n // Para inputs/textareas\r\n placeholder?:string;\r\n minLength?: number;\r\n maxLength?: number;\r\n showCounter?:boolean;\r\n voiceToTextEnabled?:boolean;\r\n textareaResize?:boolean;\r\n resizeMinRows?:number;\r\n resizeMaxRows?:number;\r\n // Para inputs numéricos\r\n min?: number;\r\n max?: number;\r\n step?:number; \r\n // Para slider\r\n sliderInterval?:number;\r\n sliderMarks?:number;\r\n // Para datepicker\r\n monthMode?:boolean;\r\n monthDay?:'first'|'last';\r\n minDate?:string;\r\n maxDate?:string;\r\n // para timepicker\r\n timeInterval?:number;\r\n // Para file-input\r\n fileTypes?: string[] | string;\r\n // para pools\r\n poolEnabledListView?:boolean;\r\n poolTitle?:string;\r\n // select\n options?: AppSelectOption[]; \n optionsSource?: SelectOptionsSource;\n multyEnabled?: boolean;\n // para searcher \r\n searchApi?: string;\r\n searchFn?: (query: string) => Observable<any[]>;\r\n searchDisplayFn?: (item: any) => string;\r\n searchIsEnabledFn?: (item: any) => boolean;\r\n pattern?:RegExp;\r\n // REGLAS DE VISIBILIDAD\r\n visibilityRules?: FieldVisibilityRule[]|null; \r\n // Para el admin de formularios\r\n iaValidation?: boolean;\r\n iaValidationPrompt?: string;\r\n}\r\n\r\nexport interface FieldVisibilityRule{\n fieldName: string; // el campo del que depende la visibilidad\n fieldLabel?: string; // etiqueta del campo dependiente, solo para mostrar en builders/admins\n operator: VisibilityOperators; // operador de comparación\n value: any; // valor a comparar\n}\n\r\nexport type VisibilityOperators = 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' | 'includes' | 'notIncludes';\r\n\r\nexport interface FieldConfig { value:FieldType; icon: string; detail: string; label:string; properties:string[]};\r\n\r\nexport const FIELDS_CONFIG:FieldConfig[] = [\r\n { value:'text', icon:'ri-text', detail: 'Campo de texto en una sola linea', label:'Texto corto', properties: ['placeholder','minLength','maxLength','showCounter']},\r\n { value:'textarea', icon:'ri-file-text-line', detail: 'Texto multilinea con ajuste de altura', label:'Area de texto', properties: ['placeholder','minLength','maxLength','showCounter','voiceToTextEnabled','textareaResize','resizeMinRows','resizeMaxRows']},\r\n { value:'number', icon:'ri-hashtag', detail: 'Campo numerico con control de paso', label:'Numero', properties: ['placeholder','step','min','max']},\r\n { value:'phone', icon:'ri-phone-line', detail: 'Telefono con pais y codigo', label:'Telefono', properties: ['placeholder']},\r\n { value:'select', icon:'ri-list-unordered', detail: 'Seleccion simple desde opciones', label:'Selector', properties: ['options','selectSearchEnabled','selectNullable']},\n { value:'multyselect', icon:'ri-list-check-2', detail: 'Seleccion multiple desde opciones', label:'Selector multiple', properties: ['options']},\n { value:'date', icon:'ri-calendar-2-line', detail: 'Selector de fecha o mes', label:'Fecha', properties: ['monthMode','monthDay','minDate','maxDate']},\r\n { value:'time', icon:'ri-timer-2-line', detail: 'Selector de hora', label:'Hora', properties: ['timeInterval']},\r\n { value:'radio', icon:'ri-radio-button-line', detail: 'Seleccion unica entre opciones', label:'Radio', properties: ['options']},\n { value:'checkbox', icon:'ri-checkbox-line', detail: 'Campo booleano tipo check', label:'Checkbox', properties: ['placeholder']},\r\n { value:'switch', icon:'ri-toggle-line', detail: 'Campo booleano tipo switch', label:'Switch', properties: ['placeholder']},\r\n { value:'pool', icon:'ri-list-indefinite', detail: 'Seleccion con lista y detalle por item', label:'Multiopciones', properties: ['options','multyEnabled','poolEnabledListView','poolTitle']},\n { value:'file', icon:'ri-attachment-line', detail: 'Carga de archivos', label:'Archivo', properties: ['multyEnabled','fileTypes','iaValidation','iaValidationPrompt']},\r\n { value:'searcher', icon:'ri-seo-line', detail: 'Buscador con fuente de datos externa', label:'Buscador', properties: ['placeholder','optionsSource.key','optionsSource.idField','optionsSource.textField','optionsSource.textTemplate','optionsSource.dependsOn','optionsSource.paramName']},\n { value:'slider', icon:'ri-equalizer-2-line', detail: 'Control deslizante continuo', label:'Deslizador', properties: ['min','max','sliderInterval','sliderMarks']}\r\n]; \r\n\r\nexport type FieldType = \r\n 'text' | \r\n 'number' | \r\n 'phone' | \r\n 'date' | \r\n 'time' | \r\n 'select' | \r\n 'radio' |\r\n 'checkbox' | \r\n 'switch' | \r\n 'textarea' | \r\n 'pool' | \r\n 'file' |\r\n 'multyselect'| \r\n 'searcher' | \r\n 'slider' ;\r\n\r\nexport interface FormResult{\r\n result: boolean;\r\n form: uicFormValuesRecord|null;\r\n}\r\n\r\nexport type uicFormValuesRecord = Record<string,any>;\r\n\r\nexport const BASE_FORM_FIELDS: FormField[] = [\r\n {\r\n name: 'name',\r\n internalIcon:'ri-key-line',\r\n tip:'ID',\r\n label: 'form_builder.base.name',\r\n type: 'text',\r\n required: true\r\n },\r\n {\r\n name: 'label',\r\n internalIcon:'ri-price-tag-3-line',\r\n label: 'form_builder.base.label',\r\n type: 'text',\r\n required: true\r\n },\r\n {\r\n name: 'required',\r\n placeholder: 'form_builder.base.required',\r\n type: 'checkbox'\r\n }\r\n];\r\nexport const LAYOUT_FORM_FIELDS: FormField[] = [\r\n {\r\n name: 'icon',\r\n label: 'form_builder.base.icon',\r\n placeholder: 'ri-name-type',\r\n newLine: true,\r\n internalIcon: 'ri-remixicon-line',\r\n tip:'https://remixicon.com/',\r\n type: 'text'\r\n },\r\n {\r\n name: 'iconColor',\r\n label: 'form_builder.extra.iconColor',\r\n internalIcon: 'ri-palette-line',\r\n type: 'select',\r\n options: [\r\n { id: 'primary', text: 'primary' },\r\n { id: 'secondary', text: 'secondary' },\r\n { id: 'red', text: 'red' },\r\n { id: 'green', text: 'green' },\r\n { id: 'blue', text: 'blue' },\r\n { id: 'yellow', text: 'yellow' },\r\n { id: 'black', text: 'black' },\r\n { id: 'grey', text: 'grey' },\r\n { id: 'white', text: 'white' }\r\n ]\r\n },\r\n {\r\n name: 'internalIcon',\r\n label: 'form_builder.extra.internalIcon',\r\n placeholder: 'ri-name-type',\r\n tip:'https://remixicon.com/',\r\n type: 'text',\r\n internalIcon: 'ri-remixicon-line',\r\n },\r\n {\r\n name: 'internalIconColor',\r\n label: 'form_builder.extra.internalIconColor',\r\n internalIcon: 'ri-palette-line',\r\n type: 'select',\r\n options: [\r\n { id: 'primary', text: 'primary' },\r\n { id: 'secondary', text: 'secondary' },\r\n { id: 'red', text: 'red' },\r\n { id: 'green', text: 'green' },\r\n { id: 'blue', text: 'blue' },\r\n { id: 'yellow', text: 'yellow' },\r\n { id: 'black', text: 'black' },\r\n { id: 'grey', text: 'grey' },\r\n { id: 'white', text: 'white' }\r\n ]\r\n },\r\n {\r\n name: 'tip',\r\n internalIcon: 'ri-lightbulb-line',\r\n label: 'form_builder.base.tip',\r\n tip: 'form_builder.base.tip_tip',\r\n type: 'text'\r\n },\r\n {\r\n name: 'colSpan',\r\n tip:'form_builder.base.col_span_tip',\r\n label: 'form_builder.base.col_span',\r\n internalIcon:'ri-layout-line',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'newLine',\r\n placeholder: 'form_builder.base.new_line',\r\n type: 'checkbox'\r\n }\r\n];\r\nexport const EXTRA_FORM_FIELDS: FormField[] = [\r\n {\r\n name: 'placeholder',\r\n label: 'form_builder.extra.placeholder',\r\n internalIcon: 'ri-edit-box-line',\r\n tip: 'form_builder.extra.placeholder_tip',\r\n type: 'text'\r\n },\r\n {\n name: 'searchApi',\n label: 'form_builder.extra.searchApi',\n internalIcon: 'ri-api-line',\n tip: 'form_builder.extra.searchApi_tip',\n type: 'text'\n },\n {\n name: 'optionsSource.key',\n label: 'form_builder.extra.optionsSourceKey',\n internalIcon: 'ri-database-2-line',\n tip: 'form_builder.extra.optionsSourceKey_tip',\n type: 'text'\n },\n {\n name: 'optionsSource.idField',\n label: 'form_builder.extra.optionsSourceIdField',\n internalIcon: 'ri-key-line',\n tip: 'form_builder.extra.optionsSourceIdField_tip',\n type: 'text',\n visibilityRules: [\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: ''\n },\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: null\n }\n ]\n },\n {\n name: 'optionsSource.textField',\n label: 'form_builder.extra.optionsSourceTextField',\n internalIcon: 'ri-text',\n tip: 'form_builder.extra.optionsSourceTextField_tip',\n type: 'text',\n visibilityRules: [\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: ''\n },\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: null\n }\n ]\n },\n {\n name: 'optionsSource.textTemplate',\n label: 'form_builder.extra.optionsSourceTextTemplate',\n internalIcon: 'ri-braces-line',\n tip: 'form_builder.extra.optionsSourceTextTemplate_tip',\n type: 'text',\n visibilityRules: [\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: ''\n },\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: null\n }\n ]\n },\n {\n name: 'optionsSource.dependsOn',\n label: 'form_builder.extra.optionsSourceDependsOn',\n internalIcon: 'ri-git-branch-line',\n tip: 'form_builder.extra.optionsSourceDependsOn_tip',\n type: 'text',\n visibilityRules: [\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: ''\n },\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: null\n }\n ]\n },\n {\n name: 'optionsSource.paramName',\n label: 'form_builder.extra.optionsSourceParamName',\n internalIcon: 'ri-code-line',\n tip: 'form_builder.extra.optionsSourceParamName_tip',\n type: 'text',\n visibilityRules: [\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: ''\n },\n {\n fieldName: 'optionsSource.key',\n operator: 'notEquals',\n value: null\n }\n ]\n },\n {\r\n name: 'iaValidation',\r\n label: 'form_builder.extra.iaValidation',\r\n internalIcon: 'ri-api-line',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'iaValidationPrompt',\r\n label: 'form_builder.extra.iaValidationPrompt',\r\n internalIcon: 'ri-api-line',\r\n type: 'textarea',\r\n visibilityRules: [\r\n {\r\n fieldName: 'iaValidation',\r\n operator: 'equals',\r\n value: true\r\n }\r\n ]\r\n },\r\n {\r\n name: 'minDate',\r\n label: 'form_builder.extra.minDate',\r\n internalIcon: 'ri-calendar-todo-line',\r\n tip: 'form_builder.extra.minDate_tip',\r\n type: 'text'\r\n },\r\n {\r\n name: 'maxDate',\r\n label: 'form_builder.extra.maxDate',\r\n internalIcon: 'ri-calendar-close-line',\r\n tip: 'form_builder.extra.maxDate_tip',\r\n type: 'text'\r\n },\r\n {\r\n name: 'fileTypes',\r\n label: 'form_builder.extra.fileTypes',\r\n internalIcon: 'ri-file-upload-line',\r\n type: 'select',\r\n options:[\r\n { id: 'ALL', text: 'Todos' },\r\n { id: 'image/*', text: 'Imagen' },\r\n { id: '.doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/pdf', text: 'DOCS' },\r\n { id: '.csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel', text: 'Excel' },\r\n { id: 'application/vnd.ms-powerpoint', text: 'PPT' },\r\n ]\r\n },\r\n {\r\n name: 'selectNullable',\r\n label: 'form_builder.extra.selectNullable',\r\n internalIcon: 'ri-checkbox-multiple-blank-line',\r\n tip: 'form_builder.extra.selectNullable_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'selectSearchEnabled',\r\n label: 'form_builder.extra.selectSearchEnabled',\r\n internalIcon: 'ri-search-line',\r\n tip: 'form_builder.extra.selectSearchEnabled_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'poolTitle',\r\n label: 'form_builder.extra.poolTitle',\r\n internalIcon: 'ri-stack-line',\r\n tip: 'form_builder.extra.poolTitle_tip',\r\n type: 'text'\r\n },\r\n {\r\n name: 'internalColorScale',\r\n label: 'form_builder.extra.internalColorScale',\r\n internalIcon: 'ri-palette-line',\r\n tip: 'form_builder.extra.internalColorScale_tip',\r\n type: 'textarea'\r\n },\r\n {\r\n name: 'internalColorScaleOrder',\r\n label: 'form_builder.extra.internalColorScaleOrder',\r\n internalIcon: 'ri-sort-asc',\r\n tip: 'form_builder.extra.internalColorScaleOrder_tip',\r\n type: 'select',\r\n options: [\r\n { id: 'asc', text: 'asc' },\r\n { id: 'desc', text: 'desc' }\r\n ]\r\n },\r\n {\r\n name: 'minLength',\r\n label: 'form_builder.extra.minLength',\r\n internalIcon: 'ri-text-wrap',\r\n tip: 'form_builder.extra.minLength_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'maxLength',\r\n label: 'form_builder.extra.maxLength',\r\n internalIcon: 'ri-text-wrap',\r\n tip: 'form_builder.extra.maxLength_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'resizeMinRows',\r\n label: 'form_builder.extra.resizeMinRows',\r\n internalIcon: 'ri-layout-row-line',\r\n tip: 'form_builder.extra.resizeMinRows_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'resizeMaxRows',\r\n label: 'form_builder.extra.resizeMaxRows',\r\n internalIcon: 'ri-layout-row-line',\r\n tip: 'form_builder.extra.resizeMaxRows_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'min',\r\n label: 'form_builder.extra.min',\r\n internalIcon: 'ri-arrow-down-line',\r\n tip: 'form_builder.extra.min_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'max',\r\n label: 'form_builder.extra.max',\r\n internalIcon: 'ri-arrow-up-line',\r\n tip: 'form_builder.extra.max_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'step',\r\n label: 'form_builder.extra.step',\r\n internalIcon: 'ri-add-line',\r\n tip: 'form_builder.extra.step_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'sliderInterval',\r\n label: 'form_builder.extra.sliderInterval',\r\n internalIcon: 'ri-slideshow-line',\r\n tip: 'form_builder.extra.sliderInterval_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'sliderMarks',\r\n label: 'form_builder.extra.sliderMarks',\r\n internalIcon: 'ri-git-branch-line',\r\n tip: 'form_builder.extra.sliderMarks_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'monthDay',\r\n label: 'form_builder.extra.monthDay',\r\n internalIcon: 'ri-calendar-2-line',\r\n tip: 'form_builder.extra.monthDay_tip',\r\n type: 'select',\r\n options: [\r\n { id: 'first', text: 'first' },\r\n { id: 'last', text: 'last' }\r\n ]\r\n },\r\n {\r\n name: 'timeInterval',\r\n label: 'form_builder.extra.timeInterval',\r\n internalIcon: 'ri-timer-line',\r\n tip: 'form_builder.extra.timeInterval_tip',\r\n type: 'number',\r\n step: 1\r\n },\r\n {\r\n name: 'showCounter',\r\n placeholder: 'form_builder.extra.showCounter',\r\n internalIcon: 'ri-bar-chart-line',\r\n tip: 'form_builder.extra.showCounter_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'voiceToTextEnabled',\r\n placeholder: 'form_builder.extra.voiceToTextEnabled',\r\n internalIcon: 'ri-mic-line',\r\n tip: 'form_builder.extra.voiceToTextEnabled_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'textareaResize',\r\n label: '_',\r\n placeholder: 'form_builder.extra.textareaResize',\r\n internalIcon: 'ri-resize-line',\r\n tip: 'form_builder.extra.textareaResize_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'monthMode',\r\n label: '_',\r\n placeholder: 'form_builder.extra.monthMode',\r\n internalIcon: 'ri-calendar-event-line',\r\n tip: 'form_builder.extra.monthMode_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'poolEnabledListView',\r\n label: '_',\r\n placeholder: 'form_builder.extra.poolEnabledListView',\r\n internalIcon: 'ri-layout-grid-line',\r\n tip: 'form_builder.extra.poolEnabledListView_tip',\r\n type: 'checkbox'\r\n },\r\n {\r\n name: 'multyEnabled',\r\n label: '_',\r\n placeholder: 'form_builder.extra.multyEnabled',\r\n internalIcon: 'ri-folder-add-line',\r\n tip: 'form_builder.extra.multyEnabled_tip',\r\n type: 'checkbox'\r\n }\r\n]\r\nexport const BRANCH_FORM_FIELDS: FormField[] = [\r\n {\r\n name: 'fieldName',\r\n internalIcon:'ri-key-line',\r\n label: 'form_builder.field_editor.parent',\r\n type: 'select',\r\n required: true\r\n },\r\n {\r\n name: 'operator',\r\n internalIcon:'ri-price-tag-3-line',\r\n label: 'form_builder.field_editor.operator',\r\n type: 'select',\r\n options: [\r\n { id: 'equals', text: 'equals' },\r\n { id: 'notEquals', text: 'notEquals' },\r\n { id: 'greaterThan', text: 'greaterThan' },\r\n { id: 'lessThan', text: 'lessThan' },\r\n { id: 'includes', text: 'includes' },\r\n { id: 'notIncludes', text: 'notIncludes' }\r\n ],\r\n required: true\r\n },\r\n {\r\n name: 'value',\r\n label: 'form_builder.field_editor.value',\r\n placeholder: 'form_builder.field_editor.expected_value',\r\n type: 'text'\r\n }\r\n];\r\n","import { Component, Inject } from '@angular/core';\nimport { FormResult, FormSchema, SelectOptionsResolver } from '../../dynamic-form/form.models';\nimport { UicFormWrapperComponent } from '../../dynamic-form/form-wrapper/form-wrapper.component';\r\nimport { MODAL_DATA } from '../../../services/modal.constant';\r\n\r\n@Component({\r\n selector: 'lib-form-preview',\r\n imports: [UicFormWrapperComponent],\r\n templateUrl: './form-preview.component.html',\r\n styleUrl: './form-preview.component.scss'\r\n})\r\nexport class FormPreviewComponent {\n\n schema: FormSchema = { cols: 2, blocks: [] };\n selectOptionsResolver?: SelectOptionsResolver;\n\n constructor(@Inject(MODAL_DATA) public data: { schema: FormSchema; selectOptionsResolver?: SelectOptionsResolver }) { \n this.schema = data.schema;\n this.selectOptionsResolver = data.selectOptionsResolver;\n }\n\r\n save(fr:FormResult){\r\n console.log(fr.form);\r\n }\r\n}\r\n","<ui-form-wrapper \n [schema]=\"schema\" \n [selectOptionsResolver]=\"selectOptionsResolver\"\n [showButtons]=\"true\"\n (formSubmit)=\"save($event)\">\n</ui-form-wrapper>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { AppSelectOption } from '../../../../inputs/select/select.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UicButtonComponent } from '../../../../button/button.component';\r\nimport { InputWrapperComponent } from '../../../../inputs/input-wrapper/input-wrapper.component';\r\nimport { UicTranslatePipe } from '../../../../../pipes/translate.pipe';\r\n\r\n@Component({\r\n selector: 'ui-field-options-editor',\r\n imports: [FormsModule, UicButtonComponent, InputWrapperComponent, UicTranslatePipe],\r\n templateUrl: './field-options-editor.component.html',\r\n styleUrl: './field-options-editor.component.scss'\r\n})\r\nexport class UicFieldOptionsEditorComponent {\r\n\r\n @Output() optionsChange = new EventEmitter<AppSelectOption[]>();\n\n @Input() options:AppSelectOption[] = [\n { id: '', text: '' }\n ];\n\n addOption() {\n this.options = [...this.options, { id: '', text: '' }];\n this.optionsChange.emit(this.options);\n }\n dropOption(index: number) {\n this.options = this.options.filter((_, idx) => idx !== index);\n this.optionsChange.emit(this.options);\n }\n\n updateCode(name:string, idx:number){\n const option = this.options[idx];\n if (!option) return;\n\n if ( option.id === '' ) {\n const nextOptions = [...this.options];\n nextOptions[idx] = { ...option, id: name };\n this.options = nextOptions;\n }\n this.optionsChange.emit(this.options);\n }\n}\n","<ui-input-wrapper [label]=\"'form_builder.options_editor.title' | uicTranslate\">\n <div class=\"optbody\">\n <div class=\"option-row\">\n <div>{{'form_builder.options_editor.code_label' | uicTranslate}}</div>\n <div>{{'form_builder.options_editor.name_label' | uicTranslate}}</div>\n </div>\n @for (item of options; track $index) {\n <div class=\"option-row\">\n @if (true) {\n <input (blur)=\"optionsChange.emit(options)\" [(ngModel)]=\"item.id\" [placeholder]=\"'form_builder.options_editor.code_placeholder' | uicTranslate\" type=\"text\">\n }\n <input [(ngModel)]=\"item.text\" (blur)=\"updateCode(item.text,$index)\" [placeholder]=\"'form_builder.options_editor.display_name_placeholder' | uicTranslate\" type=\"text\">\n <ui-button (click)=\"dropOption($index)\" size=\"s\" type=\"ghost\" icon=\"ri-delete-bin-line\" [iconOnly]=\"true\" color=\"red\"></ui-button>\n </div>\n }\n <ui-button (click)=\"addOption()\" color=\"black\" type=\"bordered\" icon=\"ri-add-line\" size=\"s\">{{'form_builder.options_editor.add_option' | uicTranslate}}</ui-button>\n </div>\n</ui-input-wrapper>\n","import { Component, ElementRef, computed, effect, inject, input, output, signal } from '@angular/core';\nimport { BASE_FORM_FIELDS, BRANCH_FORM_FIELDS, EXTRA_FORM_FIELDS, FIELDS_CONFIG, FieldVisibilityRule, FormField, LAYOUT_FORM_FIELDS, uicFormValuesRecord } from '../../../dynamic-form/form.models';\r\nimport { UicFormWrapperComponent } from '../../../dynamic-form/form-wrapper/form-wrapper.component';\r\nimport { UicTranslateService } from '../../../../services/translate.service';\r\nimport { UicFieldOptionsEditorComponent } from './field-options-editor/field-options-editor.component';\r\nimport { AppSelectOption } from '../../../inputs/select/select.component';\r\nimport { EditableField } from '../../user-formbuilder.component';\r\nimport { UicTranslatePipe } from '../../../../pipes/translate.pipe';\nimport { UicButtonComponent } from '../../../button/button.component';\n\nconst OPTIONS_SOURCE_FIELD_NAMES = [\n 'optionsSource.key',\n 'optionsSource.idField',\n 'optionsSource.textField',\n 'optionsSource.textTemplate',\n 'optionsSource.dependsOn',\n 'optionsSource.paramName'\n];\n\n@Component({\n selector: 'lib-field-editor',\r\n imports: [\r\n UicFormWrapperComponent, \r\n UicButtonComponent,\r\n UicTranslatePipe, \r\n UicFieldOptionsEditorComponent],\r\n templateUrl: './field-editor.component.html',\r\n styleUrl: './field-editor.component.scss'\r\n})\r\nexport class FieldEditorComponent {\n \n private readonly translateService = inject(UicTranslateService);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private currentFieldCode: string | null = null;\n hasOptions = computed(() => {\n const fieldType = this.fieldType();\n return !!fieldType?.properties.includes('options');\n });\n hasOptionsSourceConfig = computed(() => {\n const fieldType = this.fieldType();\n return !!fieldType && (fieldType.value === 'searcher' || fieldType.properties.includes('options'));\n });\n hasExternalOptionsSource = computed(() => !!this.localField().optionsSource?.key);\n config = input.required<EditableField>();\n focusRequiredField = input(false);\n options = input<Record<string,AppSelectOption[]>>( {} );\n\r\n hiddenSections = signal<string[]>([]);\r\n\r\n\r\n fieldChange = output<FormField>(); \r\n \r\n localField = signal<FormField>({name:'',type:'text'});\r\n\r\n /* FORM FIELDS */\r\n requiredFields:FormField[] = this.buildRequiredFields();\n optionsSourceFields = computed<FormField[]>(() => this.buildOptionsSourceFields());\n advancedFields = computed<FormField[]>(() => (this.buildAdvancedBlocks()));\n styleFields = computed<FormField[]>(() => (this.buildDesignBlocks()));\r\n branchFields:FormField[] = this.buildBranchFields();\r\n\r\n\r\n initialValues = computed(() => {\r\n const fieldData = this.config().fieldData;\r\n return fieldData ?? {} \r\n });\r\n\r\n branchInitialValues = computed<uicFormValuesRecord>(() => {\r\n const firstRule = this.localField().visibilityRules?.[0];\r\n if (!firstRule) return {};\r\n\r\n return {\r\n fieldName: firstRule.fieldName ?? null,\r\n operator: firstRule.operator ?? null,\r\n value: firstRule.value ?? null\r\n };\r\n });\r\n\r\n /*\r\n {\r\n fieldName : [\r\n {id:field_name, text: field_label},\r\n {id:field2_name, text: field2_label}\r\n ]\r\n }\r\n */ \r\n\r\n\r\n fieldType = computed(() => FIELDS_CONFIG.find(f => f.value === this.config().fieldData?.type));\r\n \r\n constructor(){\n effect(() => {\n const config = this.config();\n const field = config.fieldData;\n this.localField.set(field);\n\n if (this.currentFieldCode !== config.code) {\n this.currentFieldCode = config.code;\n this.scrollPropertiesToTop();\n }\n });\n }\n\n private scrollPropertiesToTop(): void {\n requestAnimationFrame(() => {\n const scrollContainer = this.elementRef.nativeElement.closest('.formeditor-properties-form');\n scrollContainer?.scrollTo({ top: 0 });\n });\n }\n\r\n updateRuleValue(fr:uicFormValuesRecord){\r\n const fieldName = fr['fieldName'];\r\n const operator = fr['operator'];\r\n const value = fr['value'];\r\n\r\n // Ignore partial emissions while the dependency form is still incomplete.\r\n if (!fieldName || !operator) return;\r\n\r\n const visibilityRules:FieldVisibilityRule = {\n fieldName,\n fieldLabel: this.getDependencyFieldLabel(fieldName),\n operator,\n value\n };\n\r\n const currentRule = this.localField().visibilityRules?.[0];\r\n if (\r\n currentRule &&\r\n currentRule.fieldName === visibilityRules.fieldName &&\r\n currentRule.operator === visibilityRules.operator &&\r\n currentRule.value === visibilityRules.value\r\n ) {\r\n return;\r\n }\r\n\r\n const updatedField:FormField = {\r\n ...this.localField(),\r\n visibilityRules: [visibilityRules]\r\n }\r\n this.localField.set(updatedField);\r\n this.fieldChange.emit(updatedField);\r\n }\r\n\r\n addRule(){\r\n const updatedField = {\r\n ...this.localField(),\r\n visibilityRules: []\r\n }\r\n this.localField.set(updatedField);\r\n this.fieldChange.emit(updatedField);\r\n }\r\n \r\n removeRule(){\r\n const updatedField = {\r\n ...this.localField(),\r\n visibilityRules: null\r\n }\r\n this.localField.set(updatedField);\r\n this.fieldChange.emit(updatedField);\r\n }\r\n\r\n updateFieldValues(fr:uicFormValuesRecord){\r\n const updatedField = {\r\n ...this.localField(),\r\n ...fr\r\n }\r\n this.localField.set(updatedField);\r\n this.fieldChange.emit(updatedField);\r\n }\r\n\r\n updateOptions(options: AppSelectOption[]){\n const updatedField = {\r\n ...this.localField(),\r\n options: options\r\n }\r\n this.localField.set(updatedField);\r\n this.fieldChange.emit(updatedField);\n }\n\n private getDependencyFieldLabel(fieldName: string): string {\n return this.options()['fieldName']?.find(option => option.id === fieldName)?.text ?? fieldName;\n }\n\n toggleSection(section:string){\n const currentHidden = this.hiddenSections();\r\n if (currentHidden.includes(section)){\r\n this.hiddenSections.set(currentHidden.filter(s => s !== section));\r\n } else {\r\n this.hiddenSections.set([...currentHidden, section]);\r\n } \r\n }\r\n\r\n private buildRequiredFields():FormField[]{\r\n return BASE_FORM_FIELDS.map(field => ({\r\n ...field,\r\n label: this.translateService.translate(field.label ?? ''),\r\n placeholder: field.placeholder ? this.translateService.translate(field.placeholder) : this.translateService.translate(field.label ?? ''),\r\n tip: field.tip ? this.translateService.translate(field.tip) : field.tip\r\n }));\r\n }\r\n\r\n private buildDesignBlocks():FormField[]{\r\n const fieldType = this.fieldType();\r\n if (!fieldType) return [];\r\n return [...LAYOUT_FORM_FIELDS.map(field => ({\r\n ...field,\r\n label: this.translateService.translate(field.label ?? ''),\r\n placeholder: field.placeholder ? this.translateService.translate(field.placeholder) : this.translateService.translate(field.label ?? ''),\r\n tip: field.tip ? this.translateService.translate(field.tip) : field.tip\r\n }))];\r\n }\r\n\r\n private buildAdvancedBlocks():FormField[]{\n const fieldType = this.fieldType();\n if (!fieldType) return [];\n\n const extraFields = EXTRA_FORM_FIELDS.filter(f => fieldType.properties.includes(f.name));\n return [...extraFields.map(field => ({\n ...field,\n label: this.translateService.translate(field.label ?? ''),\n placeholder: field.placeholder ? this.translateService.translate(field.placeholder) : this.translateService.translate(field.label ?? ''),\n tip: field.tip ? this.translateService.translate(field.tip) : field.tip\n }))];\n }\n\n private buildOptionsSourceFields(): FormField[] {\n return EXTRA_FORM_FIELDS\n .filter(field => OPTIONS_SOURCE_FIELD_NAMES.includes(field.name))\n .map(field => ({\n ...this.prepareOptionsSourceField(field),\n label: this.translateService.translate(field.label ?? ''),\n placeholder: field.placeholder ? this.translateService.translate(field.placeholder) : this.translateService.translate(field.label ?? ''),\n tip: field.tip ? this.translateService.translate(field.tip) : field.tip\n }));\n }\n\n private prepareOptionsSourceField(field: FormField): FormField {\n const options = this.options()[field.name];\n\n if ((field.name === 'optionsSource.key' || field.name === 'optionsSource.dependsOn') && options?.length) {\n return {\n ...field,\n type: 'select',\n options,\n selectNullable: true\n };\n }\n\n return field;\n }\n\n private buildBranchFields():FormField[]{\n return BRANCH_FORM_FIELDS.map(field => ({\r\n ...field,\r\n label: this.translateService.translate(field.label ?? ''),\r\n placeholder: field.placeholder ? this.translateService.translate(field.placeholder) : this.translateService.translate(field.label ?? '')\r\n }));\r\n }\r\n}\r\n","<div class=\"props-title\">{{'form_builder.field_editor.basic' | uicTranslate}} <i (click)=\"toggleSection('basic')\" class=\"{{hiddenSections().includes('basic') ? 'ri-arrow-down-s-line' : 'ri-arrow-up-s-line'}}\"></i> </div>\n<div class=\"props-inputs\" [class.hidden]=\"hiddenSections().includes('basic')\">\n <ui-form-wrapper\n [fields]=\"requiredFields\" \n [initialValues]=\"initialValues()\"\n [focusFieldName]=\"focusRequiredField() ? 'label' : null\"\n [focusFieldTrigger]=\"focusRequiredField() ? config().code : null\"\n [cols]=\"1\" \n (formChange)=\"updateFieldValues($event)\">\n </ui-form-wrapper>\n @if (hasOptionsSourceConfig()) {\n <ui-form-wrapper\n [fields]=\"optionsSourceFields()\"\n [initialValues]=\"initialValues()\"\n [externalData]=\"options()\"\n [cols]=\"1\"\n (formChange)=\"updateFieldValues($event)\">\n </ui-form-wrapper>\n @if (hasOptions() && !hasExternalOptionsSource()) {\n <ui-field-options-editor [options]=\"localField().options ?? []\" (optionsChange)=\"updateOptions($event)\"></ui-field-options-editor>\n }\n }\n</div>\n\n<div class=\"props-title\">{{'form_builder.field_editor.advanced' | uicTranslate}} <i (click)=\"toggleSection('advanced')\" class=\"{{hiddenSections().includes('advanced') ? 'ri-arrow-down-s-line' : 'ri-arrow-up-s-line'}}\"></i> </div>\n<div class=\"props-inputs\" [class.hidden]=\"hiddenSections().includes('advanced')\">\n <ui-form-wrapper\n [fields]=\"advancedFields()\" \n [initialValues]=\"initialValues()\"\n [cols]=\"1\" \n (formChange)=\"updateFieldValues($event)\">\n </ui-form-wrapper>\n</div>\n\n<div class=\"props-title\">{{'form_builder.field_editor.style' | uicTranslate}} <i (click)=\"toggleSection('style')\" class=\"{{hiddenSections().includes('style') ? 'ri-arrow-down-s-line' : 'ri-arrow-up-s-line'}}\"></i> </div>\n<div class=\"props-inputs\" [class.hidden]=\"hiddenSections().includes('style')\">\n <ui-form-wrapper\n [fields]=\"styleFields()\" \n [initialValues]=\"initialValues()\"\n [cols]=\"1\" \n (formChange)=\"updateFieldValues($event)\"> \n </ui-form-wrapper>\n</div>\n\n<div class=\"props-title\">{{'form_builder.field_editor.dependency_title' | uicTranslate}} <i (click)=\"toggleSection('dependency')\" class=\"{{hiddenSections().includes('dependency') ? 'ri-arrow-down-s-line' : 'ri-arrow-up-s-line'}}\"></i> </div>\n<div class=\"props-inputs\" [class.hidden]=\"hiddenSections().includes('dependency')\">\n @if (localField().visibilityRules ) {\n <p>{{'form_builder.field_editor.dependency_description' | uicTranslate}}</p>\n <ui-form-wrapper\n [fields]=\"branchFields\" \n [initialValues]=\"branchInitialValues()\"\n [externalData]=\"options()\"\n [cols]=\"1\" \n (formChange)=\"updateRuleValue($event)\">\n </ui-form-wrapper>\n <ui-button color=\"black\" size=\"s\" (click)=\"removeRule()\">{{'form_builder.field_editor.remove_relation' | uicTranslate}}</ui-button>\n }@else {\n <ui-button color=\"black\" size=\"s\" (click)=\"addRule()\">{{'form_builder.field_editor.add_relation' | uicTranslate}}</ui-button>\n }\n</div>\n","import { Component, output } from '@angular/core';\r\nimport { UicToolTipDirective } from '../../../../directives/tool-tip.directive';\r\nimport { UicTranslatePipe } from '../../../../pipes/translate.pipe';\r\nimport { FieldConfig, FIELDS_CONFIG } from '../../../dynamic-form/form.models';\r\n\r\n@Component({\r\n selector: 'lib-field-type-selector',\r\n imports: [UicToolTipDirective, UicTranslatePipe],\r\n templateUrl: './field-type-selector.component.html',\r\n styleUrl: './field-type-selector.component.scss'\r\n})\r\nexport class FieldTypeSelectorComponent {\r\n\r\n types: FieldConfig[] = [...FIELDS_CONFIG];\r\n\r\n selectType = output<FieldConfig>();\r\n\r\n addField(type: FieldConfig){\r\n this.selectType.emit(type);\r\n }\r\n \r\n}\r\n","@for (type of types; track $index) {\r\n <div [uiTooltip]=\"type.label | uicTranslate\" (click)=\"addField(type)\" class=\"field-type\">\n <i [class]=\"type.icon\"></i>\r\n <!-- <div>\r\n <b>{{type.label}}</b>\r\n <p>{{type.detail}}</p>\r\n </div> -->\r\n </div>\r\n}\n","import { Component, input, Input, output } from '@angular/core';\r\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { UicButtonComponent } from '../../button/button.component';\r\nimport { UicToolTipDirective } from '../../../directives/tool-tip.directive';\r\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FieldTypeSelectorComponent } from './field-type-selector/field-type-selector.component';\r\nimport { EditableBlock, EditableField } from '../user-formbuilder.component';\r\nimport { FieldConfig } from '../../dynamic-form/form.models';\r\n\r\n@Component({\r\n selector: 'lib-block-editor',\r\n imports: [\r\n UicButtonComponent,\r\n UicToolTipDirective,\r\n UicTranslatePipe,\r\n DragDropModule,\r\n FormsModule,\r\n FieldTypeSelectorComponent\r\n ],\r\n templateUrl: './block-editor.component.html',\r\n styleUrl: './block-editor.component.scss'\r\n})\r\nexport class BlockEditorComponent {\r\n\r\n block = input<EditableBlock>({\n title: '',\n code:'',\n order:1,\n subtitle: '',\n fields: []\n });\n blockChange = output<EditableBlock>();\n addFieldRequest = output<FieldConfig>();\r\n\r\n deleteBlock = output<string>();\r\n notifySelectedField = output<EditableField|null>();\r\n @Input() selectedFieldId: string | null = null;\r\n\r\n \r\n selectField(field: EditableField){\r\n this.notifySelectedField.emit(field);\r\n }\r\n\r\n changeTitle(newTitle: string){\r\n this.blockChange.emit({...this.block(), title: newTitle});\r\n }\r\n\r\n changeSubtitle(newSubtitle: string){\r\n this.blockChange.emit({...this.block(), subtitle: newSubtitle});\r\n }\r\n\r\n \r\n addField(newFieldType: FieldConfig){\r\n this.addFieldRequest.emit(newFieldType);\r\n }\r\n\r\n deleteField(fieldCode:string, e:Event){\r\n e.stopPropagation();\r\n this.blockChange.emit({...this.block(), fields: this.block().fields.filter(f => f.code !== fieldCode)});\r\n if(this.selectedFieldId === fieldCode){\r\n this.notifySelectedField.emit(null);\r\n }\r\n }\r\n\r\n reorderFields(event: CdkDragDrop<EditableField[]>) {\r\n if (event.previousIndex === event.currentIndex) return;\r\n\r\n const nextFields = [...this.block().fields];\r\n moveItemInArray(nextFields, event.previousIndex, event.currentIndex);\r\n this.blockChange.emit({ ...this.block(), fields: nextFields });\r\n }\r\n}\r\n","<div class=\"form-block-card\">\n <div class=\"form-block-card-header\">\n <div>\n <input [placeholder]=\"'form_builder.block_title' | uicTranslate\" [ngModel]=\"block().title\" (ngModelChange)=\"changeTitle($event)\">\n <input [placeholder]=\"'form_builder.block_subtitle' | uicTranslate\" [ngModel]=\"block().subtitle\" (ngModelChange)=\"changeSubtitle($event)\">\n </div>\n <ui-button [uiTooltip]=\"'form_builder.delete_block' | uicTranslate\" (click)=\"deleteBlock.emit(block().code)\" size=\"s\" icon=\"ri-delete-bin-line\" color=\"red\" type=\"ghost\" [iconOnly]=\"true\"></ui-button>\n </div>\n <div\n class=\"form-block-card-body\"\n cdkDropList\n [cdkDropListData]=\"block().fields\"\n (cdkDropListDropped)=\"reorderFields($event)\">\n \n <!-- FIELDS -->\n @for(edtField of block().fields; track edtField.code; let i = $index) {\n <div\n class=\"xfield-card\"\n cdkDrag\n [class.selected-field]=\"selectedFieldId === edtField.code\"\n (click)=\"selectField(edtField)\">\n <i class=\"ri-draggable field-drag-handle\" cdkDragHandle></i>\n\n <div class=\"xfield-card-icon\">\n <i [class]=\"edtField.field?.icon ?? ''\"></i> \n </div>\n <div class=\"xfield-card-body\">\n <b> {{edtField.fieldData.label}} \n @if(edtField.fieldData.visibilityRules) {\n <i class=\"branched-field ri-git-merge-line\"></i> \n <span class=\"vs-rule\"> {{edtField.fieldData.visibilityRules[0]?.fieldLabel ?? edtField.fieldData.visibilityRules[0]?.fieldName ?? '-'}} </span>\n }\n </b>\n <p> {{edtField.field?.label ?? edtField.type ?? edtField.fieldData.type}} </p>\n </div>\n <div class=\"xfield-card-actions\">\n <ui-button (click)=\"deleteField(edtField.code, $event)\" size=\"s\" icon=\"ri-delete-bin-line\" color=\"red\" type=\"ghost\" [iconOnly]=\"true\"></ui-button>\n </div>\n </div>\n\n }\n\n </div>\n <div class=\"new-field\">\n {{'form_builder.add_new_field' | uicTranslate}}\n <lib-field-type-selector (selectType)=\"addField($event)\"></lib-field-type-selector>\n </div>\n</div>\n","import { Component, computed, effect, HostListener, inject, Input, input, output, signal } from '@angular/core';\nimport { FIELDS_CONFIG, FieldConfig, FormField, FormSchema, SelectOptionsResolver } from '../dynamic-form/form.models';\nimport { UicButtonComponent } from '../button/button.component';\nimport { UicModalService } from '../../services/modal.service';\nimport { FormPreviewComponent } from './form-preview/form-preview.component';\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\nimport { FieldEditorComponent } from \"./block-editor/field-editor/field-editor.component\";\nimport { FormsModule } from '@angular/forms';\nimport { BlockEditorComponent } from './block-editor/block-editor.component';\nimport { AppSelectOption, UicSelectComponent } from '../inputs/select/select.component';\nimport { helperShowFormFromBuilder } from '../../helpers';\nimport { UicFormWrapperComponent } from '../dynamic-form/form-wrapper/form-wrapper.component';\nimport { UicTinyAlertService } from '../../services/tiny-alert.service';\nimport { UicTranslateService } from '../../services/translate.service';\n\nexport type EditableField = {\n id?: number | null;\n code: string;\n order: number;\n type?: string;\n field?: FieldConfig;\n fieldData: FormField;\n};\n\nexport type EditableBlock = {\n id?: number | null;\n code: string;\n order: number;\n title?: string;\n subtitle?: string;\n fields: EditableField[];\n};\n\nexport type EditableForm = {\n cols: number;\n blocks: EditableBlock[];\n};\n\n@Component({\n selector: 'ui-user-formbuilder',\n imports: [\n UicButtonComponent,\n UicFormWrapperComponent,\n UicTranslatePipe,\n FieldEditorComponent,\n FormsModule,\n BlockEditorComponent,\n UicSelectComponent\n ],\n templateUrl: './user-formbuilder.component.html',\n styleUrl: './user-formbuilder.component.scss'\n})\nexport class UicUserFormbuilderComponent {\n\n private readonly modalService = inject(UicModalService);\n private readonly tinyAlertService = inject(UicTinyAlertService);\n private readonly translateService = inject(UicTranslateService);\n\n @Input() disabled = false;\n @Input() formTitle = 'Nuevo formulario';\n @Input() optionSources: AppSelectOption[] = [];\n @Input() selectOptionsResolver?: SelectOptionsResolver;\n readOnly = input(true);\n editableFormInput = input<EditableForm>({ cols: 2, blocks: [] }, { alias: 'editableForm' });\n submitFormRequest = output<EditableForm>();\n\n nextBlockId = 1;\n nextFieldId = 1;\n\n editableCols = signal<number>(2);\n editableBlocks = signal<EditableBlock[]>([]);\n editingSnapshot = signal<EditableForm | null>(null);\n isReadOnly = signal(true);\n selectedField = signal<EditableField | null>(null);\n focusNewFieldCode = signal<string | null>(null);\n propertiesWidth = signal(250);\n previewSchema = computed<FormSchema>(() => helperShowFormFromBuilder(this.editableBlocks(), this.editableCols()));\n\n private isResizingProperties = false;\n private resizeStartX = 0;\n private resizeStartWidth = 0;\n\n dependencyOptions = computed<Record<string, AppSelectOption[]>>(() => {\n const currentSelected = this.selectedField();\n const fieldOptions = this.editableBlocks()\n .flatMap(block => block.fields)\n .filter(field => field.code !== currentSelected?.code)\n .map(field => ({\n id: field.code,\n text: field.fieldData.label || field.fieldData.name\n }));\n\n return {\n fieldName: fieldOptions,\n 'optionsSource.key': this.optionSources,\n 'optionsSource.dependsOn': fieldOptions\n };\n });\n\n constructor() {\n effect(() => {\n const readOnly = this.readOnly();\n this.isReadOnly.set(readOnly);\n\n if (readOnly) {\n this.editingSnapshot.set(null);\n }\n });\n\n effect(() => {\n const sourceForm = this.editableFormInput();\n if (!this.isReadOnly() && this.editingSnapshot()) {\n return;\n }\n\n this.editableCols.set(sourceForm.cols ?? 2);\n this.editableBlocks.set(this.prepareBlocksForLocalState(sourceForm.blocks ?? []));\n });\n\n effect(() => {\n const blocks = this.editableBlocks();\n const hydratedBlocks = this.hydrateBlocks(blocks);\n\n if (hydratedBlocks !== blocks) {\n this.editableBlocks.set(hydratedBlocks);\n return;\n }\n\n this.syncLocalCounters(blocks);\n\n const selectedCode = this.selectedField()?.code;\n if (!selectedCode) return;\n\n const selectedField = blocks\n .flatMap(block => block.fields)\n .find(field => field.code === selectedCode);\n\n if (!selectedField) {\n this.selectedField.set(null);\n return;\n }\n\n if (selectedField !== this.selectedField()) {\n this.selectedField.set(selectedField);\n }\n });\n }\n\n addBlock() {\n const newBlockId = this.nextBlockId++;\n this.editableBlocks.update(blocks => [...blocks, {\n title: '',\n order: blocks.length + 1,\n code: `block_${newBlockId}`,\n subtitle: '',\n fields: []\n }]);\n }\n\n deleteBlock(code: string) {\n const removedBlock = this.editableBlocks().find(block => block.code === code);\n if (removedBlock && this.selectedField() && removedBlock.fields.some(field => field.code === this.selectedField()?.code)) {\n this.selectedField.set(null);\n this.focusNewFieldCode.set(null);\n }\n\n this.editableBlocks.update(blocks => blocks.filter(block => block.code !== code));\n }\n\n addField(blockCode: string, newFieldType: FieldConfig) {\n const fieldCode = `field_${this.nextFieldId++}`;\n const updatedField: EditableField = {\n code: fieldCode,\n order: 0,\n type: newFieldType.value,\n field: newFieldType,\n fieldData: {\n name: fieldCode,\n label: 'New field',\n type: newFieldType.value\n }\n };\n\n this.editableBlocks.update(blocks => blocks.map(block =>\n block.code === blockCode\n ? { ...block, fields: [...block.fields, updatedField] }\n : block\n ));\n\n this.selectedField.set(updatedField);\n this.focusNewFieldCode.set(updatedField.code);\n }\n\n selectField(field: EditableField | null): void {\n this.selectedField.set(field);\n this.focusNewFieldCode.set(null);\n }\n\n startPropertiesResize(event: MouseEvent): void {\n event.preventDefault();\n this.isResizingProperties = true;\n this.resizeStartX = event.clientX;\n this.resizeStartWidth = this.propertiesWidth();\n }\n\n @HostListener('document:mousemove', ['$event'])\n onPropertiesResize(event: MouseEvent): void {\n if (!this.isResizingProperties) return;\n\n const nextWidth = this.resizeStartWidth + (this.resizeStartX - event.clientX);\n this.propertiesWidth.set(Math.min(Math.max(nextWidth, 250), 600));\n }\n\n @HostListener('document:mouseup')\n stopPropertiesResize(): void {\n this.isResizingProperties = false;\n }\n\n printForm() {\n this.modalService.openFloatingModal(FormPreviewComponent, {\n data: {\n schema: helperShowFormFromBuilder(this.editableBlocks(), this.editableCols(), true),\n selectOptionsResolver: this.selectOptionsResolver\n },\n size: 'medium'\n });\n }\n\n submitForm() {\n const duplicatedFieldName = this.getDuplicatedFieldName();\n if (duplicatedFieldName) {\n this.tinyAlertService.warning(\n this.translateService.translate('form_builder.validation.duplicate_identifier', {\n identifier: duplicatedFieldName\n })\n );\n return;\n }\n const blocksWithOrderedFields = this.editableBlocks().map(block => ({\n ...block,\n fields: block.fields.map((field, index) => ({\n ...field,\n order: index + 1,\n fieldData: this.prepareFieldDataForSubmit(field.fieldData)\n }))\n }));\n this.editableBlocks.set(blocksWithOrderedFields);\n this.isReadOnly.set(true);\n this.editingSnapshot.set(null);\n this.submitFormRequest.emit(\n {\n cols: this.editableCols(),\n blocks: blocksWithOrderedFields.map(block => ({\n ...block,\n fields: block.fields.map(({ field, ...restField }) => restField)\n }))\n }\n );\n }\n\n private getDuplicatedFieldName(): string | null {\n const usedNames = new Set<string>();\n\n for (const field of this.editableBlocks().flatMap(block => block.fields)) {\n const fieldName = field.fieldData.name?.trim();\n if (!fieldName) continue;\n\n if (usedNames.has(fieldName)) {\n return fieldName;\n }\n usedNames.add(fieldName);\n }\n return null;\n }\n\n enableEditMode() {\n this.editingSnapshot.set(this.deepClone({\n cols: this.editableCols(),\n blocks: this.editableBlocks()\n }));\n this.isReadOnly.set(false);\n }\n\n discardChanges() {\n const snapshot = this.editingSnapshot();\n if (!snapshot) return;\n\n this.editableCols.set(snapshot.cols ?? 2);\n this.editableBlocks.set(this.prepareBlocksForLocalState(snapshot.blocks ?? []));\n this.selectedField.set(null);\n this.focusNewFieldCode.set(null);\n this.editingSnapshot.set(null);\n this.isReadOnly.set(true);\n }\n\n onBlockChange(index: number, updated: EditableBlock) {\n this.editableBlocks.update(blocks => blocks.map((block, currentIndex) =>\n currentIndex === index ? updated : block\n ));\n }\n\n onFieldChange(updatedField: FormField) {\n const selected = this.selectedField();\n if (!selected) return;\n\n const fieldCode = selected.code;\n let updatedSelected: EditableField | null = null;\n\n this.editableBlocks.update(blocks => blocks.map(block => ({\n ...block,\n fields: block.fields.map(field => {\n if (field.code !== fieldCode) return field;\n\n const updated = {\n ...field,\n type: updatedField.type,\n fieldData: updatedField\n };\n updatedSelected = updated;\n return updated;\n })\n })));\n\n if (updatedSelected) {\n this.selectedField.set(updatedSelected);\n }\n }\n\n private prepareBlocksForLocalState(blocks: EditableBlock[]): EditableBlock[] {\n return this.hydrateBlocks(this.deepClone(blocks));\n }\n\n private syncLocalCounters(blocks: EditableBlock[]): void {\n this.nextBlockId = this.getNextCodeId(blocks.map(block => block.code), 'block_');\n this.nextFieldId = this.getNextCodeId(\n blocks.flatMap(block => block.fields.map(field => field.code)),\n 'field_'\n );\n }\n\n private getNextCodeId(codes: string[], prefix: string): number {\n const maxId = codes.reduce((max, code) => {\n if (!code.startsWith(prefix)) return max;\n const value = Number(code.slice(prefix.length));\n return Number.isNaN(value) ? max : Math.max(max, value);\n }, 0);\n\n return maxId + 1;\n }\n\n private hydrateBlocks(blocks: EditableBlock[]): EditableBlock[] {\n let changed = false;\n const dependencyLabelByName = new Map(\n blocks\n .flatMap(block => block.fields)\n .map(field => [\n field.fieldData.name,\n field.fieldData.label || field.fieldData.name\n ])\n );\n\n const hydratedBlocks = blocks.map(block => {\n let blockChanged = false;\n const hydratedFields = block.fields.map(field => {\n let hydratedField = field;\n\n if (!field.field && field.type) {\n const fieldConfig = FIELDS_CONFIG.find(config => config.value === field.type);\n if (fieldConfig) {\n changed = true;\n blockChanged = true;\n hydratedField = {\n ...hydratedField,\n field: fieldConfig\n };\n }\n }\n\n const visibilityRules = hydratedField.fieldData.visibilityRules;\n if (!visibilityRules?.length) return hydratedField;\n\n let rulesChanged = false;\n const hydratedRules = visibilityRules.map(rule => {\n const dependencyLabel = dependencyLabelByName.get(rule.fieldName) ?? rule.fieldName;\n if (rule.fieldLabel === dependencyLabel) return rule;\n\n changed = true;\n blockChanged = true;\n rulesChanged = true;\n return {\n ...rule,\n fieldLabel: dependencyLabel\n };\n });\n\n return !rulesChanged\n ? hydratedField\n : {\n ...hydratedField,\n fieldData: {\n ...hydratedField.fieldData,\n visibilityRules: hydratedRules\n }\n };\n });\n\n return blockChanged ? { ...block, fields: hydratedFields } : block;\n });\n\n return changed ? hydratedBlocks : blocks;\n }\n\n private removeNullProperties<T>(value: T): T {\n if (value === null) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value\n .filter(item => item !== null)\n .map(item => this.removeNullProperties(item)) as T;\n }\n\n if (typeof value === 'object' && value !== undefined) {\n return Object.fromEntries(\n Object.entries(value)\n .filter(([, entryValue]) => entryValue !== null)\n .map(([key, entryValue]) => [key, this.removeNullProperties(entryValue)])\n ) as T;\n }\n\n return value;\n }\n\n private prepareFieldDataForSubmit(fieldData: FormField): FormField {\n const cleanFieldData = this.removeNullProperties(fieldData) as FormField;\n const optionsSource = cleanFieldData.optionsSource;\n\n if (!optionsSource) {\n return cleanFieldData;\n }\n\n const cleanOptionsSource = Object.fromEntries(\n Object.entries(optionsSource)\n .filter(([, value]) => value !== null && value !== undefined && value !== '')\n );\n\n if (!cleanOptionsSource['key']) {\n const { optionsSource: _optionsSource, ...restFieldData } = cleanFieldData;\n return restFieldData;\n }\n\n return {\n ...cleanFieldData,\n optionsSource: cleanOptionsSource as FormField['optionsSource']\n };\n }\n\n private deepClone<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map(item => this.deepClone(item)) as T;\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, entryValue]) => [key, this.deepClone(entryValue)])\n ) as T;\n }\n\n return value;\n }\n}\n","<div class=\"formeditor\" [class.focused]=\"!isReadOnly()\">\r\n <div class=\"formeditor-header\">\r\n <div style=\"flex: 1 1;\">\r\n {{formTitle}} \r\n \r\n <div class=\"cols-selector\"> \r\n @if (isReadOnly()) {\r\n {{editableCols()}}\r\n }@else {\r\n <ui-select [options]=\"[{id: 1, text: '1'}, {id: 2, text: '2'}, {id: 3, text: '3'}, {id: 4, text: '4'}]\" [ngModel]=\"editableCols()\" (ngModelChange)=\"editableCols.set($event)\"></ui-select> \r\n }\r\n col(s)</div>\r\n </div>\r\n @if (isReadOnly()) {\r\n @if (!disabled) {\r\n <ui-button color=\"black\" icon=\"ri-edit-line\" text=\"Editar\" (click)=\"enableEditMode()\"></ui-button>\r\n }\r\n } @else {\r\n <ui-button color=\"black\" type=\"bordered\" icon=\"ri-eye-line\" [text]=\"'form_builder.preview_form' | uicTranslate\" (click)=\"printForm()\"></ui-button>\r\n <ui-button color=\"black\" type=\"bordered\" icon=\"ri-close-line\" text=\"Descartar cambios\" (click)=\"discardChanges()\"></ui-button>\r\n <ui-button color=\"black\" icon=\"ri-check-line\" [text]=\"'form_builder.submit_form' | uicTranslate\" (click)=\"submitForm()\"></ui-button>\r\n }\r\n </div>\r\n @if (!isReadOnly()) {\r\n <div class=\"formeditor-body\">\r\n \r\n <!-- BLOCKS -->\r\n <div class=\"formeditor-overflow\">\r\n <div class=\"formeditor-workarea\">\r\n @for (block of editableBlocks(); track block.code; let i = $index) {\r\n <lib-block-editor \r\n [block]=\"block\"\r\n [selectedFieldId]=\"selectedField()?.code ?? null\"\n (blockChange)=\"onBlockChange(i, $event)\"\n (addFieldRequest)=\"addField(block.code, $event)\"\n (notifySelectedField)=\"selectField($event)\"\n (deleteBlock)=\"deleteBlock($event)\">\n </lib-block-editor>\n }\r\n <ui-button type=\"bordered\" icon=\"ri-add-line\" color=\"black\" [text]=\"'form_builder.add_block' | uicTranslate\" (click)=\"addBlock()\"></ui-button>\r\n </div>\r\n </div>\r\n <!-- PROPERTIES -->\r\n <div class=\"formeditor-properties\" [style.width.px]=\"propertiesWidth()\">\n <div\n class=\"formeditor-properties-resize\"\n (mousedown)=\"startPropertiesResize($event)\">\n </div>\n <h3>Propiedades</h3>\n <div class=\"formeditor-properties-form\">\n @if (selectedField() ) {\r\n <lib-field-editor \n [config]=\"selectedField()!\"\n [focusRequiredField]=\"focusNewFieldCode() === selectedField()?.code\"\n [options]=\"dependencyOptions()\"\n (fieldChange)=\"onFieldChange($event)\">\n </lib-field-editor>\n }@else{\r\n <div class=\"no-selected-field\">\r\n <i class=\"ri-edit-box-line\"></i>\r\n <p>{{'form_builder.select_field_to_edit' | uicTranslate}}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }@else {\r\n <div class=\"form-preview\">\r\n <ui-form-wrapper \n [schema]=\"previewSchema()\"\n [selectOptionsResolver]=\"selectOptionsResolver\"\n [showButtons]=\"false\">\n </ui-form-wrapper>\n </div>\r\n }\r\n </div>\r\n\r\n","import { Component, Inject, OnDestroy, ViewChild, ViewChildren, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { AppSelectOption } from '../../inputs/select/select.component';\nimport { MODAL_DATA } from '../../../services/modal.constant';\nimport { UicFormWrapperComponent } from '../../dynamic-form/form-wrapper/form-wrapper.component';\nimport { FormField, FormResult, uicFormValuesRecord } from '../../dynamic-form/form.models';\nimport { ConditionField, UicConditionDefinition } from '../rule-builder.component';\nimport { UicButtonComponent } from '../../button/button.component';\nimport { UicInputComponent } from '../../inputs/input/input.component';\nimport { UicTranslatePipe } from '../../../pipes/translate.pipe';\nimport { UicTranslateService } from '../../../services/translate.service';\nimport { UiModalRef } from '../../../services/modaRef';\n\n@Component({\n selector: 'lib-rule-definirion',\n imports: [\n FormsModule,\n UicFormWrapperComponent,\n UicInputComponent,\n UicButtonComponent,\n UicTranslatePipe\n ],\n templateUrl: './rule-definirion.component.html',\n styleUrl: './rule-definirion.component.scss'\n})\nexport class RuleDefinirionComponent implements OnDestroy {\n\n newRule = false;\n fields: FormField[];\n\n conditions: UicConditionDefinition[] = [];\n selectedConditionReference: string | null = null;\n searchTerm = '';\n currentPage = 1;\n readonly pageSize = 5;\n customNamesEnabled;\n private readonly translate = inject(UicTranslateService);\n private readonly ref = inject(UiModalRef);\n private readonly languageSubscription: Subscription;\n\n mainConditionFieldsData: ConditionField[] = [];\n\n constructor(@Inject(MODAL_DATA) public data: {\n conditions: UicConditionDefinition[],\n customNamesEnabled: boolean,\n conditionOperators: AppSelectOption[],\n conditionFields: ConditionField[],\n selectedConditionReference?: string | number | null\n }) {\n this.customNamesEnabled = data.customNamesEnabled;\n this.conditions = data.conditions;\n this.mainConditionFieldsData = data.conditionFields;\n\n this.selectedConditionReference = data.selectedConditionReference == null\n ? null\n : String(data.selectedConditionReference);\n this.fields = this.buildFields();\n this.languageSubscription = this.translate.language$.subscribe(() => {\n this.fields = this.buildFields();\n });\n }\n\n ngOnDestroy(): void {\n this.languageSubscription.unsubscribe();\n }\n\n trackingField = '';\n initialValues = {};\n updateFormNewRule(fr:uicFormValuesRecord){\n const fcode = fr['fieldCode'];\n if ( this.trackingField === fcode) return;\n this.trackingField = fcode;\n this.initialValues = {...fr,value:''};\n const field = this.mainConditionFieldsData.find(f => f.id === fcode);\n \n this.fields = [...this.buildFields(field?.type||'text',field?.options)];\n }\n\n get filteredConditions(): UicConditionDefinition[] {\n const normalizedSearch = this.normalizeText(this.searchTerm);\n const conditions = !normalizedSearch\n ? this.conditions\n : this.conditions.filter(condition =>\n this.normalizeText(condition.description).includes(normalizedSearch) ||\n this.normalizeText(condition.fieldName).includes(normalizedSearch) ||\n this.normalizeText(condition.fieldCode).includes(normalizedSearch) ||\n this.normalizeText(condition.operatorName).includes(normalizedSearch) ||\n this.normalizeText(condition.operatorCode).includes(normalizedSearch) ||\n this.normalizeText(condition.value).includes(normalizedSearch)\n );\n\n return [...conditions].sort((left, right) => {\n const leftSelected = this.isSelected(left) ? 1 : 0;\n const rightSelected = this.isSelected(right) ? 1 : 0;\n return rightSelected - leftSelected;\n });\n }\n\n get paginatedConditions(): UicConditionDefinition[] {\n const start = (this.currentPage - 1) * this.pageSize;\n return this.filteredConditions.slice(start, start + this.pageSize);\n }\n\n get totalPages(): number {\n return Math.max(1, Math.ceil(this.filteredConditions.length / this.pageSize));\n }\n\n get canGoToPreviousPage(): boolean {\n return this.currentPage > 1;\n }\n\n get canGoToNextPage(): boolean {\n return this.currentPage < this.totalPages;\n }\n\n onSearchTermChange(): void {\n this.currentPage = 1;\n }\n\n goToPreviousPage(): void {\n if (!this.canGoToPreviousPage) {\n return;\n }\n\n this.currentPage -= 1;\n }\n\n goToNextPage(): void {\n if (!this.canGoToNextPage) {\n return;\n }\n\n this.currentPage += 1;\n }\n\n createAndSelectRule(fr:FormResult) {\n if (fr.result && fr.form){\n const fieldCode = fr.form['fieldCode'];\n const operatoCode = fr.form['operatorCode'];\n const nf: UicConditionDefinition = {\n id: 0,\n description: fr.form['description'] ?? `${this.data.conditionFields.find(f => f.id === fieldCode)?.text ?? fieldCode} ${this.data.conditionOperators.find(o => o.id === operatoCode)?.text ?? operatoCode} ${fr.form['value']}`,\n fieldCode: fieldCode,\n fieldName: this.data.conditionFields.find(f => f.id === fieldCode)?.text ?? '',\n operatorCode: operatoCode,\n operatorName: this.data.conditionOperators.find(o => o.id === operatoCode)?.text ?? '',\n value: fr.form['value']\n };\n this.ref.closeFloating(nf);\n }\n }\n\n select(condition: UicConditionDefinition){\n this.ref.closeFloating(condition);\n }\n\n isSelected(condition: UicConditionDefinition): boolean {\n return this.selectedConditionReference === String(this.getConditionReference(condition));\n }\n\n highlightSearch(value: string | null | undefined): string {\n const text = String(value ?? '');\n const query = this.searchTerm.trim();\n if (!query) {\n return this.escapeHtml(text);\n }\n\n const escapedQuery = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escapedQuery})`, 'gi');\n return this.escapeHtml(text).replace(regex, '<mark>$1</mark>');\n }\n\n private buildFields(type:'text'|'number'|'date'|'catalog' = 'text', options?:AppSelectOption[]): FormField[] {\n const fields:FormField[] = [\n {\n name: 'fieldCode',\n label: this.translate.translate('rule_builder.definition.form.field'),\n type: 'select',\n options: this.data.conditionFields,\n required: true,\n selectSearchEnabled: true,\n colSpan: 2\n },\n {\n name: 'operatorCode',\n label: this.translate.translate('rule_builder.definition.form.operator'),\n type: 'select',\n options: this.data.conditionOperators,\n required: true\n }\n ];\n if (this.customNamesEnabled) {\n fields.unshift({\n name: 'description',\n label: this.translate.translate('rule_builder.definition.form.description'),\n type: 'text',\n required: true,\n colSpan: 2\n });\n }\n \n if (type === 'catalog'){\n fields.push(\n {\n name: 'value',\n label: this.translate.translate('rule_builder.definition.form.value'),\n type: 'select',\n options: options,\n required: true\n });\n } else{\n fields.push(\n {\n name: 'value',\n label: this.translate.translate('rule_builder.definition.form.value'),\n type,\n required: true\n });\n }\n\n return fields;\n }\n\n private normalizeText(value: string | null | undefined): string {\n return String(value ?? '')\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .trim()\n .toLowerCase();\n }\n\n private escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n private getConditionReference(condition: UicConditionDefinition): string | number {\n return condition.id === 0 ? (condition.temporalId ?? '') : condition.id;\n }\n}\n","\n@if (newRule) {\n <ui-form-wrapper #formWrapper \n (formChange)=\"updateFormNewRule($event)\"\n (formSubmit)=\"createAndSelectRule($event)\" \n [initialValues]=\"initialValues\"\n [fields]=\"fields\" \n [cols]=\"2\"></ui-form-wrapper>\n <div class=\"condition-btns\">\n <ui-button icon=\"ri-arrow-left-line\" (click)=\"newRule = false\" color=\"black\" type=\"bordered\">{{ 'rule_builder.definition.cancel_and_back' | uicTranslate }}</ui-button>\n <ui-button (click)=\"formWrapper.submit()\" icon=\"ri-check-line\" color=\"black\">{{ 'rule_builder.definition.create_and_select' | uicTranslate }}</ui-button>\n </div>\n} @else {\n <div class=\"condition-searcher\">\n <ui-input>\n <input [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchTermChange()\" [placeholder]=\"'rule_builder.definition.search_placeholder' | uicTranslate\" type=\"text\">\n </ui-input>\n <ui-button (click)=\"newRule = true\" color=\"black\">{{ 'rule_builder.definition.new_rule' | uicTranslate }}</ui-button>\n </div>\n\n @if (paginatedConditions.length > 0) {\n @for (condition of paginatedConditions; track $index) {\n <div class=\"condition\" [class.condition-selected]=\"isSelected(condition)\">\n <i class=\"ri-align-item-horizontal-center-line\"></i>\n <div style=\"flex: 1 1;\">\n <div class=\"condition-title\"><span [innerHTML]=\"highlightSearch(condition.description)\"></span></div>\n @if (customNamesEnabled) {\n <div class=\"condition-body\">\n <span class=\"condition-field\" [innerHTML]=\"highlightSearch(condition.fieldName)\"></span>\n <span class=\"condition-operator\" [innerHTML]=\"highlightSearch(condition.operatorName)\"></span>\n <span class=\"condition-value\" [innerHTML]=\"highlightSearch(condition.value)\"></span>\n </div>\n }\n </div>\n @if (!isSelected(condition)) {\n <ui-button (click)=\"select(condition)\" color=\"primary\" size=\"s\" type=\"bordered\">{{ 'common.select' | uicTranslate }}</ui-button>\n }\n </div>\n }\n } @else {\n <div class=\"condition\">\n <div class=\"condition-emptytext\">\n {{ 'rule_builder.definition.no_results' | uicTranslate }}\n </div>\n </div>\n }\n\n <div class=\"condition-pagination\">\n <ui-button [disabled]=\"!canGoToPreviousPage\" (click)=\"goToPreviousPage()\" color=\"black\" size=\"s\" type=\"bordered\">{{ 'rule_builder.definition.previous' | uicTranslate }}</ui-button>\n <div><b>{{ currentPage }}</b> / {{ totalPages }}</div>\n <ui-button [disabled]=\"!canGoToNextPage\" (click)=\"goToNextPage()\" color=\"black\" size=\"s\" type=\"bordered\">{{ 'rule_builder.definition.next' | uicTranslate }}</ui-button>\n </div>\n}\n","import { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\r\nimport { UicButtonComponent } from '../button/button.component';\r\nimport { AppSelectOption } from '../inputs/select/select.component';\r\nimport { UicToolTipDirective } from '../../directives/tool-tip.directive';\r\nimport { UicTranslatePipe } from '../../pipes/translate.pipe';\r\nimport { UicTranslateService } from '../../services/translate.service';\r\nimport { UicModalService } from '../../services/modal.service';\r\nimport { RuleDefinirionComponent } from './rule-definirion/rule-definirion.component';\r\n\r\n@Component({\r\n selector: 'ui-rule-builder',\r\n imports: [\r\n CommonModule,\r\n UicButtonComponent,\r\n FormsModule,\r\n UicToolTipDirective,\r\n UicTranslatePipe\r\n ],\r\n templateUrl: './rule-builder.component.html',\r\n styleUrl: './rule-builder.component.scss'\r\n})\r\nexport class UicRuleBuilderComponent implements OnInit {\r\n private conditionsInitialized = false;\r\n private emitConditionsOnInit = false;\r\n private emitRuleDefinitionOnInit = false;\r\n private conditionsEmitScheduled = false;\r\n private ruleDefinitionEmitScheduled = false;\r\n private _conditions: UicConditionDefinition[] = [];\r\n \r\n @Input() disabled = false;\r\n @Input() customNamesEnabled = false;\r\n @Input()\r\n set conditions(value: UicConditionDefinition[] | null | undefined) {\r\n this._conditions = Array.isArray(value) ? value.map(condition => ({ ...condition })) : [];\r\n const conditionsNormalized = this.refreshAvailableConditions();\r\n const syncResult = this.syncConditionsWithPersistedConditions();\r\n this.syncNextTemporalConditionId();\r\n if (this.conditionsInitialized && (conditionsNormalized || syncResult.conditionsCleaned)) {\r\n this.scheduleConditionsStateEmit();\r\n }\r\n if (!this.conditionsInitialized && (conditionsNormalized || syncResult.conditionsCleaned)) {\r\n this.emitConditionsOnInit = true;\r\n }\r\n if (this.conditionsInitialized && syncResult.referencesUpdated) {\r\n this.scheduleRuleDefinitionStateEmit();\r\n }\r\n if (!this.conditionsInitialized && syncResult.referencesUpdated) {\r\n this.emitRuleDefinitionOnInit = true;\r\n }\r\n this.conditionsInitialized = true;\r\n }\r\n\r\n get conditions(): UicConditionDefinition[] {\r\n return this._conditions;\r\n }\r\n\r\n @Input() conditionOperators: AppSelectOption[] = [];\r\n @Input() conditionFields: ConditionField[] = [];\r\n \r\n conditionLabels: Record<string, string> = {};\r\n editing = false;\r\n private nextTemporalConditionId = 1;\r\n private externalRuleDefinition: RuleBuilderValue = this.createEmptyRuleBuilderValue();\r\n\r\n @Input() ruleTitle = '';\r\n @Input()\r\n set ruleDefinition(value: RuleBuilderValue | null | undefined) {\r\n const normalizedValue = this.normalizeRuleBuilderValue(value);\r\n if (this.areRuleBuilderValuesEqual(normalizedValue, this.externalRuleDefinition)) {\r\n return;\r\n }\r\n\r\n this.externalRuleDefinition = normalizedValue;\r\n this.editorRules = this.getRulesFromDefinition(normalizedValue.definition);\r\n const syncResult = this.syncConditionsWithPersistedConditions();\r\n this.syncNextTemporalConditionId();\r\n if (this.conditionsInitialized && syncResult.conditionsCleaned) {\r\n this.scheduleConditionsStateEmit();\r\n }\r\n if (this.conditionsInitialized && syncResult.referencesUpdated) {\r\n this.scheduleRuleDefinitionStateEmit();\r\n }\r\n if (!this.conditionsInitialized && syncResult.conditionsCleaned) {\r\n this.emitConditionsOnInit = true;\r\n }\r\n if (!this.conditionsInitialized && syncResult.referencesUpdated) {\r\n this.emitRuleDefinitionOnInit = true;\r\n }\r\n }\r\n\r\n get ruleDefinition(): RuleBuilderValue {\r\n return this.externalRuleDefinition;\r\n }\r\n\r\n @Output() ruleDefinitionChange = new EventEmitter<RuleBuilderValue>();\r\n @Output() conditionsChange = new EventEmitter<UicConditionDefinition[]>();\r\n\r\n editorRules: Rule[] = [];\r\n\r\n private readonly translate = inject(UicTranslateService);\r\n private readonly modal = inject(UicModalService);\r\n\r\n get resolvedTitle(): string {\r\n return this.ruleTitle || this.translate.translate('rule_builder.title');\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.conditionsInitialized) {\r\n this.emitConditionsOnInit = this.refreshAvailableConditions();\r\n this.conditionsInitialized = true;\r\n }\r\n if (this.editorRules.length === 0 && this.ruleDefinition.definition.trim()) {\r\n this.editorRules = this.getRulesFromDefinition(this.ruleDefinition.definition);\r\n }\r\n const syncResult = this.syncConditionsWithPersistedConditions();\r\n this.syncNextTemporalConditionId();\r\n if (syncResult.conditionsCleaned) {\r\n this.emitConditionsOnInit = true;\r\n }\r\n if (syncResult.referencesUpdated) {\r\n this.emitRuleDefinitionOnInit = true;\r\n }\r\n if (this.emitConditionsOnInit) {\r\n this.scheduleConditionsStateEmit();\r\n this.emitConditionsOnInit = false;\r\n }\r\n if (this.emitRuleDefinitionOnInit) {\r\n this.scheduleRuleDefinitionStateEmit();\r\n this.emitRuleDefinitionOnInit = false;\r\n }\r\n }\r\n\r\n addRule(rules: Rule[] = this.editorRules): void {\r\n const newRuleIndex = this.appendExpression(rules, this.createConditionRule());\r\n this.syncRuleDefinition();\r\n this.manageRules(this.editorRules, newRuleIndex);\r\n }\r\n\r\n addGroup(rules: Rule[] = this.editorRules): void {\r\n const newRuleIndex = this.appendExpression(rules, this.createGroupRule());\r\n this.syncRuleDefinition();\r\n const createdGroup = this.editorRules[newRuleIndex];\r\n if (createdGroup?.type === 'group') {\r\n this.manageRules(createdGroup.rules ?? [], 0);\r\n }\r\n }\r\n\r\n changeOperator(rules: Rule[], idx: number): void {\r\n const rule = rules[idx];\r\n if (rule?.type !== 'operator') {\r\n return;\r\n }\r\n\r\n rule.value = rule.value === 'AND' ? 'OR' : 'AND';\r\n }\r\n\r\n removeRule(rules: Rule[], idx: number): void {\r\n const rule = rules[idx];\r\n if (!rule || rule.type === 'operator') {\r\n return;\r\n }\r\n\r\n rules.splice(idx, 1);\r\n this.syncRuleDefinition();\r\n }\r\n\r\n manageRules(rules: Rule[], idx: number): void {\r\n const targetRule = rules[idx];\r\n if (targetRule?.type !== 'condition') {\r\n return;\r\n }\r\n\r\n this.modal.openFloatingModal(RuleDefinirionComponent, {\r\n title: this.translate.translate('rule_builder.rules_management'),\r\n data: {\r\n conditions: this.conditions,\r\n conditionOperators: this.conditionOperators,\r\n conditionFields: this.conditionFields,\r\n selectedConditionReference: targetRule.value ?? null,\r\n },\r\n size:'medium'\r\n }).afterClosed().subscribe( r => {\r\n if (r.status) {\r\n const condition = r.data as UicConditionDefinition;\r\n const conditionId = this.upsertCondition(condition);\r\n targetRule.value = conditionId;\r\n this.syncRuleDefinition();\r\n }\r\n });\r\n }\r\n\r\n print(): void {\r\n const normalizedRules = this.normalizeRules(this.cloneRules(this.editorRules));\r\n this.editorRules = normalizedRules;\r\n this.markRulesAsSaved(this.editorRules);\r\n this.emitRuleDefinitionState();\r\n this.editing = false;\r\n }\r\n\r\n reset(): void {\r\n this.editorRules = this.getRulesFromDefinition(this.ruleDefinition.definition);\r\n this.editing = false;\r\n }\r\n\r\n getOutput(): RuleOutput {\r\n this.editorRules = this.normalizeRules(this.cloneRules(this.editorRules));\r\n return this.buildRuleOutput();\r\n }\r\n\r\n getConditionLabel(value: string | number | null | undefined): string {\r\n return this.resolveConditionLabel(value) ?? '';\r\n }\r\n\r\n isConditionLabelPending(value: string | number | null | undefined): boolean {\r\n if (value == null || value === '') {\r\n return false;\r\n }\r\n\r\n return !this.hasConditionReference(value);\r\n }\r\n\r\n getConditionDetailTip(value: string | number | null | undefined): string {\r\n const matchedCondition = this.conditions.find(condition => String(this.getConditionReference(condition)) === String(value));\r\n if (!matchedCondition) {\r\n return '';\r\n }\r\n\r\n return [\r\n matchedCondition.fieldName,\r\n matchedCondition.operatorName,\r\n matchedCondition.value\r\n ].filter(Boolean).join(' ');\r\n }\r\n\r\n getOperatorLabel(value: Rule['value']): string {\r\n const normalizedValue = value === 'OR' ? 'OR' : 'AND';\r\n const translationKey = normalizedValue === 'AND'\r\n ? 'rule_builder.operators.and'\r\n : 'rule_builder.operators.or';\r\n return this.translate.translate(translationKey);\r\n }\r\n\r\n private appendExpression(rules: Rule[], expression: Rule): number {\r\n const normalizedRules = this.normalizeRules(rules, true);\r\n rules.length = 0;\r\n rules.push(...normalizedRules);\r\n\r\n if (rules.length > 0) {\r\n rules.push({ type: 'operator', value: 'AND' });\r\n }\r\n\r\n rules.push(expression);\r\n return rules.length - 1;\r\n }\r\n\r\n private syncRuleDefinition(): void {\r\n this.editorRules = this.normalizeRules(this.editorRules, true);\r\n }\r\n\r\n private createConditionRule(): Rule {\r\n return {\r\n type: 'condition',\r\n value: null,\r\n unsaved: true\r\n };\r\n }\r\n\r\n private createGroupRule(): Rule {\r\n return {\r\n type: 'group',\r\n rules: [this.createConditionRule()],\r\n unsaved: true\r\n };\r\n }\r\n\r\n private collectConditionValues(rules: Rule[]): string[] {\r\n return rules.flatMap(rule => {\r\n if (rule.type === 'condition' && rule.value) {\r\n return [String(rule.value)];\r\n }\r\n\r\n if (rule.type === 'group' && rule.rules) {\r\n return this.collectConditionValues(rule.rules);\r\n }\r\n\r\n return [];\r\n });\r\n }\r\n\r\n private normalizeRules(rules: Rule[], preserveIncompleteUnsaved = false): Rule[] {\r\n const normalized: Rule[] = [];\r\n let expectsExpression = true;\r\n\r\n for (const rule of rules) {\r\n if (rule.type === 'condition') {\r\n const rawValue = rule.value;\r\n const normalizedValue = typeof rawValue === 'string' ? rawValue.trim() : rawValue;\r\n if (!expectsExpression) {\r\n continue;\r\n }\r\n\r\n if (normalizedValue == null || normalizedValue === '') {\r\n if (preserveIncompleteUnsaved && rule.unsaved) {\r\n normalized.push({\r\n ...rule,\r\n value: normalizedValue\r\n });\r\n expectsExpression = false;\r\n }\r\n continue;\r\n }\r\n\r\n rule.value = normalizedValue;\r\n normalized.push(rule);\r\n expectsExpression = false;\r\n continue;\r\n }\r\n\r\n if (rule.type === 'group') {\r\n const groupRules = this.normalizeRules(rule.rules ?? [], preserveIncompleteUnsaved);\r\n if (groupRules.length === 0 || !this.isExpression(groupRules[0]) || !expectsExpression) {\r\n continue;\r\n }\r\n\r\n rule.rules = groupRules;\r\n normalized.push(rule);\r\n expectsExpression = false;\r\n continue;\r\n }\r\n\r\n if (rule.type === 'operator') {\r\n const value = rule.value === 'OR' ? 'OR' : 'AND';\r\n if (expectsExpression) {\r\n continue;\r\n }\r\n\r\n rule.value = value;\r\n normalized.push(rule);\r\n expectsExpression = true;\r\n }\r\n }\r\n\r\n if (normalized.at(-1)?.type === 'operator') {\r\n normalized.pop();\r\n }\r\n\r\n return normalized;\r\n }\r\n\r\n private cloneRules(rules: Rule[]): Rule[] {\r\n return rules.map(rule => ({\r\n ...rule,\r\n rules: rule.rules ? this.cloneRules(rule.rules) : undefined\r\n }));\r\n }\r\n\r\n private buildExpression(rules: Rule[]): string {\r\n return this.normalizeRules(rules)\r\n .map(rule => {\r\n if (rule.type === 'condition') {\r\n return `{{${rule.value}}}`;\r\n }\r\n\r\n if (rule.type === 'operator') {\r\n return rule.value ?? 'AND';\r\n }\r\n\r\n const innerExpression = this.buildExpression(rule.rules ?? []);\r\n return `( ${innerExpression} )`;\r\n })\r\n .join(' ');\r\n }\r\n\r\n private isExpression(rule: Rule): boolean {\r\n return rule.type === 'condition' || rule.type === 'group';\r\n }\r\n\r\n private parseExpression(expression: string): Rule[] {\r\n const tokens = this.tokenizeExpression(expression);\r\n const { rules } = this.parseTokens(tokens);\r\n return this.normalizeRules(rules);\r\n }\r\n\r\n private getRulesFromDefinition(definition: string): Rule[] {\r\n const rules = definition.trim()\r\n ? this.parseExpression(definition)\r\n : this.normalizeRules([]);\r\n this.markRulesAsSaved(rules);\r\n return rules;\r\n }\r\n\r\n private markRulesAsSaved(rules: Rule[]): void {\r\n for (const rule of rules) {\r\n rule.unsaved = false;\r\n if (rule.type === 'group' && rule.rules) {\r\n this.markRulesAsSaved(rule.rules);\r\n }\r\n }\r\n }\r\n\r\n private tokenizeExpression(expression: string): string[] {\r\n const matches = expression.match(/\\{\\{[^}]+\\}\\}|\\(|\\)|\\bAND\\b|\\bOR\\b/gi);\r\n return matches ?? [];\r\n }\r\n\r\n private parseTokens(tokens: string[], startIndex = 0): { rules: Rule[]; nextIndex: number } {\r\n const rules: Rule[] = [];\r\n let index = startIndex;\r\n\r\n while (index < tokens.length) {\r\n const token = tokens[index];\r\n const normalizedToken = token.toUpperCase();\r\n\r\n if (token === ')') {\r\n break;\r\n }\r\n\r\n if (token === '(') {\r\n const groupResult = this.parseTokens(tokens, index + 1);\r\n rules.push({ type: 'group', rules: groupResult.rules });\r\n index = groupResult.nextIndex + 1;\r\n continue;\r\n }\r\n\r\n if (normalizedToken === 'AND' || normalizedToken === 'OR') {\r\n rules.push({ type: 'operator', value: normalizedToken });\r\n index++;\r\n continue;\r\n }\r\n\r\n const conditionMatch = token.match(/^\\{\\{\\s*(.*?)\\s*\\}\\}$/);\r\n if (conditionMatch) {\r\n rules.push({ type: 'condition', value: this.resolveConditionValue(conditionMatch[1]) });\r\n }\r\n\r\n index++;\r\n }\r\n\r\n return { rules, nextIndex: index };\r\n }\r\n\r\n private resolveConditionValue(rawValue: string): string | number {\r\n const trimmedValue = rawValue.trim();\r\n const matchedCondition = this.conditions.find(condition => String(this.getConditionReference(condition)) === trimmedValue);\r\n return matchedCondition ? this.getConditionReference(matchedCondition) : trimmedValue;\r\n }\r\n\r\n private resolveConditionLabel(value: string | number | null | undefined): string | null {\r\n const matchedCondition = this.conditions.find(condition => String(this.getConditionReference(condition)) === String(value));\r\n return matchedCondition?.description ?? null;\r\n }\r\n\r\n private hasConditionReference(value: string | number): boolean {\r\n return this.conditions.some(condition => String(this.getConditionReference(condition)) === String(value));\r\n }\r\n\r\n private upsertCondition(condition: UicConditionDefinition): string | number {\r\n const normalizedCondition = { ...condition };\r\n\r\n if (normalizedCondition.id === 0) {\r\n // Buscar si ya existe una condición con los mismos valores\r\n const existingCondition = this.conditions.find(c => \r\n c.fieldCode === normalizedCondition.fieldCode &&\r\n c.operatorCode === normalizedCondition.operatorCode &&\r\n c.value === normalizedCondition.value\r\n );\r\n\r\n if (existingCondition) {\r\n // Si existe, retornar la referencia de la condición existente\r\n return this.getConditionReference(existingCondition);\r\n }\r\n\r\n // Si no existe, generar un nuevo temporalId\r\n normalizedCondition.temporalId = normalizedCondition.temporalId ?? this.getNextTemporalConditionId();\r\n }\r\n\r\n const conditionReference = this.getConditionReference(normalizedCondition);\r\n const existingIndex = this.conditions.findIndex(item => String(this.getConditionReference(item)) === String(conditionReference));\r\n if (existingIndex >= 0) {\r\n this._conditions[existingIndex] = normalizedCondition;\r\n } else {\r\n this._conditions = [...this._conditions, normalizedCondition];\r\n }\r\n\r\n this.refreshAvailableConditions();\r\n this.scheduleConditionsStateEmit();\r\n\r\n return conditionReference;\r\n }\r\n\r\n private buildRuleOutput(): RuleOutput {\r\n const definition = this.buildExpression(this.editorRules);\r\n const usedConditionReferences = new Set(this.collectConditionValues(this.editorRules));\r\n const rulesToCreate = this.conditions\r\n .filter(condition => condition.id === 0 && !!condition.temporalId && usedConditionReferences.has(String(this.getConditionReference(condition))))\r\n .map(condition => ({\r\n temporalId: condition.temporalId as string,\r\n fieldCode: condition.fieldCode,\r\n operatorCode: condition.operatorCode,\r\n value: condition.value,\r\n description: condition.description\r\n }));\r\n\r\n return {\r\n definition,\r\n rulesToCreate\r\n };\r\n }\r\n\r\n private emitRuleDefinitionState(): void {\r\n const output = this.buildRuleOutput();\r\n this.externalRuleDefinition = output;\r\n this.ruleDefinitionChange.emit(output);\r\n }\r\n\r\n private emitConditionsState(): void {\r\n this.conditionsChange.emit(this._conditions.map(condition => ({ ...condition })));\r\n }\r\n\r\n private scheduleRuleDefinitionStateEmit(): void {\r\n if (this.ruleDefinitionEmitScheduled) {\r\n return;\r\n }\r\n\r\n this.ruleDefinitionEmitScheduled = true;\r\n queueMicrotask(() => {\r\n this.ruleDefinitionEmitScheduled = false;\r\n this.emitRuleDefinitionState();\r\n });\r\n }\r\n\r\n private scheduleConditionsStateEmit(): void {\r\n if (this.conditionsEmitScheduled) {\r\n return;\r\n }\r\n\r\n this.conditionsEmitScheduled = true;\r\n queueMicrotask(() => {\r\n this.conditionsEmitScheduled = false;\r\n this.emitConditionsState();\r\n });\r\n }\r\n\r\n private normalizeRuleBuilderValue(value: RuleBuilderValue | null | undefined): RuleBuilderValue {\r\n if (!value) {\r\n return this.createEmptyRuleBuilderValue();\r\n }\r\n\r\n return {\r\n definition: String(value.definition ?? ''),\r\n rulesToCreate: Array.isArray(value.rulesToCreate)\r\n ? value.rulesToCreate.map(rule => ({ ...rule }))\r\n : []\r\n };\r\n }\r\n\r\n private createEmptyRuleBuilderValue(): RuleBuilderValue {\r\n return {\r\n definition: '',\r\n rulesToCreate: []\r\n };\r\n }\r\n\r\n private areRuleBuilderValuesEqual(left: RuleBuilderValue, right: RuleBuilderValue): boolean {\r\n return left.definition === right.definition\r\n && JSON.stringify(left.rulesToCreate) === JSON.stringify(right.rulesToCreate);\r\n }\r\n\r\n private refreshAvailableConditions(): boolean {\r\n let changed = false;\r\n\r\n this._conditions = this._conditions.map(condition => {\r\n if (condition.id !== 0 || condition.temporalId) {\r\n return condition;\r\n }\r\n\r\n changed = true;\r\n return {\r\n ...condition,\r\n temporalId: this.getNextTemporalConditionId()\r\n };\r\n });\r\n\r\n this.conditionLabels = this._conditions.reduce<Record<string, string>>((labels, condition) => {\r\n labels[String(this.getConditionReference(condition))] = condition.description;\r\n return labels;\r\n }, {});\r\n\r\n return changed;\r\n }\r\n\r\n private syncConditionsWithPersistedConditions(): {\r\n referencesUpdated: boolean;\r\n conditionsCleaned: boolean;\r\n } {\r\n const persistedConditionsByTemporalId = new Map<string, UicConditionDefinition>(\r\n this._conditions\r\n .filter(condition => condition.id !== 0 && !!condition.temporalId)\r\n .map(condition => [String(condition.temporalId), condition])\r\n );\r\n\r\n if (persistedConditionsByTemporalId.size === 0) {\r\n return {\r\n referencesUpdated: false,\r\n conditionsCleaned: false\r\n };\r\n }\r\n\r\n const referencesUpdated = this.replaceConditionReferences(this.editorRules, persistedConditionsByTemporalId);\r\n const previousLength = this._conditions.length;\r\n this._conditions = this._conditions.filter(condition => {\r\n return condition.id !== 0\r\n || !condition.temporalId\r\n || !persistedConditionsByTemporalId.has(String(condition.temporalId));\r\n });\r\n\r\n return {\r\n referencesUpdated,\r\n conditionsCleaned: previousLength !== this._conditions.length\r\n };\r\n }\r\n\r\n private replaceConditionReferences(\r\n rules: Rule[],\r\n persistedConditionsByTemporalId: Map<string, UicConditionDefinition>\r\n ): boolean {\r\n let updated = false;\r\n\r\n for (const rule of rules) {\r\n if (rule.type === 'condition' && typeof rule.value === 'string') {\r\n const persistedCondition = persistedConditionsByTemporalId.get(rule.value);\r\n if (persistedCondition) {\r\n rule.value = persistedCondition.id;\r\n rule.unsaved = false;\r\n updated = true;\r\n }\r\n }\r\n\r\n if (rule.type === 'group' && rule.rules) {\r\n updated = this.replaceConditionReferences(rule.rules, persistedConditionsByTemporalId) || updated;\r\n }\r\n }\r\n\r\n return updated;\r\n }\r\n\r\n private getConditionReference(condition: UicConditionDefinition): string | number {\r\n return condition.id === 0 ? (condition.temporalId ?? '') : condition.id;\r\n }\r\n\r\n private getNextTemporalConditionId(): string {\r\n const temporalId = `temp_${this.nextTemporalConditionId}`;\r\n this.nextTemporalConditionId += 1;\r\n return temporalId;\r\n }\r\n\r\n private syncNextTemporalConditionId(): void {\r\n const references = [\r\n ...this.conditions\r\n .flatMap(condition => [String(this.getConditionReference(condition)), String(condition.temporalId ?? '')])\r\n .filter(reference => reference !== ''),\r\n ...this.collectConditionValues(this.editorRules)\r\n ];\r\n\r\n const nextId = references.reduce((maxId, reference) => {\r\n const match = reference.match(/^temp_(\\d+)$/);\r\n if (!match) {\r\n return maxId;\r\n }\r\n\r\n return Math.max(maxId, Number(match[1]) || 0);\r\n }, 0);\r\n\r\n this.nextTemporalConditionId = nextId + 1;\r\n }\r\n}\r\nexport interface RuleBuilderValue{\r\n definition: string;\r\n rulesToCreate: RuleToCreate[];\r\n}\r\nexport type RuleOutput = RuleBuilderValue;\r\nexport interface RuleToCreate{\r\n temporalId: string;\r\n fieldCode: string;\r\n operatorCode: string;\r\n value: string;\r\n description: string;\r\n}\r\nexport interface Rule {\r\n type: 'condition' | 'operator' | 'group';\r\n value?: 'AND' | 'OR' | string | number | null;\r\n rules?: Rule[];\r\n unsaved?: boolean;\r\n}\r\n\r\nexport interface UicConditionDefinition{\r\n id: number;\r\n fieldName: string;\r\n fieldCode: string;\r\n operatorName: string;\r\n operatorCode: string;\r\n value: string;\r\n description: string;\r\n temporalId?: string;\r\n}\r\n\r\nexport interface ConditionField{ \r\n id:number|string; \r\n text:string; \r\n type?:'number'|'text'|'date'|'catalog'; \r\n options?:AppSelectOption[]\r\n}","\r\n<div class=\"rule-tools\">\r\n <div class=\"rule-tools-title\">\r\n {{resolvedTitle}}\r\n </div>\r\n @if (editing) {\r\n <ui-button [uiTooltip]=\"'rule_builder.add_rule_tip' | uicTranslate\" (click)=\"addRule()\" size=\"s\" type=\"bordered\" icon=\"ri-add-line\">{{'rule_builder.add_rule' | uicTranslate}}</ui-button>\r\n <ui-button [uiTooltip]=\"'rule_builder.add_group_tip' | uicTranslate\" (click)=\"addGroup()\" size=\"s\" type=\"bordered\" icon=\"ri-add-line\">{{'rule_builder.add_group' | uicTranslate}}</ui-button>\r\n }@else {\r\n @if (!disabled) {\r\n <ui-button [uiTooltip]=\"'rule_builder.edit_tip' | uicTranslate\" (click)=\"editing=true\" size=\"s\" type=\"bordered\" icon=\"ri-edit-line\">{{'rule_builder.edit' | uicTranslate}}</ui-button>\r\n }\r\n }\r\n</div>\r\n<div class=\"rule-container\" [class.focused-box]=\"editing\">\r\n <div class=\"rule-container-workspace\">\r\n @if (editing) {\r\n <ng-container\r\n *ngTemplateOutlet=\"rulesTemplate; context: { rules: editorRules, isGroup: false }\">\r\n </ng-container>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"readOnlyTemplate\"></ng-container>\r\n }\r\n @if (editorRules.length==0) {\r\n <div class=\"empty-rule-msg\">{{'rule_builder.no_rules' | uicTranslate}}</div>\r\n }\r\n </div>\r\n @if (editing) {\r\n <div class=\"rule-btns\">\r\n <ui-button color=\"black\" type=\"bordered\" [uiTooltip]=\"'rule_builder.reset_tip' | uicTranslate\" (click)=\"reset()\" >{{'rule_builder.reset' | uicTranslate}}</ui-button>\r\n <ui-button color=\"black\" [uiTooltip]=\"'rule_builder.save_tip' | uicTranslate\" (click)=\"print()\">{{'rule_builder.save' | uicTranslate}}</ui-button>\r\n </div>\r\n }\r\n</div>\r\n\r\n<ng-template #rulesTemplate let-rules=\"rules\" let-isGroup=\"isGroup\">\r\n @for (rule of rules; track $index; let i = $index) {\r\n @if (rule.type === 'condition') {\r\n <div class=\"rule-condition\" [class.rule-unsaved]=\"rule.unsaved\">\r\n <div [uiTooltip]=\"'rule_builder.edit_condition_tip' | uicTranslate\" (click)=\"manageRules(rules, i)\">\r\n <div\r\n class=\"condition-box\"\r\n [class.condition-box-empty]=\"rule.value == null || rule.value === ''\"\r\n [class.condition-box-loading]=\"isConditionLabelPending(rule.value)\">\r\n @if (rule.value == null || rule.value === '') {\r\n {{ 'rule_builder.select_condition' | uicTranslate }}\r\n } @else if (isConditionLabelPending(rule.value)) {\r\n <span class=\"condition-box-loader\" aria-hidden=\"true\"></span>\r\n } @else {\r\n {{ getConditionLabel(rule.value) }}\r\n }\r\n </div>\r\n </div>\r\n <ui-button [uiTooltip]=\"'rule_builder.delete_rule_tip' | uicTranslate\" (click)=\"removeRule(rules, i)\" [iconOnly]=\"true\" size=\"s\" type=\"ghost\" icon=\"ri-delete-bin-line\" color=\"red\"></ui-button>\r\n </div>\r\n }\r\n @if (rule.type === 'operator') {\r\n <div [uiTooltip]=\"'rule_builder.toggle_operator_tip' | uicTranslate\"\r\n (click)=\"changeOperator(rules, i)\"\r\n class=\"rule-operator {{rule.value === 'AND' ? 'op-and' : 'op-or'}}\">\r\n {{ getOperatorLabel(rule.value) }}\r\n </div>\r\n }\r\n @if (rule.type === 'group') {\r\n <div class=\"rule-groups\" [class.rule-unsaved]=\"rule.unsaved\">\r\n <div class=\"rule-groups-tools\">\r\n <ui-button [uiTooltip]=\"'rule_builder.add_rule_tip' | uicTranslate\" (click)=\"addRule(rule.rules ?? [])\" size=\"s\" type=\"bordered\" icon=\"ri-add-line\">{{'rule_builder.add_rule' | uicTranslate}}</ui-button>\r\n <ui-button [uiTooltip]=\"'rule_builder.add_group_tip' | uicTranslate\" (click)=\"addGroup(rule.rules ?? [])\" size=\"s\" type=\"bordered\" icon=\"ri-add-line\">{{'rule_builder.add_group' | uicTranslate}}</ui-button>\r\n <ui-button [uiTooltip]=\"'rule_builder.delete_group_tip' | uicTranslate\" (click)=\"removeRule(rules, i)\" [iconOnly]=\"true\" size=\"s\" type=\"ghost\" icon=\"ri-delete-bin-line\" color=\"red\"></ui-button>\r\n </div>\r\n <div class=\"rule-groups-items\">\r\n <ng-container\r\n *ngTemplateOutlet=\"rulesTemplate; context: { rules: rule.rules ?? [], isGroup: true }\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n }\r\n }\r\n</ng-template>\r\n\r\n<ng-template #readOnlyTemplate>\r\n @if (editorRules.length > 0) {\r\n <div class=\"rule-friendly-output\">\r\n <ng-container\r\n *ngTemplateOutlet=\"readOnlyRulesTemplate; context: { rules: editorRules, isGroup: false }\">\r\n </ng-container>\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #readOnlyRulesTemplate let-rules=\"rules\" let-isGroup=\"isGroup\">\r\n <div class=\"readonly\">\r\n @if (isGroup) {\r\n <div class=\"readonly-group\">(</div>\r\n }\r\n \r\n @for (rule of rules; track $index) {\r\n @if (rule.type === 'condition') {\r\n <div class=\"readonly-condition\" [class.readonly-condition-loading]=\"isConditionLabelPending(rule.value)\" [uiTooltip]=\"getConditionDetailTip(rule.value)\">\r\n @if (isConditionLabelPending(rule.value)) {\r\n <span class=\"condition-box-loader\" aria-hidden=\"true\"></span>\r\n } @else {\r\n {{ getConditionLabel(rule.value) }}\r\n }\r\n </div>\r\n }\r\n \r\n @if (rule.type === 'operator') {\r\n <div class=\"readonly-operator\">{{ getOperatorLabel(rule.value) }}</div>\r\n }\r\n \r\n @if (rule.type === 'group') {\r\n <div class=\"readonly-group\">\r\n <ng-container\r\n *ngTemplateOutlet=\"readOnlyRulesTemplate; context: { rules: rule.rules ?? [], isGroup: true }\">\r\n </ng-container>\r\n </div>\r\n }\r\n }\r\n \r\n @if (isGroup) {\r\n <div class=\"readonly-group\">)</div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'firstCapital'\r\n})\r\nexport class FirstCapitalPipe implements PipeTransform {\r\n\r\n transform(str: string, max = 0): string {\r\n \r\n if (str == null) {\r\n return '-';\r\n }\r\n if ( str.length < 4 ){\r\n return str;\r\n }\r\n if (max != 0 && str.length > max) {\r\n str = str.substring(0, max) + '...';\r\n }\r\n return str.replace(/\\b(\\p{L}+)(\\p{L}*)/gu, (match, firstChar, rest) => {\r\n const capitalizedFirstChar = firstChar.normalize('NFD').charAt(0).toUpperCase() + firstChar.slice(1).toLowerCase();\r\n const lowerRest = rest.toLowerCase();\r\n return capitalizedFirstChar + lowerRest;\r\n });\r\n }\r\n\r\n}\r\n","// COMPONENTS\r\nexport * from './lib/components/button/button.component';\r\nexport * from './lib/components/inputs/checkbox/checkbox.component';\r\nexport * from './lib/components/inputs/toggle-button/toggle-button.component';\r\nexport * from './lib/components/dynamic-form/form-wrapper/form-wrapper.component';\r\nexport * from './lib/components/dynamic-form/steps-form/steps-form.component';\r\nexport * from './lib/components/dynamic-form/steps-form/step-tabs/step-tabs.component';\r\nexport * from './lib/components/inputs/input/input.component';\r\nexport * from './lib/components/inputs/date-picker/date-picker.component';\r\nexport * from './lib/components/inputs/multy-searcher/multy-searcher.component';\r\nexport * from './lib/components/inputs/uic-searcher/uic-searcher.component';\r\nexport * from './lib/components/inputs/file-input/file-input.component';\r\nexport * from './lib/components/inputs/select/select.component';\r\nexport * from './lib/components/inputs/phone-input/phone-input.component';\r\nexport * from './lib/components/inputs/multy-select/multy-select.component';\r\nexport * from './lib/components/inputs/ui-radio/ui-radio.component';\r\nexport * from './lib/components/dropdown-container/dropdown-container.component';\r\nexport * from './lib/components/dropdown-container/dropdown-close.directive';\r\nexport * from './lib/components/inputs/time-picker/time-picker.component';\r\nexport * from './lib/components/table/table.component';\r\nexport * from './lib/components/short-table/short-table.component';\r\nexport * from './lib/components/table/table.models';\r\nexport * from './lib/components/skeleton-loader/skeleton-loader.component';\r\nexport * from './lib/components/skeleton-cards/skeleton-cards.component';\r\nexport * from './lib/components/push-alerts/alert-container/alert-container.component';\r\nexport * from './lib/components/inputs/ui-slider/ui-slider.component';\r\nexport * from './lib/components/uic-action-button/uic-action-button.component';\r\nexport * from './lib/components/signature-pad/signature-pad.component';\r\nexport * from './lib/components/dropdown-container/dropdown-container.component';\r\nexport * from './lib/components/kpi-card/kpi-card.component';\r\nexport * from './lib/components/uic-portlet-card/uic-portlet-card.component';\r\nexport * from './lib/components/tabs-button/tabs-button.component';\r\nexport * from './lib/components/work-panel/work-panel.component';\r\nexport * from './lib/components/overlay-card/overlay-card.component';\r\nexport * from './lib/components/accordion/accordion.component';\r\nexport * from './lib/components/pool-options/pool-options.component';\r\nexport * from './lib/components/tree-admin/tree-admin.component';\r\nexport * from './lib/components/excel-table/excel-table.component';\r\nexport * from './lib/components/editable-table/editable-table.component';\r\nexport * from './lib/components/tag-selector/tag-selector.component';\r\nexport * from './lib/components/progress-bar/progress-bar.component';\r\n\r\n// ANIMATIONS\r\nexport * from './lib/animations/animatios.index';\r\n\r\n// FORMULARIOS\r\nexport * from './lib/components/dynamic-form/form.models';\r\nexport * from './lib/components/user-formbuilder/user-formbuilder.component';\r\nexport * from './lib/components/rule-builder/rule-builder.component';\r\n\r\n\r\n\r\n// SERVICIOS\r\nexport * from './lib/services/modal.service';\r\nexport * from './lib/services/modaRef';\r\nexport * from './lib/services/modal.constant';\r\nexport * from './lib/services/tiny-alert.service';\r\nexport * from './lib/components/tiny-alert/tiny-alert.model';\r\nexport * from './lib/services/push-alert.service';\r\nexport * from './lib/services/translate.service';\r\n// PIPES\r\nexport * from './lib/pipes/name-inits.pipe';\r\nexport * from './lib/pipes/first-capital.pipe';\r\nexport * from './lib/pipes/translate.pipe';\r\n\r\n// DIRECTIVES\r\nexport * from './lib/directives/tool-tip.directive';\r\nexport * from './lib/directives/textarea-autoresize.directive';\r\nexport * from './lib/directives/textarea-autoresize-min-rows.directive';\r\nexport * from './lib/directives/textarea-autoresize-max-rows.directive';\r\n\r\n// HELPERS\r\nexport * from './lib/helpers';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["base","nextId","i2","i1.UicTextareaAutoresizeDirective","i1","i1.UicModalService","i1.UicPushAlertService"],"mappings":"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"}
|