desy-angular 4.0.0 → 5.0.0
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/bundles/desy-angular.umd.js +115 -137
- package/bundles/desy-angular.umd.js.map +1 -1
- package/bundles/desy-angular.umd.min.js +2 -2
- package/bundles/desy-angular.umd.min.js.map +1 -1
- package/desy-angular.d.ts +2 -2
- package/desy-angular.metadata.json +1 -1
- package/esm2015/desy-angular.js +3 -3
- package/esm2015/lib/desy-angular.module.js +1 -3
- package/esm2015/lib/desy-buttons/components/button/button.component.js +9 -16
- package/esm2015/lib/desy-buttons/components/button-loader/button-loader.component.js +8 -3
- package/esm2015/lib/desy-buttons/components/dropdown/dropdown.component.js +2 -2
- package/esm2015/lib/desy-buttons/components/listbox/listbox.component.js +1 -1
- package/esm2015/lib/desy-buttons/components/pill/pill.component.js +5 -3
- package/esm2015/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.js +36 -2
- package/esm2015/lib/desy-forms/components/checkboxes/checkboxes.component.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/item-checkbox-data.js +1 -1
- package/esm2015/lib/desy-modals/components/modal/modal.component.js +2 -2
- package/esm2015/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.js +8 -48
- package/esm2015/lib/desy-nav/components/header/header-subnav/header-subnav.component.js +9 -37
- package/esm2015/lib/desy-nav/components/header/header.component.js +2 -2
- package/esm2015/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.js +2 -2
- package/esm2015/lib/desy-nav/components/menubar/menubar.component.js +3 -3
- package/esm2015/lib/desy-nav/desy-nav.module.js +4 -2
- package/esm2015/lib/desy-nav/interfaces/header-dropdown-data.js +1 -1
- package/esm2015/lib/desy-nav/interfaces/header-subnav-data.js +1 -1
- package/esm2015/lib/desy-views/components/alert/alert.component.js +28 -23
- package/fesm2015/desy-angular.js +98 -129
- package/fesm2015/desy-angular.js.map +1 -1
- package/lib/desy-buttons/components/button/button.component.d.ts +6 -6
- package/lib/desy-buttons/components/button-loader/button-loader.component.d.ts +1 -0
- package/lib/desy-buttons/components/pill/pill.component.d.ts +1 -0
- package/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.d.ts +5 -0
- package/lib/desy-forms/interfaces/item-checkbox-data.d.ts +1 -0
- package/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.d.ts +5 -10
- package/lib/desy-nav/components/header/header-subnav/header-subnav.component.d.ts +5 -5
- package/lib/desy-nav/interfaces/header-dropdown-data.d.ts +5 -1
- package/lib/desy-nav/interfaces/header-subnav-data.d.ts +5 -1
- package/lib/desy-views/components/alert/alert.component.d.ts +6 -4
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","../../../projects/desy-angular/src/lib/shared/components/accessibility/accessibility.component.ts","../../../projects/desy-angular/src/lib/shared/components/content-base/content-base.component.ts","../../../projects/desy-angular/src/lib/shared/components/text-or-html-required/text-or-html-required.component.ts","../../../projects/desy-angular/src/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.ts","../../../projects/desy-angular/src/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/button/button.component.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/button-loader/button-loader.component.ts","../../../projects/desy-angular/src/lib/shared/utils/focus-utils.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/dropdown/dropdown.component.ts","../../../projects/desy-angular/src/lib/shared/utils/string-utils.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.ts","../../../projects/desy-angular/src/lib/shared/decorators/desy-content-child.decorator.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/listbox/listbox.component.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/pill/pill.component.ts","../../../projects/desy-angular/src/lib/desy-commons/components/content/content.component.ts","../../../projects/desy-angular/src/lib/desy-commons/components/description/description.component.ts","../../../projects/desy-angular/src/lib/desy-commons/components/icon/icon.component.ts","../../../projects/desy-angular/src/lib/desy-commons/components/title/title.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/hint/hint.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/label/label.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/error-message/error-message.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/fieldset/legend/legend.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/fieldset/fieldset.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/form-field/form-field.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/textarea/textarea.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/character-count/character-count.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/input/input.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/select/select-item/select-item.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/select/option/option.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/select/option-group/option-group.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/select/select.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/file-upload/file-upload.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.ts","../../../projects/desy-angular/src/lib/shared/decorators/desy-on-input-change.decorator.ts","../../../projects/desy-angular/src/lib/shared/pipes/make-html-list.pipe.ts","../../../projects/desy-angular/src/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/input-group/input-group.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/radios/radio-item/radio-item.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/radios/radios.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/checkboxes/checkboxes.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/date-input/date-input.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/search-bar/search-bar.component.ts","../../../projects/desy-angular/src/lib/desy-forms/directives/condition.directive.ts","../../../projects/desy-angular/src/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.ts","../../../projects/desy-angular/src/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.ts","../../../projects/desy-angular/src/lib/desy-modals/components/modal/modal.component.ts","../../../projects/desy-angular/src/lib/desy-modals/components/dialog/dialog.component.ts","../../../projects/desy-angular/src/lib/desy-modals/services/dialog.service.ts","../../../projects/desy-angular/src/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-navigation/header-navigation.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/nav/nav-item/nav-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/nav/nav.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-subnav/header-subnav.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/skip-link/skip-link.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/footer/footer-meta/footer-meta.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/footer/footer.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/error-summary/error-summary.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menu-vertical/menu-vertical.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menubar/directives/menubaritem.directive.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menubar/menubar.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/notification/notification-item/notification-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/notification/notification.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table/components/table-cell.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table/components/table-header.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table/components/table-caption.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table/components/table-row.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table/table.component.ts","../../../projects/desy-angular/src/lib/shared/utils/search-utils.ts","../../../projects/desy-angular/src/lib/desy-tables/interfaces/head-cell-data.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.ts","../../../projects/desy-angular/src/lib/desy-tables/directives/cell.directive.ts","../../../projects/desy-angular/src/lib/desy-tables/directives/row.directive.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table-advanced/table-advanced.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/alert/alert.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/accordion/accordion-header/accordion-header.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/accordion/accordion-item/accordion-item.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/accordion/accordion.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/spinner/spinner.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/details/details.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/description-list/term/term.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/description-list/definition/definition.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/description-list/description-item/description-item.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/description-list/description-list.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/collapsible/collapsible.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/item/item-content-right/item-content-right.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/item/item-item/item-item.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/item/item.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/media-object/media-object.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/status/status.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/status-item/status-item.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/tabs/panel/panel.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/tabs/tab-item/tab-item.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/tabs/tabs.component.ts","../../../projects/desy-angular/src/lib/desy-views/services/alert.service.ts","../../../projects/desy-angular/src/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.ts","../../../projects/desy-angular/src/lib/desy-pagination/components/pagination/pagination.component.ts","../../../projects/desy-angular/src/lib/shared/pipes/inner-html.pipe.ts","../../../projects/desy-angular/src/lib/shared/pipes/external-href.pipe.ts","../../../projects/desy-angular/src/lib/shared/directives/attribute-change.directive.ts","../../../projects/desy-angular/src/lib/shared/directives/inner-content.directive.ts","../../../projects/desy-angular/src/lib/shared/directives/click-outside.directive.ts","../../../projects/desy-angular/src/lib/shared/directives/content-change.directive.ts","../../../projects/desy-angular/src/lib/shared/directives/content-empty.directive.ts","../../../projects/desy-angular/src/lib/shared/directives/custom-inner-content.directive.ts","../../../projects/desy-angular/src/lib/shared/shared.module.ts","../../../projects/desy-angular/src/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.ts","../../../projects/desy-angular/src/lib/desy-commons/desy-commons.module.ts","../../../projects/desy-angular/src/lib/desy-forms/desy-forms.module.ts","../../../projects/desy-angular/src/lib/desy-views/components/tooltip/tooltip.component.ts","../../../projects/desy-angular/src/lib/desy-views/desy-views.module.ts","../../../projects/desy-angular/src/lib/desy-buttons/desy-buttons.module.ts","../../../projects/desy-angular/src/lib/desy-modals/desy-modals.module.ts","../../../projects/desy-angular/src/lib/desy-nav/desy-nav.module.ts","../../../projects/desy-angular/src/lib/desy-tables/directives/focus-clicked-cell.directive.ts","../../../projects/desy-angular/src/lib/desy-tables/desy-tables.module.ts","../../../projects/desy-angular/src/lib/desy-pagination/desy-pagination.module.ts","../../../projects/desy-angular/src/lib/desy-angular.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","pop","push","__values","o","s","m","__read","ar","error","__spread","concat","Component","args","selector","template","Input","ContentBaseComponent","_super","getContent","content","AccessibilityComponent","ViewChild","static","TextOrHtmlRequiredComponent","ngOnChanges","changes","textOrHtmlRequiredFunction","text","html","Error","AccessibilityAndTextOrHtmlRequiredComponent","ButtonComponent","_this","clickEvent","EventEmitter","avoidingDoubleClick","ngOnInit","required","getElement","staticElementTypeInput","onClick","event","preventDoubleClick","preventDefault","emit","setTimeout","element","toLocaleLowerCase","href","ELEMENT_A","ELEMENT_BUTTON","getClassNames","classNames","classes","disabled","isDisabled","ELEMENT_INPUT","AccessibilityAndContentRequiredComponent","Output","ButtonLoaderComponent","getSpinnerText","spinnerText","state","STATE_LOADING","loaderText","DEFAULT_LOADER_TEXT","getSuccessText","successText","STATE_SUCCESS","DEFAULT_SUCCESS_TEXT","FocusUtils","getFirstFocusableElement","parent","focusableList","selectionableElements","querySelectorAll","document","firstFocusable","item","isFocusable","tabIndex","getAttribute","nodeName","rel","type","DropdownComponent","show","clickOutsideEnabled","contentTooltip","dropdownContent","nativeElement","style","display","tippyProperties","placement","inlinePositioning","allowHTML","trigger","hideOnClick","interactive","arrow","offset","theme","plugins","name","defaultValue","fn","_a","hide","onKeyDown","KEY_CODE_ESC","onShow","addEventListener","onHide","removeEventListener","role","aria","onShown","instance","focus","closeDropdown","toggleDropdown","read","ElementRef","HostListener","StringUtils","escapeHtml","replace","RegExp","ListboxLabelComponent","isInit","ListboxItemComponent","itemChange","DesyContentChild","options","propertyKey","privateKeyName","privateQueryListKeyName","set","queryList","QueryList","subscribe","previousValue","first","onSetCallbackName","onDeleteCallbackName","notifyOnChanges","get","ListboxComponent","itemsChange","activeItemChange","isListVisible","listboxContent","onListShow","bind","onHidden","onListClose","id","items","itemComponentList","labelComponent","itemComponentSubscriptions","forEach","unsubscribe","itemList","subscription","checkActiveItems","_b","_c","ngDoCheck","getActiveItemsData","map","index","active","filter","activeItems","hasActiveItemChange","lastActiveItems","isMultiselectable","newItem","this_1","findIndex","activeItems_1","activeItems_1_1","doesChangeButtonText","activeItemOption","listboxOptions","find","buttonContent","innerHTML","listboxList","listboxButton","onListFocus","activeItemsData","activeElem","getElementById","getItemId","currentFocusIndex","selectItem","console","warn","moveFocus","position","onSpace","getIdPrefix","idPrefix","itemId","hasLabel","getLabelContent","isButtonContentHtml","ViewChildren","ContentChildren","PillComponent","getType","TYPE_A","TYPE_SPAN","TYPE_BUTTON","ContentComponent","DescriptionComponent","IconComponent","TitleComponent","HintComponent","changeDetectorRef","detectChanges","ChangeDetectorRef","LabelComponent","ErrorMessageComponent","LegendComponent","FieldsetComponent","FormFieldComponent","onChange","onTouch","onblur","onInput","registerOnChange","registerOnTouched","setDisabledState","writeValue","getHintId","hasHint","getErrorId","hasErrorsMessage","hasLabelComponent","labelText","labelRef","labelData","hasHintComponent","hintText","hintRef","hintData","hasErrorMessageComponent","errorMessageText","errorMessageRef","errorMessageData","hintComponent","errorMessageComponent","TextareaComponent","inputTransform","checkRequiredParams","getRows","rows","DEFAULT_ROWS","ensureText","registerInputTransform","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","CharacterCountComponent","ngAfterViewInit","textareaElement","textarea","checkRequired","maxlength","calculateLenght","displayCountMessage","threshold","substring","remaining","words","match","maxwords","lastIndexOf","countbbdd","specialChars","InputComponent","errorId","SelectItemComponent","OptionComponent","OptionGroupComponent","SelectComponent","contentInit","ngAfterContentInit","getItems","itemSelected_1","selected","itemComponents","toArray","isItemSelected","isOptionGroup","FileUploadComponent","DesyOnInputChange","callbackName","MakeHtmlListPipe","transform","valueForEmpty","filteredList","join","Pipe","InputGroupInputComponent","isSelect","valueChange","InputGroupItemComponent","InputGroupSelectComponent","InputGroupDividerComponent","divider","InputGroupComponent","controlContainer","hasItemLabel","ngAfterViewChecked","getItemName","onExternalChange","onInternalChange","itemValue","itemName","overrideFieldsetParams","fieldset","caller","innerHtml","describedBy","itemsComponents","getItemLabelRef","getItemLabelData","hasFieldset","hasFieldsetComponent","hasLegendComponent","legendRef","fieldsetData","legendData","legendText","fieldsetComponent","legendComponent","namePrefix","getItemSelectOptions","selectItemComponentList","selectItems","getItemDividerTemplate","dividerContent","getItemDividerHtml","isSelectItem","hasSelectItems","ControlContainer","Optional","RadioItemComponent","radios","checkedChange","markForUpdateCheckboxIds","ngOnDestroy","checked","lastChecked","setChecked","updateValueFromRadioItems","undefined","lastValue","radioId","getItemHintId","hintComponentList","hasChanged","isInputChecked","inputElement","updateRadioId","labelComponentList","for","hasDividers","hasError","getNameRadio","getDescribedBy","animations","opacity","transition","animate","query","animateChild","optional","RadiosComponent","Host","nextValue","updateChekboxIds","updateItems_1","updateRadioItemsChecked","checkboxItems","getRadioItems","onIdPrefixChange","propagateNewIdPrefixValue","onNameChange","overrideHintParams","overrideErrorMessageParams","itemsUpdated","checkedItem","hint","errorMessage","onDeleteHint","onDeleteErrorMessage","radioComponentItems","radioComponentItems2","CheckboxItemComponent","checkboxes","updateValueFromCheckboxItems","checkboxId","input","isIndeterminate","readOnly","indeterminate","getValue","updateCheckboxId","getNameCheckbox","CheckboxesComponent","updateCheckboxItemsChecked","getCheckboxItems","itemChecked","checkboxComponentItems","checkboxComponentItems2","DateInputDayComponent","DateInputItemComponent","DateInputMonthComponent","DateInputYearComponent","DateInputDividerComponent","DateInputComponent","initDefaultItems","newVal","assign","getItemLabel","toUpperCase","dateInputItemComponents","defaultItems","SearchBarComponent","button","hasButton","ConditionDirective","templateRef","conditionalHtml","Directive","TemplateRef","ModalButtonPrimaryComponent","ModalButtonSecondaryComponent","ModalComponent","closeModal","clickButton","hasIconContent","descriptionIsHtml","descriptionIsEmpty","closeDialog","iconComponent","icon","handleRequiredEmpty","checkDescriptionContent","childs","childNodes","hasHtml","hasContent","nodeType","Node","TEXT_NODE","textContent","ELEMENT_NODE","CDATA_SECTION_NODE","descriptionWasEmpty","clickButtonEmit","handleIconContentEmpty","isEmpty","getTitleClasses","titleComponent","title","getDescriptionClasses","descriptionComponent","description","getPrimaryItems","primaryButtonComponents","itemsPrimary","getSecondaryItems","secondaryButtonComponents","itemsSecondary","numDialogsOpened","DialogComponent","cdRef","focusTrapFactory","factoryResolver","activeChange","lastActiveState","focusTrapWrapper","handleActiveState","callerType","factory","resolveComponentFactory","component","container","createComponent","onCallerCreationCallback","children","childElem","dismiss","onKeyUp","stopPropagation","focusTrap","focusElem_1","classList","add","DIALOG_OPEN_CLASS","remove","removeAttribute","focusInitialElement","destroy","focusOnClose","handleClickOutside","dismissOnBackdrop","ConfigurableFocusTrapFactory","ComponentFactoryResolver","ViewContainerRef","DialogService","defaultInjector","appRef","openDialog","dialogOptions","dialog","createDialog","Type","initModal","ComponentRef","onCloseDialog","rootViewContainer","attachView","hostView","componentElement","rootNodes","appendChild","modalRef","modalOptions","isDismissible","subscription_1","Injectable","providedIn","Injector","ApplicationRef","BreadcrumbsItemComponent","BreadcrumbsComponent","location","getLength","itemsLength","hasBackButton","goBack","back","getItemList","handleEmptyItem","Location","HeaderOffcanvasCloseButtonComponent","HeaderOffcanvasButtonComponent","openOffcanvas","handleClick","handleEmptyContent","HeaderOffcanvasComponent","dialogService","hostClass","isOpen","close","open","offcanvasContent","setHostClass","bindButton","ariaModal","ariaLabelledBy","HostBinding","HeaderNavigationItemComponent","HeaderNavigationComponent","prefix","suffix","NavItemComponent","NavComponent","hasNav","itemsActiveChange","routerLink","handleContentEmpty","HeaderSubnavComponent","toggleOpen","onKeydownEscape","hasSubnavItems","nav","overrideNavParams","ariaLabel","HeaderDropdownComponent","SkipLinkComponent","handleNoContent","HeaderComponent","overrideSkipLinkParams","skiplinkComponent","overrideNavigationParams","navigationComponent","FooterNavigationItemComponent","FooterMetaItemComponent","FooterMetaComponent","FooterComponent","getNavigationItems","navItems","navigation","getNavigationItemItems","FooterNavigationComponent","getMetaItems","meta","getMetaContent","contentComponent","ErrorSummaryItemComponent","ErrorSummaryComponent","handleContentRequired","getErrorItemList","errorItemList","errorComponentList","errorList","lastLength","lastErrorItemCount","MenuHorizontalItemComponent","MenuHorizontalComponent","MenuVerticalItemSubItemComponent","MenuVerticalItemSubComponent","MenuVerticalItemComponent","MenuVerticalComponent","handleItemContentEmpty","isRoot","getItemHtml","getId","getSubItemId","itemIndex","subItemIndex","subItemId","sub","getItemSub","subItem","getSubItems","subComponent","subItems","MenubaritemDirective","elementRef","contentChanged","contentHasBeenChecked","ngAfterContentChecked","popupMenu","lastPopupMenu","popupMenuItems","lastPopupMenuItems","link","lastLink","itemContentWrapper","lastItemContentWrapper","ContentChild","descendants","MenubarSubsubitemComponent","MenubarSubitemComponent","MenubarItemComponent","MenubarLabelComponent","MenubarComponent","activeSubItemChange","viewInit","currentFocusItemIndex","checkChanges","menuItems","menuData","itemData","currentFocusSubItemIndex","currentFocusSubSubItemIndex","menuItem","lastCurrentFocusItemIndex","isItemFocusable","handleMenuFocusIn","isFocused","handleMenuFocusOut","menubar","contains","relatedTarget","closeMenu","handleMenuItemClick","hasPopupMenu","openMenu","activateMenuItem","handleMenuItemKeydown","focusFirstSubItem","focusNextAvailableItem","focusLastSubItem","focusFirstItem","focusLastItem","isPrintableChar","focusItemByFirstChar","handleMenuItemMouseOver","focusItem","handlePopupMenuItemClick","subSubItemIndex","activatePopupMenuItem","handlePopupMenuItemKeydown","currentSubIndex","currentSubSubIndex","mustCloseAfterSelectPopupItem","focusNextAvailableSubItem","focusSubItemByFirstChar","handlePopupMenuItemMouseOver","focusSubItem","getItemSubitems","subSubItems","getSubItemSubitems","wasOpened","str","getMenuDataIndex","menuDataIndex","hover","hasFocus","activeElement","fromItemIndex","nextItem","char","itemContents","foundIndex","trim","substr","toLowerCase","elem","fromItemSubIndex","fromItemSubSubIndex","allSubItemsChecked","nextSubIndex","nextSubSubIndex","nextIndexes","getNextSubItemIndexes","subIndex","subSubIndex","isSubItemFocusable","firstSubSubItem","lastItemIndex","lastItem","lastSubSubItem","foundSubIndex","foundSubSubIndex","checkNextSubItem","nextSubItemItems","getLabelRef","getPopupStyle","rect","getBoundingClientRect","top","height","left","zIndex","parentId","getSubSubItemAriaChecked","subsubitem","ariaChecked","NotificationItemComponent","NotificationComponent","isOpenChange","isDismissing","displayDefaultIcon","itemCompontents","handleIconEmpty","empty","TableCellComponent","TableCaptionComponent","TableComponent","getCaptionClass","captionComponent","captionClasses","getHeaderCells","headerCells","headerComponent","cells","head","rowList","rowComponentList","getRowCells","row","TableRowComponent","handleEmptyCell","cell","cellIndex","TableHeaderComponent","OrderBy","SearchUtils","containsAnyWordFrom","fullWord","includes","simplifiedTarget","getSimplifiedString","split","word","res","toLocaleUpperCase","TableAdvancedHeaderCellComponent","TableAdvancedRowCellComponent","CellDirective","RowDirective","getCell","column","contentCells","columnIndex","TableAdvancedComponent","el","changeDetector","rowsChange","rowsChecked","recalculateTable","orderByType","elemntsFocus","querySelector","setAttribute","recalculateVisibleElements","recalculateParams","buildRecalculateParams","observers","markForCheck","visibleRows","rowData","filterRows","sortRows","desyRow","params","filters","sort","headerCell","headerCellIndex","hasFilter","activeFilter","filterText","valueFilter","orderByColumnIndex","orderBy","none","order","hasFilters","getVisibleRows","getIdHeader","getIdRowCheckbox","getIdHeaderFilter","getStringOrderBy","asc","handleTableCellContentEmpty","handleCheckboxChange","TableAdvancedRowComponent","notifyCheckedChange","uncheckAll","mustEmit","rowChecks","handleInputSearch","filteredRows","handleSortByColumn","getNextDirection","sortedRows","columnIndex_1","isAsc_1","a","compareCellContent","isAsc","aComparable","cleanCurrency","bComparable","isNaN","localeCompare","sensitivity","ignorePunctuation","numeric","txt","test","TableAdvancedHeaderComponent","AlertComponent","hasViewinit","focusFirst","focusElem","alertWrapper","AccordionHeaderComponent","AccordionItemComponent","openChange","AccordionComponent","showAll","changeAll","isChange","toggleItem","allowToggle","newOpenValue","allowMultiple","it","wasOpen","itemSelectors","focusNextItem","focusedItem","selectors","focusPreviousItem","currentItem","headingComponent","heading","getItemHeader","getItemContent","SpinnerComponent","DetailsComponent","summaryTextOrSummaryHtmlRequiredFunction","summaryText","summaryHtml","TermComponent","DefinitionComponent","DescriptionListComponent","DescriptionItemComponent","CollapsibleComponent","headerTextOrheaderHtmlRequiredFunction","ItemContentRightComponent","ItemContentBottomComponent","ItemItemComponent","ItemComponent","getTitle","MediaObjectComponent","figureHtml","StatusComponent","StatusItemComponent","PanelComponent","TabItemComponent","TabsComponent","currentTab","tablistAriaLabel","selectTab","getItemPanel","tab","panel","panelComponent","currentPanel","tabSrOnly","tabSelectorContentWrapper","focusFirstTab","tabSelectors","focusLastTab","enabledTabs","focusNextTab","focusedTab","nextTab","focusPreviousTab","previousTab","getPanelContent","AlertService","openAlert","alertOptions","alert","createAlert","initNotification","closeAlert","onCloseAlert","place","notificationRef","TooltipContentComponent","PaginationComponent","currentPage","currentPageChange","previousIcon","nextIcon","totalItems","itemsPerPage","nPages","Math","ceil","previousText","nextText","buildPages","getSuffix","page","getLastItemNumber","pageIndex","min","getButtonId","changePage","current","previous","getActiveItemText","InnerHtmlPipe","sanitizer","sanitize","SecurityContext","HTML","DomSanitizer","ExternalHrefPipe","AttributeChangeDirective","desyAttributeChange","desyAttributeChangeMutation","MutationObserver","mutations","mutation","attributesToCheck","attributeName","observe","attributes","childList","characterData","subtree","disconnect","InnerContentDirective","deleteContentIfEmpty","isHtml","innerText","ClickOutsideDirective","hostElementRef","clickOutside","desyClickOutsideElem","ContentChangeDirective","observeProperties","desyContentChange","desyContentChangeMutation","ContentEmptyDirective","desyContentEmpty","desyContentNotEmpty","lastWasEmpty","checkContent","isContentNode","contentNode","contentsToIgnore","ignoreElem","CustomInnerContentDirective","viewContainerRef","resolver","injector","clear","desyCustomInnerContent","createEmbeddedView","tmpWrapper","createElement","nodeList_1","node","componentRef","textNode","createTextNode","NgModule","declarations","imports","CommonModule","exports","RouterModule","NgForm","SharedModule","NgxTippyModule","TemplateDrivenWrapperComponent","FormsModule","ReactiveFormsModule","DesyCommonsModule","TooltipComponent","hasIconComponentContent","tooltipContent","complex","getIdButton","getIdTooltip","handleEmptyIconContent","handleEmptyTooltipContent","getMainContent","getIconContent","DesyFormsModule","DesyViewsModule","A11yModule","DesyButtonsModule","FocusClickedCellDirective","offsetParent","elemntsFocus_1","elemntsFocus_1_1","activeTabindex","manageArrows","code","tr","parentNode","nextElementSibling","previousElementSibling","inactiveTabindex","mynode","otherNode","isEqualNode","DesyNavModule","BrowserAnimationsModule","DesyModalsModule","DesyTablesModule","DesyPaginationModule"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { AccesibilityData } from '../../interfaces/accesibility-data';\r\n\r\n/**\r\n * componente para heredar los atributos de accesibilidad\r\n */\r\n@Component({\r\n selector: 'desy-accessibility',\r\n template: '<div></div>'\r\n})\r\nexport class AccessibilityComponent implements AccesibilityData {\r\n @Input() role: string;\r\n @Input() ariaLabel: string;\r\n @Input() ariaDescribedBy: string;\r\n @Input() ariaLabelledBy: string;\r\n @Input() ariaHidden: string;\r\n @Input() ariaDisabled: string;\r\n @Input() ariaControls: string;\r\n @Input() ariaCurrent: string;\r\n @Input() ariaLive: string;\r\n @Input() ariaExpanded: string;\r\n @Input() ariaErrorMessage: string;\r\n @Input() ariaHasPopup: string;\r\n @Input() ariaModal: string;\r\n @Input() tabindex: string;\r\n\r\n /*\r\n Copiar para facilitar el uso por defecto\r\n [attr.role]=\"role ? role : null\"\r\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\r\n [attr.aria-describedby]=\"ariaDescribedBy ? ariaDescribedBy : null\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy ? ariaLabelledBy : null\"\r\n [attr.aria-hidden]=\"ariaHidden ? ariaHidden : null\"\r\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\r\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\r\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : null\"\r\n [attr.aria-live]=\"ariaLive ? ariaLive : null\"\r\n [attr.aria-expanded]=\"ariaExpanded ? ariaExpanded : null\"\r\n [attr.aria-errormessage]=\"ariaErrorMessage ? ariaErrorMessage : null\"\r\n [attr.aria-haspopup]=\"ariaHasPopup ? ariaHasPopup : null\"\r\n [attr.aria-modal]=\"ariaModal ? ariaModal : null\"\r\n [attr.tabindex]=\"tabindex ? tabindex : null\"\r\n */\r\n}\r\n","import {Component, TemplateRef, ViewChild} from '@angular/core';\r\nimport {AccessibilityComponent} from '../accessibility/accessibility.component';\r\n/**\r\n * Componente base para proyectar contenido\r\n */\r\n@Component({\r\n selector: 'desy-content-base',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ContentBaseComponent extends AccessibilityComponent {\r\n\r\n @ViewChild('contentTemplate', { static: true }) private content: TemplateRef<any>;\r\n\r\n public getContent(): TemplateRef<any> {\r\n return this.content;\r\n }\r\n}\r\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'desy-text-or-html-required',\r\n template: '<div></div>'\r\n})\r\nexport class TextOrHtmlRequiredComponent implements OnChanges {\r\n\r\n /***\r\n * componente base para el comportamiento de texto o html required\r\n * si en el componente que extiende de este, se implementa el onInit o Onchanges,\r\n * habra que incluir la llamada al a funcion textOrHtmlRequiredFunction\r\n **/\r\n\r\n @Input() text: string;\r\n @Input() html: string;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n textOrHtmlRequiredFunction(this.text, this.html);\r\n }\r\n\r\n}\r\n\r\n/**\r\n * funcion que comprueba si existe text o html\r\n * salta error si no es así\r\n */\r\nexport function textOrHtmlRequiredFunction(text: any, html: any): void {\r\n if (!html && !text) {\r\n throw new Error(`html or text are required`);\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { AccesibilityData } from '../../interfaces/accesibility-data';\r\nimport { TextOrHtmlRequiredComponent } from '../text-or-html-required/text-or-html-required.component';\r\n\r\n@Component({\r\n selector: 'desy-accessibility-and-text-or-html-required',\r\n template: '<div></div>'\r\n})\r\nexport class AccessibilityAndTextOrHtmlRequiredComponent extends TextOrHtmlRequiredComponent implements AccesibilityData {\r\n\r\n /**\r\n * componente para heredar los atributos de accesibilidad y\r\n * el texto o html required\r\n * \r\n * si en el componente que extiende de este, se implementa el onInit o Onchanges,\r\n * habra que incluir la llamada al a funcion textOrHtmlRequiredFunction\r\n * \r\n */\r\n\r\n // Atributos de accesibilidad\r\n @Input() role: string;\r\n @Input() ariaLabel: string;\r\n @Input() ariaDescribedBy: string;\r\n @Input() ariaLabelledBy: string;\r\n @Input() ariaHidden: string;\r\n @Input() ariaDisabled: string;\r\n @Input() ariaControls: string;\r\n @Input() ariaCurrent: string;\r\n @Input() ariaLive: string;\r\n @Input() ariaExpanded: string;\r\n @Input() ariaErrorMessage: string;\r\n @Input() ariaHasPopup: string;\r\n @Input() tabindex: string;\r\n\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { AccesibilityData } from '../../interfaces/accesibility-data';\r\n\r\n@Component({\r\n selector: 'desy-accessibility-and-content-required',\r\n template: '<div></div>'\r\n})\r\nexport class AccessibilityAndContentRequiredComponent implements AccesibilityData {\r\n\r\n /**\r\n * componente para heredar los atributos de accesibilidad y\r\n * el content required\r\n *\r\n * si en el componente que extiende de este, se implementa el onInit o Onchanges,\r\n * habra que incluir la llamada al a funcion contentRequiredFunction\r\n *\r\n */\r\n @Input() html: string;\r\n @Input() text: string;\r\n\r\n // Atributos de accesibilidad\r\n @Input() role: string;\r\n @Input() ariaLabel: string;\r\n @Input() ariaDescribedBy: string;\r\n @Input() ariaLabelledBy: string;\r\n @Input() ariaHidden: string;\r\n @Input() ariaDisabled: string;\r\n @Input() ariaControls: string;\r\n @Input() ariaCurrent: string;\r\n @Input() ariaLive: string;\r\n @Input() ariaExpanded: string;\r\n @Input() ariaErrorMessage: string;\r\n @Input() ariaHasPopup: string;\r\n @Input() tabindex: string;\r\n\r\n}\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { AccessibilityAndContentRequiredComponent } from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-button',\r\n templateUrl: './button.component.html'\r\n})\r\nexport class ButtonComponent extends AccessibilityAndContentRequiredComponent implements OnInit, OnChanges{\r\n\r\n public static readonly ELEMENT_A: string = 'a';\r\n public static readonly ELEMENT_BUTTON: string = 'button';\r\n public static readonly ELEMENT_INPUT: string = 'input';\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n\r\n @Input() element: string; // 'a', 'button' o 'input'\r\n @Input() name: string;\r\n @Input() type: string;\r\n @Input() value: any;\r\n @Input() disabled: boolean;\r\n @Input() href: string;\r\n @Input() target: string;\r\n @Input() preventDoubleClick: boolean;\r\n\r\n @Input() routerLink: string|any[];\r\n @Input() routerLinkActiveClasses: string|string[];\r\n\r\n @Output() clickEvent = new EventEmitter();\r\n\r\n avoidingDoubleClick = false;\r\n\r\n ngOnInit(): void {\r\n //this.required();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n //this.required();\r\n }\r\n\r\n required(): void{\r\n if (this.getElement() !== this.staticElementTypeInput) {\r\n //textOrHtmlRequiredFunction(this.text, this.html);\r\n }\r\n }\r\n\r\n onClick(event: any): void {\r\n if (this.preventDoubleClick) {\r\n if (!this.avoidingDoubleClick){\r\n this.avoidingDoubleClick = true;\r\n this.clickEvent.emit(event);\r\n setTimeout(() => {\r\n this.avoidingDoubleClick = false;\r\n }, 1000);\r\n } else {\r\n event.preventDefault(); // evitamos propagar el evento por ejemplo un submit en un formulario\r\n }\r\n } else {\r\n this.clickEvent.emit(event);\r\n }\r\n }\r\n\r\n getElement(): string {\r\n let element: string;\r\n if (this.element) {\r\n element = this.element.toLocaleLowerCase();\r\n } else {\r\n if (this.href) {\r\n element = ButtonComponent.ELEMENT_A;\r\n } else {\r\n element = ButtonComponent.ELEMENT_BUTTON;\r\n }\r\n }\r\n return element;\r\n }\r\n\r\n getClassNames(): string {\r\n let classNames = 'c-button';\r\n if (this.classes) {\r\n classNames += ' ' + this.classes;\r\n }\r\n if (this.disabled) {\r\n classNames += ' c-button--disabled';\r\n }\r\n return classNames;\r\n }\r\n\r\n isDisabled(): boolean {\r\n return this.disabled ? true : null;\r\n }\r\n\r\n get staticElementTypeA(): string {\r\n return ButtonComponent.ELEMENT_A;\r\n }\r\n\r\n get staticElementTypeButton(): string {\r\n return ButtonComponent.ELEMENT_BUTTON;\r\n }\r\n\r\n get staticElementTypeInput(): string {\r\n return ButtonComponent.ELEMENT_INPUT;\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { ButtonComponent } from '../button/button.component';\r\n\r\n@Component({\r\n selector: 'desy-button-loader',\r\n templateUrl: './button-loader.component.html'\r\n})\r\nexport class ButtonLoaderComponent extends ButtonComponent {\r\n\r\n public static readonly STATE_LOADING: string = 'is-loading';\r\n public static readonly STATE_SUCCESS: string = 'is-success';\r\n\r\n private static readonly DEFAULT_LOADER_TEXT: string = 'Acción en curso';\r\n private static readonly DEFAULT_SUCCESS_TEXT: string = 'Acción realizada con éxito';\r\n\r\n @Input() loaderText: string;\r\n @Input() loaderClasses: string;\r\n @Input() state: string;\r\n @Input() successText: string;\r\n\r\n getClassNames(): string {\r\n let classNames = 'c-button-loader relative';\r\n if (this.classes) {\r\n classNames += ' ' + this.classes;\r\n }\r\n if (this.disabled) {\r\n classNames += ' c-button-loader--disabled';\r\n }\r\n return classNames;\r\n }\r\n\r\n getSpinnerText(): string {\r\n let spinnerText: string = null;\r\n\r\n if (this.state === ButtonLoaderComponent.STATE_LOADING) {\r\n spinnerText = this.loaderText ? this.loaderText : ButtonLoaderComponent.DEFAULT_LOADER_TEXT;\r\n }\r\n\r\n return spinnerText;\r\n }\r\n\r\n\r\n getSuccessText(): string {\r\n let successText: string = null;\r\n\r\n if (this.state === ButtonLoaderComponent.STATE_SUCCESS) {\r\n successText = this.successText ? this.successText : ButtonLoaderComponent.DEFAULT_SUCCESS_TEXT;\r\n }\r\n\r\n return successText;\r\n }\r\n}\r\n","export class FocusUtils {\r\n\r\n public static getFirstFocusableElement(parent?: HTMLElement): HTMLElement {\r\n const selectionableElements = 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\r\n let focusableList;\r\n if (parent) {\r\n focusableList = parent.querySelectorAll(selectionableElements);\r\n } else {\r\n focusableList = document.querySelectorAll(selectionableElements);\r\n }\r\n\r\n if (!focusableList || focusableList.length === 0) {\r\n return null;\r\n }\r\n\r\n let firstFocusable = null;\r\n let i = 0;\r\n while (i < focusableList.length) {\r\n try {\r\n const element = focusableList.item(i) as HTMLInputElement;\r\n if (FocusUtils.isFocusable(element)) {\r\n firstFocusable = element;\r\n break;\r\n }\r\n } catch (e) {\r\n\r\n }\r\n i++;\r\n }\r\n\r\n return firstFocusable;\r\n }\r\n\r\n public static isFocusable(element: any): boolean {\r\n if (element.tabIndex > 0 || (element.tabIndex === 0 && element.getAttribute('tabIndex') !== null)) {\r\n return true;\r\n }\r\n\r\n if (element.disabled) {\r\n return false;\r\n }\r\n\r\n switch (element.nodeName) {\r\n case 'A':\r\n return !!element.href && element.rel !== 'ignore';\r\n case 'INPUT':\r\n return element.type !== 'hidden' && element.type !== 'file';\r\n case 'BUTTON':\r\n case 'SELECT':\r\n case 'TEXTAREA':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n TemplateRef,\r\n OnChanges,\r\n SimpleChanges,\r\n ViewChild,\r\n ElementRef,\r\n OnInit, HostListener,\r\n} from '@angular/core';\r\nimport { AccessibilityAndContentRequiredComponent } from '../../../shared/components';\r\nimport { FocusUtils } from '../../../shared/utils/focus-utils';\r\n\r\n@Component({\r\n selector: 'desy-dropdown',\r\n templateUrl: './dropdown.component.html'\r\n})\r\nexport class DropdownComponent extends AccessibilityAndContentRequiredComponent implements OnChanges, OnInit {\r\n\r\n static readonly KEY_CODE_ESC = 'Escape';\r\n\r\n @ViewChild('dropdownContent', { read: ElementRef }) dropdownContent: ElementRef;\r\n\r\n @Input() id: string;\r\n @Input() disabled: boolean;\r\n @Input() hiddenText: string;\r\n @Input() classesContainer: string;\r\n @Input() classesTooltip: string;\r\n @Input() classes: string;\r\n @Input() caller: TemplateRef<any>;\r\n\r\n @Output() clickEvent = new EventEmitter();\r\n\r\n show = false;\r\n clickOutsideEnabled = false;\r\n\r\n tippyProperties: any;\r\n\r\n public ngOnInit(): any {\r\n setTimeout(() => {\r\n let contentTooltip: HTMLElement;\r\n\r\n if (this.dropdownContent && this.dropdownContent.nativeElement) {\r\n contentTooltip = this.dropdownContent.nativeElement as HTMLElement;\r\n contentTooltip.style.display = 'block';\r\n this.tippyProperties = {\r\n placement: 'bottom-start',\r\n inlinePositioning: true,\r\n content: contentTooltip,\r\n allowHTML: true, // Make sure you are sanitizing any user data if rendering HTML to prevent XSS attacks.\r\n trigger: 'click',\r\n hideOnClick: true,\r\n interactive: true,\r\n arrow: false,\r\n offset: [0, -10],\r\n theme: '',\r\n plugins: [{\r\n name: 'hideOnEsc',\r\n defaultValue: true,\r\n fn({hide}): any {\r\n\r\n function onKeyDown(event: KeyboardEvent): void {\r\n if (event.key === DropdownComponent.KEY_CODE_ESC) {\r\n hide();\r\n }\r\n }\r\n\r\n return {\r\n onShow(): void {\r\n document.addEventListener('keydown', onKeyDown);\r\n },\r\n onHide(): void {\r\n document.removeEventListener('keydown', onKeyDown);\r\n },\r\n };\r\n },\r\n }],\r\n role: false,\r\n aria: {\r\n content: 'auto',\r\n },\r\n onShown(instance): void {\r\n const firstFocusable = FocusUtils.getFirstFocusableElement(contentTooltip);\r\n if (firstFocusable) {\r\n setTimeout(() => firstFocusable.focus());\r\n }\r\n }\r\n };\r\n }\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n\r\n if (this.isDisabled()){ // se pone disable se cierra el dropdown\r\n this.closeDropdown();\r\n }\r\n }\r\n\r\n onClick(event: any): void {\r\n if (!this.isDisabled()){\r\n this.toggleDropdown();\r\n this.clickEvent.emit(event);\r\n }\r\n }\r\n\r\n toggleDropdown(): void {\r\n this.show = !this.show;\r\n setTimeout(() => this.clickOutsideEnabled = this.show);\r\n }\r\n\r\n closeDropdown(): void {\r\n this.show = false;\r\n this.clickOutsideEnabled = false;\r\n }\r\n\r\n isDisabled(): boolean {\r\n return this.disabled ? true : null;\r\n }\r\n\r\n @HostListener('window:keydown', ['$event'])\r\n onKeyDown(event: KeyboardEvent): void {\r\n if (event.key === DropdownComponent.KEY_CODE_ESC) {\r\n this.closeDropdown();\r\n }\r\n }\r\n}\r\n","/**\r\n * Facilita funciones de utilidad para trabajar con strings\r\n */\r\nexport class StringUtils {\r\n\r\n /**\r\n * Escapa los caracteres propios de HTML para mostrarlos como contenido\r\n * @param value texto en formato html\r\n */\r\n public static escapeHtml(value: string): string {\r\n return value ? value\r\n .replace(new RegExp(`&`, 'g'), '&')\r\n .replace(new RegExp(`<`, 'g'), '<')\r\n .replace(new RegExp(`>`, 'g'), '>')\r\n .replace(new RegExp(`\"`, 'g'), '"')\r\n .replace(new RegExp(`'`, 'g'), ''') : '';\r\n }\r\n}\r\n","import {Component, Input, OnInit, TemplateRef, ViewChild} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'desy-listbox-label',\r\n templateUrl: './listbox-label.component.html'\r\n})\r\nexport class ListboxLabelComponent implements OnInit {\r\n\r\n @Input() classes: string;\r\n\r\n @ViewChild('childComponentTemplate') content: TemplateRef<any>;\r\n\r\n private isInit = false;\r\n\r\n ngOnInit(): void {\r\n setTimeout(() => this.isInit = !!this.content);\r\n }\r\n\r\n public getContent(): TemplateRef<any> {\r\n return this.isInit ? this.content : null;\r\n }\r\n\r\n}\r\n","import {Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild} from '@angular/core';\r\nimport {ListboxItemData} from '../../../interfaces/listbox-item-data';\r\nimport {AccessibilityComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-listbox-item',\r\n templateUrl: './listbox-item.component.html'\r\n})\r\nexport class ListboxItemComponent extends AccessibilityComponent implements ListboxItemData, OnChanges {\r\n\r\n @ViewChild('childComponentTemplate') content;\r\n\r\n @Input() id?: string;\r\n @Input() active?: boolean;\r\n @Input() classes?: string;\r\n @Input() title?: string;\r\n\r\n @Output() itemChange = new EventEmitter();\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.itemChange.emit(changes);\r\n }\r\n\r\n}\r\n","import {QueryList} from '@angular/core';\r\n\r\n/**\r\n * Decorador para convertir una queryList de componentes obtenidos con ContentChildren a un único componente, de forma que sea similar a un\r\n * ContentChild pero admitiendo únicamente los compontentes insertados en el primer nivel.\r\n * Debe utilizarse siempre junto a un ContentChildren\r\n * Si en el constructor de la clase en la que se utiliza se inyecta el Change detector con nombre 'changeDetectorRef', se indicará que hay\r\n * cambios cuando se detecten.\r\n * @param options opciones adicionales:\r\n * - onSetCallbackName: nombre del método al que llamar tras asociarse el valor. Esto puede utilizarse, por ejemplo, para sobreescribir\r\n * parámetros definidos externamente en el componente.\r\n * - onDeleteCallbackName: nombre del método al que llamar tras desasociarse el valor.\r\n */\r\nexport function DesyContentChild(options?: { onSetCallbackName?: string, onDeleteCallbackName?: string }): PropertyDecorator {\r\n return (target: any, propertyKey: string) => {\r\n const privateKeyName = `_${propertyKey}`;\r\n const privateQueryListKeyName = `_${propertyKey}Querylist`;\r\n\r\n Object.defineProperty(target, propertyKey, {\r\n set(value): void {\r\n const queryList = value instanceof QueryList ? value as QueryList<any> : null;\r\n if (queryList && !this[privateQueryListKeyName]) {\r\n this[privateQueryListKeyName] = queryList;\r\n queryList.changes.subscribe(() => {\r\n const previousValue = this[privateKeyName];\r\n this[privateKeyName] = queryList && queryList.length > 0 ? queryList.first : null;\r\n\r\n if (options && options.onSetCallbackName && this[options.onSetCallbackName] && this[privateKeyName] ) {\r\n this[options.onSetCallbackName](this[privateKeyName]);\r\n }\r\n\r\n if (options && options.onDeleteCallbackName && this[options.onDeleteCallbackName] && previousValue && !this[privateKeyName] ) {\r\n this[options.onDeleteCallbackName]();\r\n }\r\n });\r\n queryList.notifyOnChanges();\r\n }\r\n },\r\n get(): any {\r\n return this[privateKeyName];\r\n }\r\n });\r\n };\r\n}\r\n","import {\r\n Component,\r\n ContentChildren, DoCheck,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport {AccessibilityAndTextOrHtmlRequiredComponent, textOrHtmlRequiredFunction} from '../../../shared/components';\r\nimport {ListboxLabelData} from '../../interfaces/listbox-label-data';\r\nimport {ListboxItemData} from '../../interfaces/listbox-item-data';\r\nimport {StringUtils} from '../../../shared/utils/string-utils';\r\nimport {ListboxLabelComponent} from './listbox-label/listbox-label.component';\r\nimport {ListboxItemComponent} from './listbox-item/listbox-item.component';\r\nimport {Subscription} from 'rxjs';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-listbox',\r\n templateUrl: './listbox.component.html'\r\n})\r\nexport class ListboxComponent extends AccessibilityAndTextOrHtmlRequiredComponent implements OnInit, OnChanges, DoCheck {\r\n\r\n static readonly KEY_CODE_ESC = 'Escape';\r\n\r\n @ViewChild('button', { read: ElementRef }) listboxButton: ElementRef;\r\n @ViewChild('list', { read: ElementRef }) listboxList: ElementRef;\r\n @ViewChild('tooltip', { read: ElementRef }) listboxContent: ElementRef;\r\n @ViewChildren('option', { read: ElementRef }) listboxOptions: QueryList<ElementRef>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ListboxLabelComponent) labelComponent: ListboxLabelComponent;\r\n @ContentChildren(ListboxItemComponent) itemComponentList: QueryList<ListboxItemComponent>;\r\n @Input() id: string; // required\r\n @Input() isMultiselectable: boolean;\r\n @Input() doesChangeButtonText: boolean;\r\n @Input() label: ListboxLabelData;\r\n @Input() classes: string;\r\n @Input() classesContainer: string;\r\n @Input() classesTooltip: string;\r\n @Input() idPrefix: string;\r\n @Input() disabled: boolean;\r\n @Input() items: ListboxItemData[];\r\n @Output() itemsChange = new EventEmitter();\r\n @Output() activeItemChange = new EventEmitter();\r\n\r\n tippyProperties: any;\r\n currentFocusIndex: number;\r\n buttonContent: string;\r\n isListVisible = false;\r\n\r\n // conditionalId y conditionalItem representan en desy-frontend el item activo. Aquí es mejor obtenerlo cuando se necesita\r\n lastActiveItems: { item: ListboxItemData, index: number }[];\r\n itemComponentSubscriptions: Subscription[];\r\n\r\n itemList: ListboxItemData[];\r\n\r\n\r\n ngOnInit(): void {\r\n setTimeout(() => {\r\n if (this.listboxContent && this.listboxContent.nativeElement) {\r\n const contentTooltip = this.listboxContent.nativeElement as HTMLElement;\r\n this.tippyProperties = {\r\n placement: 'bottom-start',\r\n inlinePositioning: true,\r\n content: contentTooltip,\r\n allowHTML: true, // Make sure you are sanitizing any user data if rendering HTML to prevent XSS attacks.\r\n trigger: 'click',\r\n hideOnClick: true,\r\n interactive: true,\r\n arrow: false,\r\n offset: [0, -10],\r\n theme: '',\r\n plugins: [{\r\n name: 'hideOnEsc',\r\n defaultValue: true,\r\n fn({hide}): any {\r\n\r\n function onKeyDown(event: KeyboardEvent): void {\r\n if (event.key === ListboxComponent.KEY_CODE_ESC) {\r\n hide();\r\n }\r\n }\r\n\r\n return {\r\n onShow(): void {\r\n document.addEventListener('keydown', onKeyDown);\r\n },\r\n onHide(): void {\r\n document.removeEventListener('keydown', onKeyDown);\r\n },\r\n };\r\n },\r\n }],\r\n role: false,\r\n aria: {\r\n content: 'auto',\r\n },\r\n onShow: this.onListShow.bind(this),\r\n onHidden: this.onListClose.bind(this)\r\n };\r\n }\r\n });\r\n }\r\n\r\n ngOnChanges(): void {\r\n setTimeout(() => {\r\n /*\r\n * Parámetros obligatorios\r\n */\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.items && !this.itemComponentList) {\r\n throw Error('items are required');\r\n }\r\n if (!this.label && !this.labelComponent) {\r\n throw Error('label is required');\r\n }\r\n\r\n if (this.itemComponentList && this.itemComponentList.length > 0) {\r\n if (this.itemComponentSubscriptions) {\r\n this.itemComponentSubscriptions.forEach(s => s.unsubscribe());\r\n }\r\n this.itemComponentSubscriptions = [];\r\n this.itemList = [];\r\n this.itemComponentList.forEach(item => {\r\n const subscription = item.itemChange.subscribe(() => this.checkActiveItems());\r\n this.itemComponentSubscriptions.push(subscription);\r\n this.itemList.push(item);\r\n });\r\n } else {\r\n this.itemList = this.items;\r\n }\r\n\r\n if (this.items) {\r\n for (const item of this.items) {\r\n if (item) {\r\n textOrHtmlRequiredFunction(item.text, item.html);\r\n } else {\r\n throw Error('item is ' + item);\r\n }\r\n }\r\n }\r\n\r\n this.checkActiveItems();\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n if (!this.items || !this.itemList) {\r\n return;\r\n }\r\n\r\n this.checkActiveItems();\r\n }\r\n\r\n private getActiveItemsData(): { item: ListboxItemData, index: number }[] {\r\n return this.itemList\r\n .map((item, index) => item.active ? {item, index} : null)\r\n .filter(item => item !== null);\r\n }\r\n\r\n private checkActiveItems(): void {\r\n let activeItems: { item: ListboxItemData, index: number }[] = this.itemList\r\n .map((item, index) => item.active ? {item, index} : null)\r\n .filter(item => item !== null);\r\n\r\n let hasActiveItemChange = false;\r\n if (this.lastActiveItems && activeItems.length === this.lastActiveItems.length) {\r\n for (let i = 0; i < activeItems.length; i++) {\r\n if (activeItems[i].index !== this.lastActiveItems[i].index) {\r\n hasActiveItemChange = true;\r\n break;\r\n }\r\n }\r\n } else {\r\n hasActiveItemChange = true;\r\n }\r\n\r\n // Si hay cambios externos y es selección única, anulamos la selección anterior\r\n if (this.lastActiveItems && !this.isMultiselectable && hasActiveItemChange) {\r\n if (activeItems.length !== this.lastActiveItems.length) {\r\n for (const newItem of activeItems) {\r\n if (this.lastActiveItems.findIndex(i => i.index === newItem.index) >= 0) {\r\n newItem.item.active = false;\r\n }\r\n\r\n activeItems = activeItems.filter(item => item.item.active);\r\n }\r\n }\r\n }\r\n\r\n this.lastActiveItems = activeItems;\r\n\r\n // Se cambia el contenido del botón\r\n if (this.doesChangeButtonText && !this.isMultiselectable && activeItems.length > 0) {\r\n const activeItemOption = this.listboxOptions.find((item, index) => index === activeItems[0].index);\r\n if (activeItemOption) {\r\n this.buttonContent = activeItemOption.nativeElement.innerHTML;\r\n }\r\n } else {\r\n this.buttonContent = this.html ? this.html : this.text;\r\n }\r\n\r\n // Si hay cambios, se emiten\r\n if (hasActiveItemChange) {\r\n this.itemsChange.emit(this.itemList);\r\n this.activeItemChange.emit(activeItems.length > 0 ? activeItems[0].item : null);\r\n }\r\n }\r\n\r\n onListShow(): void {\r\n this.isListVisible = true;\r\n if (this.listboxList) {\r\n setTimeout(() => this.listboxList.nativeElement.focus());\r\n }\r\n }\r\n\r\n onListClose(): void {\r\n this.isListVisible = false;\r\n if (this.listboxButton) {\r\n this.listboxButton.nativeElement.focus();\r\n }\r\n }\r\n\r\n onListFocus(): void {\r\n const activeItemsData = this.getActiveItemsData();\r\n if (activeItemsData.length > 0) {\r\n const activeElem = document.getElementById(this.getItemId(activeItemsData[0].item, activeItemsData[0].index));\r\n if (activeElem) {\r\n activeElem.focus();\r\n this.currentFocusIndex = activeItemsData[0].index;\r\n }\r\n } else if (this.itemList && this.itemList.length > 0) {\r\n this.currentFocusIndex = 0;\r\n if (!this.isMultiselectable) {\r\n this.selectItem(0);\r\n }\r\n } else {\r\n console.warn('No element to focus');\r\n }\r\n }\r\n\r\n moveFocus(position: number, event: KeyboardEvent): void {\r\n event.preventDefault();\r\n if (position >= 0 && position < this.itemList.length) {\r\n if (this.isMultiselectable) {\r\n this.currentFocusIndex = position;\r\n } else {\r\n this.selectItem(position);\r\n }\r\n }\r\n }\r\n\r\n onSpace(event: KeyboardEvent): void {\r\n event.preventDefault();\r\n if (this.isMultiselectable) {\r\n this.selectItem(this.currentFocusIndex);\r\n }\r\n }\r\n\r\n selectItem(index: number): void {\r\n if (!this.isMultiselectable) {\r\n this.itemList.forEach(item => item.active = false);\r\n this.itemList[index].active = true;\r\n } else {\r\n this.itemList[index].active = !this.itemList[index].active;\r\n }\r\n this.currentFocusIndex = index;\r\n\r\n this.checkActiveItems();\r\n }\r\n\r\n /*\r\n * Métodos para facilitar contenido al template\r\n */\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : this.id + '-listbox-item';\r\n }\r\n\r\n getItemId(item: ListboxItemData, index: number): string {\r\n let itemId: string;\r\n if (item.id) {\r\n itemId = item.id;\r\n } else {\r\n itemId = this.getIdPrefix();\r\n if (index > 0) {\r\n itemId += `-${index}`;\r\n }\r\n }\r\n return itemId;\r\n }\r\n\r\n hasLabel(): boolean {\r\n return !!(this.label || this.labelComponent);\r\n }\r\n\r\n getLabelContent(label: ListboxLabelData): string {\r\n return label.html ? label.html : `<p>${ StringUtils.escapeHtml(label.text) }</p>`;\r\n }\r\n\r\n isButtonContentHtml(): boolean {\r\n const activeItemsData = this.getActiveItemsData();\r\n return !!(this.doesChangeButtonText && !this.isMultiselectable && activeItemsData.length > 0 ? true : this.html);\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { AccessibilityAndContentRequiredComponent } from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-pill',\r\n templateUrl: './pill.component.html'\r\n})\r\nexport class PillComponent extends AccessibilityAndContentRequiredComponent {\r\n\r\n public static readonly TYPE_A: string = 'a';\r\n public static readonly TYPE_BUTTON: string = 'button';\r\n public static readonly TYPE_SPAN: string = 'span';\r\n\r\n @Input() type: string; // 'a', 'button' o 'span'\r\n @Input() href: string;\r\n @Input() target: string;\r\n @Input() routerLink: string|any[];\r\n @Input() routerLinkActiveClasses: string|string[];\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n @Output() clickEvent = new EventEmitter();\r\n\r\n onClick(event: any): void {\r\n this.clickEvent.emit(event);\r\n }\r\n\r\n getType(): string {\r\n let type: string;\r\n if (this.type){\r\n type = this.type.toLocaleLowerCase();\r\n } else {\r\n if (this.href) {\r\n type = PillComponent.TYPE_A;\r\n } else {\r\n type = PillComponent.TYPE_SPAN;\r\n }\r\n }\r\n return type;\r\n }\r\n\r\n getClassNames(): string {\r\n let classNames = 'c-pill';\r\n if (this.classes) {\r\n classNames += ' ' + this.classes;\r\n }\r\n return classNames;\r\n }\r\n\r\n get staticElementTypeA(): string {\r\n return PillComponent.TYPE_A;\r\n }\r\n\r\n get staticElementTypeButton(): string {\r\n return PillComponent.TYPE_BUTTON;\r\n }\r\n\r\n get staticElementTypeSpan(): string {\r\n return PillComponent.TYPE_SPAN;\r\n }\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../shared/components';\r\nimport {ContentData} from '../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-content',\r\n templateUrl: './content.component.html'\r\n})\r\nexport class ContentComponent extends ContentBaseComponent implements ContentData {\r\n @Input() classes: string;\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../shared/components';\r\nimport {DescriptionData} from '../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-description',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class DescriptionComponent extends ContentBaseComponent implements DescriptionData {\r\n @Input() classes: string;\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {IconData} from '../../interfaces';\r\nimport {ContentBaseComponent} from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-icon',\r\n templateUrl: './icon.component.html'\r\n})\r\nexport class IconComponent extends ContentBaseComponent implements IconData {\r\n\r\n @Input() type: string;\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../shared/components';\r\nimport {TitleData} from '../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-title',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class TitleComponent extends ContentBaseComponent implements TitleData {\r\n @Input() classes: string;\r\n}\r\n","import {ChangeDetectorRef, Component, Input} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-hint',\r\n templateUrl: './hint.component.html',\r\n})\r\nexport class HintComponent extends AccessibilityComponent {\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() html: string;\r\n @Input() text: string;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n public detectChanges(): void {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n}\r\n","import {ChangeDetectorRef, Component, Input} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\n\r\n\r\n@Component({\r\n selector: 'desy-label',\r\n templateUrl: './label.component.html'\r\n})\r\nexport class LabelComponent extends AccessibilityComponent {\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() html: string;\r\n @Input() text: string;\r\n @Input() isPageHeading: boolean;\r\n @Input() headingLevel: number;\r\n @Input() for: string;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n public detectChanges(): void {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n}\r\n","import {ChangeDetectorRef, Component, Input} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-error-message',\r\n templateUrl: './error-message.component.html'\r\n})\r\nexport class ErrorMessageComponent extends AccessibilityComponent {\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() html: string;\r\n @Input() text: string;\r\n @Input() visuallyHiddenText: string;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n public detectChanges(): void {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n}\r\n","import { Component, Input, SimpleChanges } from '@angular/core';\r\nimport { AccessibilityAndContentRequiredComponent } from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-legend',\r\n templateUrl: './legend.component.html'\r\n})\r\nexport class LegendComponent extends AccessibilityAndContentRequiredComponent {\r\n\r\n @Input() classes: string;\r\n @Input() isPageHeading: boolean;\r\n @Input() headingLevel: number;\r\n \r\n}\r\n","import {ChangeDetectorRef, Component, ContentChildren, Input, TemplateRef} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { LegendComponent } from './legend/legend.component';\r\nimport { LegendData } from '../../interfaces';\r\nimport {ContentComponent} from '../../../desy-commons/components/content/content.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-fieldset',\r\n templateUrl: './fieldset.component.html'\r\n})\r\nexport class FieldsetComponent extends AccessibilityComponent {\r\n\r\n @Input() describedBy: string;\r\n @Input() errorId: string;\r\n\r\n /**\r\n * legenda, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir legendComponent\r\n * 2) incluir template\r\n * 3) incluir objeto legend (interfaz expuesta)\r\n * 4) incluir legendText - incluir un label con solo un texto\r\n */\r\n @Input() legendRef: TemplateRef<LegendComponent>;\r\n @Input() legendData: LegendData;\r\n @Input() legendText: string;\r\n\r\n @Input() classes: string;\r\n @Input() caller: TemplateRef<any>;\r\n\r\n @Input() id: string;\r\n @Input() headingLevel: number;\r\n\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LegendComponent) legendComponent: LegendComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n public detectChanges(): void {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n ContentChildren,\r\n HostListener,\r\n Input,\r\n TemplateRef\r\n} from '@angular/core';\r\nimport { ControlValueAccessor } from '@angular/forms';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { LabelComponent } from '../label/label.component';\r\nimport { HintComponent } from '../hint/hint.component';\r\nimport { ErrorMessageComponent } from '../error-message/error-message.component';\r\nimport { LabelData, HintData, ErrorMessageData } from '../../interfaces';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n\r\n@Component({\r\n selector: 'desy-form-field',\r\n template: ''\r\n})\r\nexport class FormFieldComponent<T> extends AccessibilityComponent implements ControlValueAccessor {\r\n\r\n @Input() id: string;\r\n @Input() disabled: boolean;\r\n value: T;\r\n\r\n /*\r\n * label, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir componente\r\n * 2) incluir template\r\n * 3) incluir objeto label (interfaz expuesta)\r\n * 4) incluir legendText - incluir un label con solo un texto\r\n */\r\n @DesyContentChild({ onSetCallbackName: 'overrideLabelParams', onDeleteCallbackName: 'onDeleteLabel'})\r\n @ContentChildren(LabelComponent) labelComponent: LabelComponent;\r\n @Input() labelRef: TemplateRef<LabelComponent>;\r\n @Input() labelData: LabelData;\r\n @Input() labelText: string;\r\n\r\n /*\r\n * hint, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir componente\r\n * 2) incluir template\r\n * 3) incluir objeto label (interfaz expuesta)\r\n * 4) incluir hintText - incluir un hint con solo un texto\r\n */\r\n @DesyContentChild({ onSetCallbackName: 'overrideHintParams', onDeleteCallbackName: 'onDeleteHint'})\r\n @ContentChildren(HintComponent) hintComponent: HintComponent;\r\n @Input() hintRef: TemplateRef<HintComponent>;\r\n @Input() hintData: HintData;\r\n @Input() hintText: string;\r\n\r\n /*\r\n * errorMessage, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir componente\r\n * 2) incluir template\r\n * 3) incluir objeto label (interfaz expuesta)\r\n * 4) incluir errorText - incluir un errorText con solo un texto\r\n */\r\n @DesyContentChild({ onSetCallbackName: 'overrideErrorMessageParams', onDeleteCallbackName: 'onDeleteErrorMessage'})\r\n @ContentChildren(ErrorMessageComponent) errorMessageComponent: ErrorMessageComponent;\r\n @Input() errorMessageRef: TemplateRef<ErrorMessageComponent>;\r\n @Input() errorMessageData: ErrorMessageData;\r\n @Input() errorMessageText: string;\r\n\r\n\r\n @HostListener('focusout')\r\n onblur(): void {\r\n // DESY-77 SI TOCAN EL COMPONENTE Y SALEN SIN MODIFICAR EL VALOR, QUE SE ACTUALICE TOUCHED\r\n this.onTouch();\r\n }\r\n\r\n\r\n /*\r\n * Implementación de los métodos del ControlValueAccessor\r\n */\r\n\r\n onChange = (_: any) => {};\r\n onTouch = () => { };\r\n\r\n onInput(value: T): void{\r\n this.value = value;\r\n this.onTouch();\r\n this.onChange(this.value);\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.onTouch = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n writeValue(value: T): void {\r\n if (value){\r\n this.value = value;\r\n }\r\n this.onChange(value);\r\n }\r\n\r\n\r\n /*\r\n * Funciones para recuperar valores comunes\r\n */\r\n\r\n getHintId(): string {\r\n return this.hasHint() ? this.id + '-hint' : null;\r\n }\r\n\r\n getErrorId(): string {\r\n return this.hasErrorsMessage() ? this.id + '-error' : null;\r\n }\r\n\r\n hasLabel(): boolean {\r\n return !!(this.hasLabelComponent() || this.labelText || this.labelRef ||\r\n (this.labelData && (this.labelData.text || this.labelData.html)));\r\n }\r\n\r\n hasHint(): boolean {\r\n return !!(this.hasHintComponent() || this.hintText || this.hintRef || (this.hintData && (this.hintData.text || this.hintData.html)));\r\n }\r\n\r\n hasErrorsMessage(): boolean {\r\n return !!(this.hasErrorMessageComponent() || this.errorMessageText || this.errorMessageRef ||\r\n (this.errorMessageData && (this.errorMessageData.text || this.errorMessageData.html)));\r\n }\r\n\r\n hasLabelComponent(): boolean {\r\n return !!this.labelComponent;\r\n }\r\n\r\n hasHintComponent(): boolean {\r\n return !!this.hintComponent;\r\n }\r\n\r\n hasErrorMessageComponent(): boolean {\r\n return !!this.errorMessageComponent;\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n SimpleChanges,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\n\r\n@Component({\r\n selector: 'desy-textarea',\r\n templateUrl: './textarea.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TextareaComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class TextareaComponent extends FormFieldComponent<string> implements OnChanges {\r\n\r\n protected static readonly DEFAULT_ROWS = 5;\r\n\r\n @ViewChild('textarea') textareaElement: ElementRef;\r\n\r\n @Input() name: string;\r\n @Input() rows: number;\r\n @Input() placeholder: string;\r\n @Input() describedBy: string;\r\n\r\n @Input() formGroupClasses: string;\r\n @Input() classes: string;\r\n @Input() autocomplete: string;\r\n @Input() maxlength: number;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n inputTransform = (value: string): string => value;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequiredParams();\r\n this.writeValue(this.value);\r\n }\r\n\r\n checkRequiredParams(): void{\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n if (!this.labelRef && !this.labelData && !this.labelText) {\r\n throw Error('label is required');\r\n }\r\n }\r\n\r\n getRows(): number {\r\n return this.rows ? this.rows : TextareaComponent.DEFAULT_ROWS;\r\n }\r\n\r\n onInput(value: any): void{\r\n super.onInput(this.inputTransform(this.ensureText(value)));\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = this.inputTransform(this.ensureText(value));\r\n this.onChange(this.value);\r\n }\r\n\r\n registerInputTransform(fn: (value: string) => string): void {\r\n this.inputTransform = fn;\r\n }\r\n\r\n private ensureText(value: any): string {\r\n return value ? value || '' : '';\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n SimpleChanges,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\nimport { TextareaComponent } from '../textarea/textarea.component';\r\n\r\n@Component({\r\n selector: 'desy-character-count',\r\n templateUrl: './character-count.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CharacterCountComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class CharacterCountComponent extends FormFieldComponent<string> implements AfterViewInit, OnChanges {\r\n\r\n @ViewChild(TextareaComponent) textarea;\r\n\r\n @Input() name: string;\r\n @Input() type: string;\r\n @Input() rows: number;\r\n @Input() placeholder: string;\r\n @Input() maxlength: number;\r\n @Input() countbbdd: boolean;\r\n @Input() maxwords: number;\r\n @Input() threshold: number;\r\n @Input() formGroupClasses: string;\r\n @Input() countMessageClasses: string;\r\n @Input() classes: string;\r\n\r\n textareaElement: HTMLTextAreaElement;\r\n displayCountMessage: boolean;\r\n remaining: number;\r\n\r\n ngAfterViewInit(): void {\r\n this.textareaElement = (this.textarea.textareaElement.nativeElement as HTMLTextAreaElement);\r\n this.textarea.registerInputTransform(this.inputTransform.bind(this));\r\n this.registerOnChange(this.onChange);\r\n this.registerOnTouched(this.onTouch);\r\n this.textarea.setDisabledState(this.disabled);\r\n setTimeout(() => this.textarea.writeValue(this.value), 50);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequired();\r\n if (this.textarea) {\r\n setTimeout(() => this.textarea.ngOnChanges(changes), 50);\r\n }\r\n }\r\n\r\n inputTransform(value: string): string {\r\n if (value) {\r\n if (this.maxlength) {\r\n let length = this.calculateLenght(value);\r\n this.displayCountMessage = !this.threshold || length > (this.maxlength * this.threshold / 100);\r\n while (length > this.maxlength) {\r\n value = value.substring(0, value.length - 1);\r\n length = this.calculateLenght(value);\r\n }\r\n this.remaining = this.maxlength - length;\r\n } else {\r\n const words = value.match(/[\\wáéíóúÁÉÍÓÚüÜñÑ]+/g) || [];\r\n this.displayCountMessage = !this.threshold || (words.length > this.maxwords * this.threshold / 100);\r\n while ( words.length > this.maxwords) {\r\n value = value.substring(0, value.lastIndexOf(words.pop()));\r\n }\r\n this.remaining = this.maxwords - words.length;\r\n }\r\n } else {\r\n value = '';\r\n this.displayCountMessage = !this.threshold;\r\n this.remaining = this.maxlength ? this.maxlength : this.maxwords;\r\n }\r\n\r\n this.textareaElement.value = value;\r\n return value;\r\n }\r\n\r\n calculateLenght(value: string): number {\r\n let length = value.length;\r\n if (this.countbbdd && value) {\r\n const specialChars = value.match(/[^A-z0-9_\\s.,:;]/g);\r\n length += specialChars ? specialChars.length : 0;\r\n }\r\n return length;\r\n }\r\n\r\n checkRequired(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n if (!this.maxlength && !this.maxwords) {\r\n throw Error('maxlength or maxwords are required');\r\n }\r\n if (!this.hasLabel()) {\r\n throw Error('label is required');\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n if (this.textarea) {\r\n this.textarea.registerOnChange(fn);\r\n this.onChange = (_: any) => {};\r\n }\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n if (this.textarea) {\r\n this.textarea.registerOnTouched(fn);\r\n this.onTouch = () => { };\r\n }\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n if (this.textarea) {\r\n this.textarea.setDisabledState(isDisabled);\r\n }\r\n }\r\n\r\n writeValue(value: string): void {\r\n this.value = value;\r\n if (this.textarea) {\r\n this.textarea.writeValue(value);\r\n }\r\n }\r\n\r\n}\r\n","import { Component, forwardRef, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\n\r\n@Component({\r\n selector: 'desy-input',\r\n templateUrl: './input.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class InputComponent extends FormFieldComponent<any> implements OnChanges {\r\n\r\n @Input() name: string;\r\n @Input() type: string;\r\n @Input() describedBy: string;\r\n @Input() pattern: string;\r\n @Input() inputmode: string;\r\n @Input() placeholder: string;\r\n @Input() formGroupClasses: string;\r\n @Input() classes: string;\r\n @Input() autocomplete: string;\r\n @Input() maxlength: number;\r\n @Input() errorId: string;\r\n\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequired();\r\n }\r\n\r\n getErrorId(): string {\r\n return this.errorId ? this.errorId : super.getErrorId();\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value) {\r\n this.value = value || '';\r\n } else {\r\n this.value = '';\r\n }\r\n this.onChange(this.value);\r\n }\r\n\r\n checkRequired(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n if (!this.hasLabel()) {\r\n throw Error('label is required');\r\n }\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-select-item',\r\n templateUrl: './select-item.component.html'\r\n})\r\nexport class SelectItemComponent extends ContentBaseComponent {\r\n\r\n @Input() disabled: boolean;\r\n}\r\n","import {Component, forwardRef, Input} from '@angular/core';\r\nimport {SelectItemData} from '../../../interfaces';\r\nimport {SelectItemComponent} from '../select-item/select-item.component';\r\n\r\n@Component({\r\n selector: 'desy-option',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>',\r\n providers: [{provide: SelectItemComponent, useExisting: forwardRef(() => OptionComponent)}],\r\n})\r\nexport class OptionComponent extends SelectItemComponent implements SelectItemData {\r\n\r\n @Input() value: string;\r\n @Input() selected: boolean;\r\n @Input() hidden: boolean;\r\n\r\n}\r\n","import {Component, ContentChildren, forwardRef, Input, QueryList} from '@angular/core';\r\nimport {SelectItemComponent} from '../select-item/select-item.component';\r\nimport {OptionComponent} from '../option/option.component';\r\n\r\n@Component({\r\n selector: 'desy-option-group',\r\n templateUrl: './option-group.component.html',\r\n providers: [{provide: SelectItemComponent, useExisting: forwardRef(() => OptionGroupComponent)}],\r\n})\r\nexport class OptionGroupComponent extends SelectItemComponent {\r\n\r\n @Input() label: string;\r\n\r\n @ContentChildren(OptionComponent) items: QueryList<OptionComponent>;\r\n}\r\n","import {Component, forwardRef, Input, OnInit, OnChanges, SimpleChanges, ContentChildren, QueryList, AfterContentInit} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport { SelectItemData } from '../../interfaces';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\nimport {OptionGroupComponent} from './option-group/option-group.component';\r\nimport {SelectItemComponent} from './select-item/select-item.component';\r\n\r\n@Component({\r\n selector: 'desy-select',\r\n templateUrl: './select.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class SelectComponent extends FormFieldComponent<any> implements OnInit, OnChanges, AfterContentInit {\r\n\r\n @Input() name: string;\r\n @Input() items: SelectItemData[];\r\n @Input() describedBy?: string;\r\n\r\n @Input() formGroupClasses: string;\r\n @Input() classes: string;\r\n\r\n @ContentChildren(SelectItemComponent) itemComponents: QueryList<SelectItemComponent>;\r\n contentInit = false;\r\n\r\n ngOnInit(): void {\r\n this.checkRequiredParams();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequiredParams();\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.contentInit = true;\r\n if (!this.value) {\r\n const items = this.getItems();\r\n const itemSelected = items?.find(item => item.selected);\r\n if (itemSelected) {\r\n setTimeout(() => this.writeValue(itemSelected.value));\r\n }\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n this.onChange(value);\r\n }\r\n\r\n getItems(): SelectItemData[] {\r\n const items = (this.itemComponents.length > 0) ? this.itemComponents.toArray() : this.items;\r\n if (this.contentInit && (!items || items.length === 0)) {\r\n throw new Error(`items are required`);\r\n }\r\n return items;\r\n }\r\n\r\n checkRequiredParams(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n }\r\n\r\n isItemSelected(item: SelectItemData): boolean {\r\n return this.value ? this.value === item.value : item.selected;\r\n }\r\n\r\n isOptionGroup(item: SelectItemData): boolean {\r\n return item instanceof OptionGroupComponent;\r\n }\r\n\r\n}\r\n","import { Component, forwardRef, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\n\r\n@Component({\r\n selector: 'desy-file-upload',\r\n templateUrl: './file-upload.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n multi: true,\r\n useExisting: forwardRef(() => FileUploadComponent),\r\n }\r\n ]\r\n})\r\nexport class FileUploadComponent extends FormFieldComponent<File> implements ControlValueAccessor, OnChanges {\r\n\r\n @Input() name: string;\r\n @Input() describedBy: string;\r\n @Input() formGroupClasses: string;\r\n @Input() classes: string;\r\n @Input() accept: string;\r\n\r\n constructor() {\r\n super();\r\n }\r\n/***\r\n * nos devuelve un array de file : File[]\r\n * pero solo nos guardamos el primero\r\n * solo dejamos seleccionar uno\r\n */\r\n onInput(value: any): void{\r\n if (value && value.length > 0 && value[0]){\r\n this.value = value[0];\r\n }else {\r\n this.value = null;\r\n }\r\n this.onTouch();\r\n this.onChange(this.value);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequiredParams();\r\n }\r\n\r\n checkRequiredParams(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n if (!this.labelRef && !this.labelData && !this.labelText) {\r\n throw Error('label is required');\r\n }\r\n }\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ItemInputGroupData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-input-group-item',\r\n template: ''\r\n})\r\nexport class InputGroupItemComponent implements ItemInputGroupData {\r\n @Input() classes?: string;\r\n\r\n}\r\n","/**\r\n * Decorador para controlar los cambios de un input\r\n * @param callbackName nombre de la función a la que se llamará tras aplicar el cambio\r\n */\r\nexport function DesyOnInputChange(callbackName: string): PropertyDecorator {\r\n return (target: any, propertyKey: string) => {\r\n const privateKeyName = `_${propertyKey}`;\r\n\r\n Object.defineProperty(target, propertyKey, {\r\n set(value): void {\r\n this[privateKeyName] = value;\r\n this[callbackName]();\r\n },\r\n get(): any {\r\n return this[privateKeyName];\r\n }\r\n });\r\n };\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'makeHtmlList'\r\n})\r\nexport class MakeHtmlListPipe implements PipeTransform {\r\n\r\n transform(classes: string[], valueForEmpty?: string): string|null {\r\n let filteredList = classes.filter(c => c).join(' ');\r\n if (filteredList.length === 0 && valueForEmpty) {\r\n filteredList = valueForEmpty;\r\n }\r\n return filteredList;\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {InputGroupItemComponent} from '../input-group-item/input-group-item.component';\r\nimport {LabelComponent} from '../../label/label.component';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-input-group-input',\r\n templateUrl: './input-group-input.component.html',\r\n providers: [{provide: InputGroupItemComponent, useExisting: forwardRef(() => InputGroupInputComponent)}],\r\n})\r\nexport class InputGroupInputComponent extends InputGroupItemComponent implements AfterContentInit {\r\n\r\n isSelect = false;\r\n\r\n @Input() id?: string;\r\n @Input() name: string;\r\n @Input() value?: any;\r\n @Output() valueChange = new EventEmitter<any>();\r\n @Input() formGroupClasses?: string;\r\n\r\n @Input() type?: string;\r\n @Input() inputmode?: string;\r\n @Input() autocomplete?: string;\r\n @Input() placeholder?: string;\r\n @Input() pattern?: string;\r\n @Input() maxlength?: number;\r\n\r\n @ViewChild('label', { static: true }) labelRef: TemplateRef<any>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LabelComponent) labelComponent: LabelComponent;\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('item name is required');\r\n }\r\n if (!this.labelComponent) {\r\n throw Error('item label is required');\r\n }\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n QueryList,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {InputGroupItemComponent} from '../input-group-item/input-group-item.component';\r\nimport {OptionComponent} from '../../select/option/option.component';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {LabelComponent} from '../../label/label.component';\r\n\r\n@Component({\r\n selector: 'desy-input-group-select',\r\n templateUrl: './input-group-select.component.html',\r\n providers: [{provide: InputGroupItemComponent, useExisting: forwardRef(() => InputGroupSelectComponent)}],\r\n})\r\nexport class InputGroupSelectComponent extends InputGroupItemComponent implements AfterContentInit {\r\n\r\n isSelect = true;\r\n\r\n @Input() id?: string;\r\n @Input() name: string;\r\n @Input() value?: any;\r\n @Output() valueChange = new EventEmitter<any>();\r\n @Input() formGroupClasses?: string;\r\n\r\n @ViewChild('label', { static: true }) labelRef: TemplateRef<any>;\r\n @ContentChildren(OptionComponent) selectItemComponentList: QueryList<OptionComponent>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LabelComponent) labelComponent: LabelComponent;\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('item name is required');\r\n }\r\n if (!this.labelComponent) {\r\n throw Error('item label is required');\r\n }\r\n }\r\n}\r\n","import {Component, forwardRef, TemplateRef, ViewChild} from '@angular/core';\r\nimport {InputGroupItemComponent} from '../input-group-item/input-group-item.component';\r\nimport {ItemDividerInputGroupData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-input-group-divider',\r\n templateUrl: './input-group-divider.component.html',\r\n providers: [{provide: InputGroupItemComponent, useExisting: forwardRef(() => InputGroupDividerComponent)}],\r\n})\r\nexport class InputGroupDividerComponent extends InputGroupItemComponent implements ItemDividerInputGroupData {\r\n\r\n isSelect = false;\r\n divider = this;\r\n\r\n @ViewChild('dividerContent', { static: true }) dividerContent: TemplateRef<any>;\r\n\r\n}\r\n","import {\r\n AfterContentInit, AfterViewChecked,\r\n Component,\r\n ContentChildren, EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n Optional, Output,\r\n QueryList,\r\n TemplateRef, ViewChild\r\n} from '@angular/core';\r\nimport {FieldsetData, LegendData, ItemInputGroupData, LabelData, SelectItemData} from '../../interfaces';\r\nimport { ControlContainer, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { LegendComponent } from '../fieldset/legend/legend.component';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\nimport {InputGroupItemComponent} from './input-group-item/input-group-item.component';\r\nimport {DesyOnInputChange} from '../../../shared/decorators/desy-on-input-change.decorator';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\nimport {FieldsetComponent} from '../fieldset/fieldset.component';\r\nimport {MakeHtmlListPipe} from '../../../shared/pipes/make-html-list.pipe';\r\nimport {InputGroupInputComponent} from './input-group-input/input-group-input.component';\r\nimport {InputGroupSelectComponent} from './input-group-select/input-group-select.component';\r\nimport {InputGroupDividerComponent} from './input-group-divider/input-group-divider.component';\r\nimport {StringUtils} from '../../../shared/utils/string-utils';\r\n\r\n@Component({\r\n selector: 'desy-input-group',\r\n templateUrl: './input-group.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputGroupComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class InputGroupComponent extends FormFieldComponent<any> implements OnChanges, AfterContentInit, AfterViewChecked {\r\n\r\n @Input() ngModelGroup: string;\r\n\r\n @DesyOnInputChange('onExternalChange')\r\n @Input() items: ItemInputGroupData[];\r\n @Output() itemsChange: EventEmitter<ItemInputGroupData[]> = new EventEmitter<ItemInputGroupData[]>();\r\n\r\n @DesyOnInputChange('onExternalChange')\r\n @Input() namePrefix: string;\r\n @Input() classes: string;\r\n @Input() formGroupClasses: any;\r\n @Input() errorMessage: string;\r\n @Input() id: string;\r\n\r\n /**\r\n * fieldset, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir objeto FieldsetData (interfaz expuesta)\r\n * 2) incluir template legend\r\n * 3) incluir legendData - incluir un fieldset con una legenda con los parametros pasados (interfaz expuesta)\r\n * 4) incluir legendText - incluir un fieldset con un texto en la legenda\r\n */\r\n @Input() fieldsetData: FieldsetData;\r\n @Input() legendRef: TemplateRef<LegendComponent>;\r\n @Input() legendData: LegendData;\r\n @Input() legendText: string;\r\n\r\n @ContentChildren(InputGroupItemComponent) itemsComponents: QueryList<InputGroupItemComponent>;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideFieldsetParams'})\r\n @ContentChildren(FieldsetComponent) fieldsetComponent: FieldsetComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LegendComponent) legendComponent: LegendComponent;\r\n\r\n @ViewChild('innerHtml', { static: true }) innerHtml: TemplateRef<any>;\r\n\r\n private contentInit = false;\r\n\r\n constructor(@Optional() public controlContainer: ControlContainer) {\r\n super();\r\n }\r\n\r\n ngOnChanges(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (this.items) {\r\n for (const item of this.items) {\r\n if (!item.divider && !item.name) {\r\n throw Error('item name is required');\r\n }\r\n if (!item.divider && !this.hasItemLabel(item)) {\r\n throw Error('item label is required');\r\n }\r\n }\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.contentInit = true;\r\n }\r\n\r\n ngAfterViewChecked(): void {\r\n const items = this.getItems();\r\n if (!items || items.length === 0) {\r\n throw Error('items are required');\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value) {\r\n this.value = value;\r\n const items = this.getItems();\r\n items.forEach(item => {\r\n const v = this.value[this.getItemName(item)];\r\n item.value = v ? v : null;\r\n });\r\n\r\n if (this.items) {\r\n this.itemsChange.emit(this.items);\r\n }\r\n }\r\n this.onChange(value);\r\n }\r\n\r\n onExternalChange(): void {\r\n if (!this.contentInit) {\r\n return;\r\n }\r\n\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n\r\n const items = this.getItems();\r\n items.forEach(item => this.value[this.getItemName(item)] = item.value);\r\n this.onChange(this.value);\r\n }\r\n\r\n onInternalChange(item: ItemInputGroupData, itemValue: any): void {\r\n const itemName = this.getItemName(item);\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n\r\n if (this.value[itemName] !== itemValue) {\r\n this.value[itemName] = itemValue;\r\n this.onChange(this.value);\r\n\r\n if (item instanceof InputGroupInputComponent || item instanceof InputGroupSelectComponent) {\r\n item.valueChange.emit(itemValue);\r\n }\r\n\r\n if (this.items) {\r\n item.value = itemValue;\r\n this.itemsChange.emit(this.items);\r\n }\r\n }\r\n }\r\n\r\n overrideFieldsetParams(fieldset: FieldsetComponent): void {\r\n fieldset.caller = this.innerHtml;\r\n fieldset.errorId = this.getErrorId();\r\n fieldset.describedBy = new MakeHtmlListPipe().transform([this.getHintId(), this.getErrorId()], null);\r\n fieldset.role = 'group';\r\n fieldset.detectChanges();\r\n }\r\n\r\n /*\r\n * Métodos para proporcionar datos\r\n */\r\n getItems(): ItemInputGroupData[] {\r\n return this.itemsComponents && this.itemsComponents.length ? this.itemsComponents.toArray() : this.items;\r\n }\r\n\r\n getItemLabelRef(item: ItemInputGroupData): TemplateRef<any> {\r\n return item instanceof InputGroupInputComponent || item instanceof InputGroupSelectComponent ? item.labelRef : null;\r\n }\r\n\r\n getItemLabelData(item: ItemInputGroupData): LabelData {\r\n return item.labelData ? item.labelData : { text: item.labelText };\r\n }\r\n\r\n hasFieldset(): boolean {\r\n return !!(this.hasFieldsetComponent() || this.hasLegendComponent() || this.legendRef || this.fieldsetData\r\n || (this.legendData && (this.legendData.text || this.legendData.html)) || this.legendText);\r\n }\r\n\r\n hasFieldsetComponent(): boolean {\r\n return !!this.fieldsetComponent;\r\n }\r\n\r\n hasLegendComponent(): boolean {\r\n return !!this.legendComponent;\r\n }\r\n\r\n getItemName(item: ItemInputGroupData): string {\r\n return this.namePrefix ? this.namePrefix + '-' + item.name : item.name;\r\n }\r\n\r\n getItemSelectOptions(item: ItemInputGroupData): SelectItemData[] {\r\n return item instanceof InputGroupSelectComponent ?\r\n item.selectItemComponentList.toArray() : item.selectItems;\r\n }\r\n\r\n getItemDividerTemplate(item: ItemInputGroupData): TemplateRef<any> {\r\n return item.divider instanceof InputGroupDividerComponent ? item.divider.dividerContent : null;\r\n }\r\n\r\n getItemDividerHtml(item: ItemInputGroupData): string {\r\n return item.divider.html ? item.divider.html : `<p>${ StringUtils.escapeHtml(item.divider.text) }</p>`;\r\n }\r\n\r\n isSelectItem(item: ItemInputGroupData): boolean {\r\n let hasSelectItems;\r\n if (item instanceof InputGroupSelectComponent) {\r\n hasSelectItems = item.selectItemComponentList && item.selectItemComponentList.length > 0;\r\n } else {\r\n hasSelectItems = item.selectItems;\r\n }\r\n return item.isSelect && hasSelectItems;\r\n }\r\n\r\n hasItemLabel(item: ItemInputGroupData): boolean {\r\n return !!((item.labelData && (item.labelData.text || item.labelData.html)) || item.labelText);\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n ElementRef,\r\n EventEmitter,\r\n Host,\r\n Input,\r\n OnChanges, OnDestroy, OnInit,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {ItemRadioData} from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {LabelComponent} from '../../label/label.component';\r\nimport {ContentComponent} from '../../../../desy-commons/components/content/content.component';\r\nimport {RadiosComponent} from '../radios.component';\r\nimport {animate, animateChild, query, state, style, transition, trigger} from '@angular/animations';\r\nimport {HintComponent} from '../../hint/hint.component';\r\n\r\n\r\n@Component({\r\n selector: 'desy-radio-item',\r\n templateUrl: './radio-item.component.html',\r\n animations: [\r\n trigger('displayConditional', [\r\n state('void', style({\r\n opacity: '0.0',\r\n transform: 'scale(0.95)'\r\n })),\r\n state('*', style({\r\n opacity: '1.0',\r\n transform: 'scale(1.0)'\r\n })),\r\n transition(':enter', [\r\n animate('100ms ease-out')\r\n ]),\r\n transition('* => *', [\r\n query('@*', animateChild(), {optional: true})\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class RadioItemComponent extends ContentBaseComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit, ItemRadioData {\r\n\r\n @ViewChild('input') inputElement: ElementRef;\r\n\r\n @Input() id: string;\r\n @Input() name: string;\r\n @Input() value: any;\r\n @Input() conditional: boolean;\r\n @Input() disabled: boolean;\r\n @Input() classes: string;\r\n @Input() divider: string;\r\n\r\n @ContentChildren(LabelComponent) labelComponentList: QueryList<LabelComponent>;\r\n @ContentChildren(HintComponent) hintComponentList: QueryList<HintComponent>;\r\n @ContentChildren(ContentComponent) conditionalContentList: QueryList<ContentComponent>;\r\n\r\n @Input() checked: boolean;\r\n @Output() checkedChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n index = 0;\r\n lastChecked;\r\n lastValue;\r\n radioId;\r\n\r\n constructor(@Host() private radios: RadiosComponent, private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n if (!this.radios) {\r\n throw Error('Radios items must be inside of RadiosComponent');\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.radios.markForUpdateCheckboxIds();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.radios.markForUpdateCheckboxIds();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.value && !this.divider) {\r\n throw Error('value or divider are required for checkbox item');\r\n }\r\n\r\n if (this.checked !== this.lastChecked && this.isInit()) {\r\n this.setChecked(this.checked);\r\n this.radios.updateValueFromRadioItems();\r\n } else if (this.lastValue !== undefined && this.lastValue !== this.value) {\r\n this.radios.updateValueFromRadioItems();\r\n }\r\n this.lastValue = this.value;\r\n\r\n if (this.id !== this.radioId) {\r\n this.radios.markForUpdateCheckboxIds();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.setChecked(this.checked);\r\n this.radios.updateValueFromRadioItems();\r\n }\r\n\r\n setChecked(checked: boolean): void {\r\n this.checked = checked;\r\n this.lastChecked = checked;\r\n this.checkedChange.emit(checked);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n /*\r\n * Funciones para aportar información desde el componente checkboxes que lo contiene\r\n */\r\n\r\n getItemHintId(): string {\r\n return this.hintComponentList && this.hintComponentList.length > 0 && this.radioId ? this.radioId + '-item-hint' : null;\r\n }\r\n\r\n hasChanged(): void {\r\n this.setChecked(this.isInputChecked());\r\n this.radios.updateValueFromRadioItems();\r\n }\r\n\r\n isInit(): boolean {\r\n return !!this.inputElement;\r\n }\r\n\r\n isInputChecked(): boolean {\r\n return this.inputElement ? this.inputElement.nativeElement.checked : null;\r\n }\r\n\r\n updateRadioId(index?: number): void {\r\n if (this.id) {\r\n this.radioId = this.id;\r\n } else {\r\n const idPrefix = this.radios.idPrefix ? this.radios.idPrefix : this.radios.name;\r\n if (index === 0) {\r\n this.radioId = idPrefix;\r\n } else {\r\n this.radioId = `${idPrefix}-${index}`;\r\n }\r\n }\r\n\r\n if (this.labelComponentList && this.labelComponentList.length > 0) {\r\n this.labelComponentList.first.for = this.radioId;\r\n }\r\n\r\n if (this.hintComponentList && this.hintComponentList.length > 0) {\r\n this.hintComponentList.first.id = this.getItemHintId();\r\n }\r\n\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n /*\r\n * Funciones para aportar información desde el componente checkboxes que lo contiene\r\n */\r\n\r\n hasDividers(): boolean {\r\n return this.radios.hasDividers;\r\n }\r\n\r\n hasError(): boolean {\r\n return this.radios.hasErrorsMessage();\r\n }\r\n\r\n getNameRadio(): string {\r\n return this.radios.name;\r\n }\r\n\r\n getDescribedBy(): string {\r\n return !this.radios.hasFieldset() ? this.radios.describedBy : null;\r\n }\r\n\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren,\r\n DoCheck,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n QueryList,\r\n TemplateRef, ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {FieldsetData, ItemRadioData, LegendData} from '../../interfaces';\r\nimport {LegendComponent} from '../fieldset/legend/legend.component';\r\nimport {FormFieldComponent} from '../form-field/form-field.component';\r\nimport {RadioItemComponent} from './radio-item/radio-item.component';\r\nimport {FieldsetComponent} from '../fieldset/fieldset.component';\r\nimport {MakeHtmlListPipe} from '../../../shared/pipes/make-html-list.pipe';\r\nimport {HintComponent} from '../hint/hint.component';\r\nimport {ErrorMessageComponent} from '../error-message/error-message.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\nimport {DesyOnInputChange} from '../../../shared/decorators/desy-on-input-change.decorator';\r\n\r\n@Component({\r\n selector: 'desy-radios',\r\n templateUrl: './radios.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RadiosComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class RadiosComponent extends FormFieldComponent<any> implements DoCheck, AfterContentInit {\r\n\r\n\r\n /**\r\n * fieldset, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir componente FieldsetComponent\r\n * 2) incluir objeto FieldsetData (interfaz expuesta)\r\n * 3) incluir componente LegendComponent\r\n * 4) incluir template legend\r\n * 5) incluir legendData - incluir un fieldset con una legenda con los parametros pasados (interfaz expuesta)\r\n * 6) incluir legendText - incluir un fieldset con un texto en la legenda\r\n */\r\n @Input() fieldsetData: FieldsetData;\r\n @Input() legendRef: TemplateRef<LegendComponent>;\r\n @Input() legendData: LegendData;\r\n @Input() legendText: string;\r\n\r\n @DesyOnInputChange('onIdPrefixChange')\r\n @Input() idPrefix: string;\r\n\r\n @DesyOnInputChange('onNameChange')\r\n @Input() name: string;\r\n\r\n @Input() items: ItemRadioData[];\r\n @Output() itemsChange = new EventEmitter<ItemRadioData[]>();\r\n\r\n @Input() formGroupClasses: string;\r\n @Input() hasDividers: boolean;\r\n @Input() hasError: boolean;\r\n @Input() classes: string;\r\n @Input() describedBy: string;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideFieldsetParams'})\r\n @ContentChildren(FieldsetComponent) fieldsetComponent: FieldsetComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LegendComponent) legendComponent: LegendComponent;\r\n\r\n @ContentChildren(RadioItemComponent) radioComponentItems: QueryList<RadioItemComponent>;\r\n\r\n @ViewChild('innerHtml', { static: true }) innerHtml: TemplateRef<any>;\r\n @ViewChildren(RadioItemComponent) radioComponentItems2: QueryList<RadioItemComponent>;\r\n\r\n private nextValue = null;\r\n private updateChekboxIds = false;\r\n private contentInit = false;\r\n\r\n ngDoCheck(): void {\r\n if (this.nextValue !== null && (this.nextValue !== '' || (this.value && this.value !== ''))) {\r\n this.value = this.nextValue;\r\n this.nextValue = null;\r\n const updateItems = this.updateRadioItemsChecked();\r\n setTimeout(() => {\r\n this.onChange(this.value);\r\n if (updateItems && this.items && this.items.length > 0) {\r\n this.itemsChange.emit(this.items);\r\n }\r\n });\r\n }\r\n\r\n if (this.updateChekboxIds) {\r\n const checkboxItems = this.getRadioItems();\r\n if (checkboxItems.length > 0) {\r\n checkboxItems.forEach((item, index) => item.updateRadioId(index));\r\n } else {\r\n throw Error('items are required');\r\n }\r\n this.updateChekboxIds = false;\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n\r\n this.contentInit = true;\r\n }\r\n\r\n /**\r\n * Se sobrescribe el writeValue de FormField para gestionar en un único punto el valor de value\r\n * @param value nuevo valor a establecer\r\n */\r\n writeValue(value: any[]): void {\r\n if (value) {\r\n this.nextValue = value;\r\n }\r\n }\r\n\r\n onIdPrefixChange(): void {\r\n if (this.contentInit) {\r\n this.markForUpdateCheckboxIds();\r\n }\r\n this.propagateNewIdPrefixValue();\r\n }\r\n\r\n\r\n onNameChange(): void {\r\n if (this.contentInit && !this.name) {\r\n throw Error('name is required');\r\n }\r\n\r\n if (this.contentInit) {\r\n this.markForUpdateCheckboxIds();\r\n }\r\n\r\n this.propagateNewIdPrefixValue();\r\n }\r\n\r\n /**\r\n * Actualiza los componentes externos que tienen valores dependientes de idPrefix\r\n * @private\r\n */\r\n private propagateNewIdPrefixValue(): void {\r\n if (this.hintComponent) {\r\n this.overrideHintParams(this.hintComponent);\r\n }\r\n\r\n if (this.errorMessageComponent) {\r\n this.overrideErrorMessageParams(this.errorMessageComponent);\r\n }\r\n\r\n // Al hacer el override de hint o error ya se aplica sobre el fieldset, por lo que sólo es necesario aplicarlo directamente\r\n // sobre el fieldset cuando ninguno de estos existe\r\n if (!this.hintComponent && !this.errorMessageComponent && this.fieldsetComponent) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n markForUpdateCheckboxIds(): void {\r\n this.updateChekboxIds = true;\r\n }\r\n\r\n /**\r\n * Actualiza el estado de los items según el valor asignado al componente\r\n */\r\n private updateRadioItemsChecked(): boolean {\r\n let itemsUpdated = false;\r\n const checkboxItems = this.getRadioItems();\r\n if (checkboxItems.length > 0) {\r\n checkboxItems.forEach(item => {\r\n if (item.value === this.value && !item.lastChecked) {\r\n item.setChecked(true);\r\n itemsUpdated = true;\r\n } else if (item.value !== this.value && item.lastChecked) {\r\n item.setChecked(false);\r\n itemsUpdated = true;\r\n }\r\n });\r\n }\r\n return itemsUpdated;\r\n }\r\n\r\n /**\r\n * Actualiza el valor cuando se produce un cambio en los items, tanto interno como externo\r\n */\r\n updateValueFromRadioItems(): void {\r\n\r\n /*\r\n * Se realiza dentro de un timeout porque, aunque los componentes items se hayan inicializado, en este componente puede ser que todavía\r\n * no se detecten, y por tanto el getCheckboxItems no devuelva la lista correcta.\r\n */\r\n setTimeout( () => {\r\n const items = this.getRadioItems();\r\n if (items && items.length > 0 && items.findIndex(item => !item.isInit() && !item.divider) < 0) {\r\n const checkedItem = items.find(item => item.isInputChecked() && !item.divider);\r\n this.nextValue = checkedItem ? checkedItem.value : null;\r\n }\r\n });\r\n\r\n if (this.items && this.items.length > 0) {\r\n this.itemsChange.emit(this.items);\r\n }\r\n }\r\n\r\n /*\r\n * Funciones para reemplazar el contenido del fieldset, label, hint o errormessage\r\n */\r\n\r\n overrideFieldsetParams(fieldset: FieldsetComponent): void {\r\n fieldset.caller = this.innerHtml;\r\n fieldset.errorId = this.getErrorId();\r\n fieldset.describedBy = new MakeHtmlListPipe().transform([this.getHintId(), this.getErrorId()], null);\r\n fieldset.detectChanges();\r\n }\r\n\r\n overrideHintParams(hint: HintComponent): void {\r\n hint.id = this.getHintId();\r\n hint.detectChanges();\r\n\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n overrideErrorMessageParams(errorMessage: ErrorMessageComponent): void {\r\n errorMessage.id = this.getErrorId();\r\n errorMessage.detectChanges();\r\n\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n onDeleteHint(): void {\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n onDeleteErrorMessage(): void {\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Funciones para recuperar valores comunes\r\n */\r\n\r\n hasFieldset(): boolean {\r\n return !!(this.hasFieldsetComponent() || this.hasLegendComponent() || this.legendRef || this.fieldsetData ||\r\n (this.legendData && (this.legendData.text || this.legendData.html)) || this.legendText);\r\n }\r\n\r\n hasFieldsetComponent(): boolean {\r\n return !!this.fieldsetComponent;\r\n }\r\n\r\n hasLegendComponent(): boolean {\r\n return !!this.legendComponent;\r\n }\r\n\r\n getErrorId(): string {\r\n return this.hasErrorsMessage() ? this.getIdPrefix() + '-error' : null;\r\n }\r\n\r\n getHintId(): string {\r\n return this.hasHint() ? this.getIdPrefix() + '-hint' : null;\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : this.name;\r\n }\r\n\r\n getRadioItems(): RadioItemComponent[] {\r\n let checkboxItems = [];\r\n if (this.radioComponentItems && this.radioComponentItems.length > 0) {\r\n checkboxItems = this.radioComponentItems.toArray();\r\n } else if (this.radioComponentItems2 && this.radioComponentItems2.length > 0) {\r\n checkboxItems = this.radioComponentItems2.toArray();\r\n }\r\n return checkboxItems;\r\n }\r\n}\r\n","import {\r\n AfterViewInit, ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n ElementRef,\r\n EventEmitter,\r\n Host,\r\n Input, OnChanges, OnDestroy, OnInit,\r\n Output, QueryList, SimpleChanges,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {ItemCheckboxData} from '../../../interfaces';\r\nimport {ContentComponent} from '../../../../desy-commons/components/content/content.component';\r\nimport {animate, animateChild, query, state, style, transition, trigger} from '@angular/animations';\r\nimport {LabelComponent} from '../../label/label.component';\r\nimport {HintComponent} from '../../hint/hint.component';\r\nimport {CheckboxesComponent} from '../checkboxes.component';\r\nimport {AccessibilityComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-checkbox-item',\r\n templateUrl: './checkbox-item.component.html',\r\n animations: [\r\n trigger('displayConditional', [\r\n state('void', style({\r\n opacity: '0.0',\r\n transform: 'scale(0.95)'\r\n })),\r\n state('*', style({\r\n opacity: '1.0',\r\n transform: 'scale(1.0)'\r\n })),\r\n transition(':enter', [\r\n animate('100ms ease-out')\r\n ]),\r\n transition('* => *', [\r\n query('@*', animateChild(), {optional: true})\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class CheckboxItemComponent extends AccessibilityComponent implements OnInit, OnDestroy, OnChanges, AfterViewInit, ItemCheckboxData {\r\n\r\n @ViewChild('input') inputElement: ElementRef;\r\n\r\n @Input() id: string;\r\n @Input() value: any;\r\n @Input() name: string;\r\n @Input() conditional: boolean;\r\n @Input() disabled: boolean;\r\n @Input() isIndeterminate: boolean;\r\n @Input() classes: string;\r\n\r\n @ContentChildren(LabelComponent) labelComponentList: QueryList<LabelComponent>;\r\n @ContentChildren(HintComponent) hintComponentList: QueryList<HintComponent>;\r\n @ContentChildren(ContentComponent) conditionalContentList: QueryList<ContentComponent>;\r\n\r\n @Input() checked: boolean;\r\n @Output() checkedChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n lastChecked;\r\n lastValue;\r\n checkboxId;\r\n\r\n constructor(@Host() private checkboxes: CheckboxesComponent, private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n if (!this.checkboxes) {\r\n throw Error('Checkbox items must be inside of CheckboxesComponent');\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.checkboxes.markForUpdateCheckboxIds();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.checkboxes.markForUpdateCheckboxIds();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.value) {\r\n throw Error('value is required for checkbox item');\r\n }\r\n\r\n if (this.checked !== this.lastChecked && this.isInit()) {\r\n this.setChecked(this.checked);\r\n this.checkboxes.updateValueFromCheckboxItems();\r\n } else if (this.lastValue !== undefined && this.lastValue !== this.value) {\r\n this.checkboxes.updateValueFromCheckboxItems();\r\n }\r\n this.lastValue = this.value;\r\n\r\n if (this.id !== this.checkboxId) {\r\n this.checkboxes.markForUpdateCheckboxIds();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.setChecked(this.checked);\r\n this.checkboxes.updateValueFromCheckboxItems();\r\n }\r\n\r\n getItemHintId(): string {\r\n return this.hintComponentList && this.hintComponentList.length > 0 && this.checkboxId ? this.checkboxId + '-item-hint' : null;\r\n }\r\n\r\n hasChanged(): void {\r\n\r\n // Se establece el cambio a visualizar en el input\r\n const input = this.inputElement.nativeElement;\r\n if (this.isIndeterminate) {\r\n if (input.readOnly) {\r\n input.checked = false;\r\n input.readOnly = false;\r\n } else if (!input.checked) {\r\n input.readOnly = true;\r\n input.indeterminate = true;\r\n }\r\n }\r\n\r\n this.setChecked(input.checked);\r\n this.checkboxes.updateValueFromCheckboxItems();\r\n }\r\n\r\n setChecked(checked: boolean): void {\r\n this.checked = checked;\r\n this.lastChecked = checked;\r\n this.checkedChange.emit(checked);\r\n this.changeDetectorRef.detectChanges(); // Avisa al elemento input para que actualice su estado\r\n }\r\n\r\n isInit(): boolean {\r\n return !!this.inputElement;\r\n }\r\n\r\n getValue(): any {\r\n const input = this.inputElement.nativeElement;\r\n return input.checked || input.indeterminate ? this.value : null;\r\n }\r\n\r\n updateCheckboxId(index?: number): void {\r\n if (this.id) {\r\n this.checkboxId = this.id;\r\n } else {\r\n const idPrefix = this.checkboxes.idPrefix ? this.checkboxes.idPrefix : this.checkboxes.name;\r\n if (index === 0) {\r\n this.checkboxId = idPrefix;\r\n } else {\r\n this.checkboxId = `${idPrefix}-${index}`;\r\n }\r\n }\r\n\r\n if (this.labelComponentList && this.labelComponentList.length > 0) {\r\n this.labelComponentList.first.for = this.checkboxId;\r\n }\r\n\r\n if (this.hintComponentList && this.hintComponentList.length > 0) {\r\n this.hintComponentList.first.id = this.getItemHintId();\r\n }\r\n\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n /*\r\n * Funciones para aportar información desde el componente checkboxes que lo contiene\r\n */\r\n\r\n hasDividers(): boolean {\r\n return this.checkboxes.hasDividers;\r\n }\r\n\r\n hasError(): boolean {\r\n return this.checkboxes.hasErrorsMessage();\r\n }\r\n\r\n getNameCheckbox(): string {\r\n return this.checkboxes.name;\r\n }\r\n\r\n getDescribedBy(): string {\r\n return !this.checkboxes.hasFieldset() ? this.checkboxes.describedBy : null;\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren, DoCheck, EventEmitter,\r\n forwardRef,\r\n Input, Output,\r\n QueryList,\r\n TemplateRef, ViewChild, ViewChildren\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\nimport { FieldsetData, LegendData, ItemCheckboxData } from '../../interfaces';\r\nimport { LegendComponent } from '../fieldset/legend/legend.component';\r\nimport {CheckboxItemComponent} from './checkbox-item/checkbox-item.component';\r\nimport {HintComponent} from '../hint/hint.component';\r\nimport {ErrorMessageComponent} from '../error-message/error-message.component';\r\nimport {FieldsetComponent} from '../fieldset/fieldset.component';\r\nimport {MakeHtmlListPipe} from '../../../shared/pipes/make-html-list.pipe';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\nimport {DesyOnInputChange} from '../../../shared/decorators/desy-on-input-change.decorator';\r\n\r\n\r\n@Component({\r\n selector: 'desy-checkboxes',\r\n templateUrl: './checkboxes.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CheckboxesComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class CheckboxesComponent extends FormFieldComponent<any[]> implements AfterContentInit, DoCheck {\r\n\r\n /**\r\n * fieldset, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir componente FieldsetComponent\r\n * 2) incluir objeto FieldsetData (interfaz expuesta)\r\n * 3) incluir componente LegendComponent\r\n * 4) incluir template legend\r\n * 5) incluir legendData - incluir un fieldset con una legenda con los parametros pasados (interfaz expuesta)\r\n * 6) incluir legendText - incluir un fieldset con un texto en la legenda\r\n */\r\n @Input() fieldsetData: FieldsetData;\r\n @Input() legendRef: TemplateRef<LegendComponent>;\r\n @Input() legendData: LegendData;\r\n @Input() legendText: string;\r\n\r\n @DesyOnInputChange('onIdPrefixChange')\r\n @Input() idPrefix: string;\r\n\r\n @DesyOnInputChange('onNameChange')\r\n @Input() name: string;\r\n\r\n @Input() items: ItemCheckboxData[];\r\n @Output() itemsChange = new EventEmitter<ItemCheckboxData[]>();\r\n\r\n @Input() formGroupClasses: string;\r\n @Input() hasDividers: boolean;\r\n @Input() hasError: boolean;\r\n @Input() classes: string;\r\n @Input() describedBy: string;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideFieldsetParams'})\r\n @ContentChildren(FieldsetComponent) fieldsetComponent: FieldsetComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LegendComponent) legendComponent: LegendComponent;\r\n\r\n @ContentChildren(CheckboxItemComponent) checkboxComponentItems: QueryList<CheckboxItemComponent>;\r\n\r\n @ViewChild('innerHtml', { static: true }) innerHtml: TemplateRef<any>;\r\n @ViewChildren(CheckboxItemComponent) checkboxComponentItems2: QueryList<CheckboxItemComponent>;\r\n\r\n private nextValue = null;\r\n private updateChekboxIds = false;\r\n private contentInit = false;\r\n\r\n ngDoCheck(): void {\r\n if (this.nextValue !== null && (this.nextValue.length > 0 || (this.value && this.value.length > 0))) {\r\n this.value = this.nextValue;\r\n this.nextValue = null;\r\n this.updateCheckboxItemsChecked();\r\n setTimeout(() => {\r\n this.onChange(this.value);\r\n if (this.items && this.items.length > 0) {\r\n this.itemsChange.emit(this.items);\r\n }\r\n });\r\n }\r\n\r\n if (this.updateChekboxIds) {\r\n const checkboxItems = this.getCheckboxItems();\r\n if (checkboxItems.length > 0) {\r\n checkboxItems.forEach((item, index) => item.updateCheckboxId(index));\r\n } else {\r\n throw Error('items are required');\r\n }\r\n this.updateChekboxIds = false;\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n\r\n this.contentInit = true;\r\n }\r\n\r\n /**\r\n * Se sobrescribe el writeValue de FormField para gestionar en un único punto el valor de value\r\n * @param value nuevo valor a establecer\r\n */\r\n writeValue(value: any[]): void {\r\n if (value) {\r\n this.nextValue = value;\r\n }\r\n }\r\n\r\n onIdPrefixChange(): void {\r\n if (this.contentInit) {\r\n this.markForUpdateCheckboxIds();\r\n }\r\n this.propagateNewIdPrefixValue();\r\n }\r\n\r\n\r\n onNameChange(): void {\r\n if (this.contentInit && !this.name) {\r\n throw Error('name is required');\r\n }\r\n\r\n if (this.contentInit) {\r\n this.markForUpdateCheckboxIds();\r\n }\r\n\r\n this.propagateNewIdPrefixValue();\r\n }\r\n\r\n /**\r\n * Actualiza los componentes externos que tienen valores dependientes de idPrefix\r\n * @private\r\n */\r\n private propagateNewIdPrefixValue(): void {\r\n if (this.hintComponent) {\r\n this.overrideHintParams(this.hintComponent);\r\n }\r\n\r\n if (this.errorMessageComponent) {\r\n this.overrideErrorMessageParams(this.errorMessageComponent);\r\n }\r\n\r\n // Al hacer el override de hint o error ya se aplica sobre el fieldset, por lo que sólo es necesario aplicarlo directamente\r\n // sobre el fieldset cuando ninguno de estos existe\r\n if (!this.hintComponent && !this.errorMessageComponent && this.fieldsetComponent) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n markForUpdateCheckboxIds(): void {\r\n this.updateChekboxIds = true;\r\n }\r\n\r\n\r\n /**\r\n * Actualiza el estado de los items según el valor asignado al componente\r\n */\r\n private updateCheckboxItemsChecked(): void {\r\n const checkboxItems = this.getCheckboxItems();\r\n if (checkboxItems.length > 0) {\r\n checkboxItems.forEach(item => {\r\n const itemChecked = this.value.findIndex(v => v === item.value) > -1;\r\n if (itemChecked !== item.lastChecked) {\r\n item.setChecked(itemChecked);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Actualiza el valor cuando se produce un cambio en los items, tanto interno como externo\r\n */\r\n updateValueFromCheckboxItems(): void {\r\n\r\n /*\r\n * Se realiza dentro de un timeout porque, aunque los componentes items se hayan inicializado, en este componente puede ser que todavía\r\n * no se detecten, y por tanto el getCheckboxItems no devuelva la lista correcta.\r\n */\r\n setTimeout( () => {\r\n const items = this.getCheckboxItems();\r\n if (items && items.length > 0 && items.findIndex(item => !item.isInit()) < 0) {\r\n this.nextValue = items.filter(item => item.checked).map(item => item.getValue());\r\n }\r\n });\r\n\r\n if (this.items && this.items.length > 0) {\r\n this.itemsChange.emit(this.items);\r\n }\r\n }\r\n\r\n /*\r\n * Funciones para reemplazar el contenido del fieldset, label, hint o errormessage\r\n */\r\n\r\n overrideFieldsetParams(fieldset: FieldsetComponent): void {\r\n fieldset.caller = this.innerHtml;\r\n fieldset.errorId = this.getErrorId();\r\n fieldset.describedBy = new MakeHtmlListPipe().transform([this.getHintId(), this.getErrorId()], null);\r\n fieldset.detectChanges();\r\n }\r\n\r\n overrideHintParams(hint: HintComponent): void {\r\n hint.id = this.getHintId();\r\n hint.detectChanges();\r\n\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n overrideErrorMessageParams(errorMessage: ErrorMessageComponent): void {\r\n errorMessage.id = this.getErrorId();\r\n errorMessage.detectChanges();\r\n\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n onDeleteHint(): void {\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n onDeleteErrorMessage(): void {\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Funciones para recuperar valores comunes\r\n */\r\n\r\n\r\n hasFieldset(): boolean {\r\n return !!(this.hasFieldsetComponent() || this.hasLegendComponent() || this.legendRef || this.fieldsetData ||\r\n (this.legendData && (this.legendData.text || this.legendData.html)) || this.legendText);\r\n }\r\n\r\n hasFieldsetComponent(): boolean {\r\n return !!this.fieldsetComponent;\r\n }\r\n\r\n hasLegendComponent(): boolean {\r\n return !!this.legendComponent;\r\n }\r\n\r\n getErrorId(): string {\r\n return this.hasErrorsMessage() ? this.getIdPrefix() + '-error' : undefined;\r\n }\r\n\r\n getHintId(): string {\r\n return this.hasHint() ? this.getIdPrefix() + '-hint' : undefined;\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : this.name;\r\n }\r\n\r\n getCheckboxItems(): CheckboxItemComponent[] {\r\n let checkboxItems = [];\r\n if (this.checkboxComponentItems && this.checkboxComponentItems.length > 0) {\r\n checkboxItems = this.checkboxComponentItems.toArray();\r\n } else if (this.checkboxComponentItems2 && this.checkboxComponentItems2.length > 0) {\r\n checkboxItems = this.checkboxComponentItems2.toArray();\r\n }\r\n return checkboxItems;\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ItemDateInputData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-date-input-item',\r\n template: ''\r\n})\r\nexport class DateInputItemComponent implements ItemDateInputData {\r\n @Input() classes?: string;\r\n\r\n}\r\n","import {AfterContentInit, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, TemplateRef, ViewChild} from '@angular/core';\r\nimport { ItemDateInputData } from '../../../interfaces';\r\nimport { LabelData } from '../../../interfaces';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {LabelComponent} from '../../label/label.component';\r\nimport { DateInputItemComponent } from '../date-input-item/date-input-item.component';\r\n\r\n@Component({\r\n selector: 'desy-input-day',\r\n templateUrl: './date-input-day.component.html',\r\n providers: [{provide: DateInputItemComponent, useExisting: forwardRef(() => DateInputDayComponent)}],\r\n})\r\nexport class DateInputDayComponent extends DateInputItemComponent implements ItemDateInputData, AfterContentInit {\r\n @Input() id: string;\r\n @Input() name: string;\r\n @Input() labelText: string;\r\n @Input() labelData: LabelData;\r\n @Input() disabled: boolean;\r\n @Input() hasErrors: boolean;\r\n @Input() value: any;\r\n @Input() autocomplete: string;\r\n @Input() pattern: string;\r\n @Input() classes: string;\r\n @Input() maxlength: number;\r\n\r\n @Output() valueChange: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LabelComponent) labelComponent: LabelComponent;\r\n\r\n @ViewChild('label', { static: true }) labelRef: TemplateRef<any>;\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('day name is required');\r\n }\r\n if (!this.labelComponent) {\r\n throw Error('day label is required');\r\n }\r\n }\r\n}\r\n","import {AfterContentInit, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, TemplateRef, ViewChild} from '@angular/core';\r\nimport { ItemDateInputData } from '../../../interfaces';\r\nimport { LabelData } from '../../../interfaces';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {LabelComponent} from '../../label/label.component';\r\nimport { DateInputItemComponent } from '../date-input-item/date-input-item.component';\r\n\r\n@Component({\r\n selector: 'desy-input-month',\r\n templateUrl: './date-input-month.component.html',\r\n providers: [{provide: DateInputItemComponent, useExisting: forwardRef(() => DateInputMonthComponent)}],\r\n})\r\nexport class DateInputMonthComponent extends DateInputItemComponent implements ItemDateInputData, AfterContentInit {\r\n @Input() id: string;\r\n @Input() name: string;\r\n @Input() labelText: string;\r\n @Input() labelData: LabelData;\r\n @Input() disabled: boolean;\r\n @Input() hasErrors: boolean;\r\n @Input() value: any;\r\n @Input() autocomplete: string;\r\n @Input() pattern: string;\r\n @Input() classes: string;\r\n @Input() maxlength: number;\r\n\r\n @Output() valueChange: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LabelComponent) labelComponent: LabelComponent;\r\n\r\n @ViewChild('label', { static: true }) labelRef: TemplateRef<any>;\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('month name is required');\r\n }\r\n if (!this.labelComponent) {\r\n throw Error('month label is required');\r\n }\r\n }\r\n}\r\n","import {AfterContentInit, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, TemplateRef, ViewChild} from '@angular/core';\r\nimport { ItemDateInputData } from '../../../interfaces';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {LabelComponent} from '../../label/label.component';\r\nimport { DateInputItemComponent } from '../date-input-item/date-input-item.component';\r\n\r\n@Component({\r\n selector: 'desy-input-year',\r\n templateUrl: './date-input-year.component.html',\r\n providers: [{provide: DateInputItemComponent, useExisting: forwardRef(() => DateInputYearComponent)}],\r\n})\r\nexport class DateInputYearComponent extends DateInputItemComponent implements ItemDateInputData, AfterContentInit {\r\n @Input() id: string;\r\n @Input() name: string;\r\n @Input() disabled: boolean;\r\n @Input() hasErrors: boolean;\r\n @Input() value: any;\r\n @Input() autocomplete: string;\r\n @Input() pattern: string;\r\n @Input() classes: string;\r\n @Input() maxlength: number;\r\n\r\n @Output() valueChange: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LabelComponent) labelComponent: LabelComponent;\r\n\r\n @ViewChild('label', { static: true }) labelRef: TemplateRef<any>;\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('year name is required');\r\n }\r\n if (!this.labelComponent) {\r\n throw Error('year label is required');\r\n }\r\n }\r\n}\r\n","import {Component, forwardRef, TemplateRef, ViewChild} from '@angular/core';\r\nimport { ItemDividerDateInputData } from '../../../interfaces/item-divider-date-input-data';\r\nimport { DateInputItemComponent } from '../date-input-item/date-input-item.component';\r\n\r\n@Component({\r\n selector: 'desy-date-input-divider',\r\n templateUrl: './date-input-divider.component.html',\r\n providers: [{provide: DateInputItemComponent, useExisting: forwardRef(() => DateInputDividerComponent)}],\r\n})\r\nexport class DateInputDividerComponent extends DateInputItemComponent implements ItemDividerDateInputData {\r\n\r\n divider = this;\r\n\r\n @ViewChild('dividerContent', { static: true }) dividerContent: TemplateRef<any>;\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren, EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n Optional, Output,\r\n QueryList,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { ControlContainer, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\nimport { FieldsetData, LegendData, ItemDateInputData, LabelData } from '../../interfaces';\r\nimport { LegendComponent } from '../fieldset/legend/legend.component';\r\nimport { FieldsetComponent } from '../fieldset/fieldset.component';\r\nimport { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';\r\nimport { DateInputDayComponent } from './date-input-day/date-input-day.component';\r\nimport { DateInputMonthComponent } from './date-input-month/date-input-month.component';\r\nimport { DateInputYearComponent } from './date-input-year/date-input-year.component';\r\nimport {MakeHtmlListPipe} from '../../../shared/pipes/make-html-list.pipe';\r\nimport {DesyOnInputChange} from '../../../shared/decorators/desy-on-input-change.decorator';\r\nimport { DateInputDividerComponent } from './date-input-divider/date-input-divider.component';\r\nimport { StringUtils } from '../../../shared/utils/string-utils';\r\nimport { DateInputItemComponent } from './date-input-item/date-input-item.component';\r\n\r\n@Component({\r\n selector: 'desy-date-input',\r\n templateUrl: './date-input.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DateInputComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class DateInputComponent extends FormFieldComponent<any> implements OnChanges, AfterContentInit {\r\n\r\n private static defaultItems = [\r\n {\r\n name: 'day',\r\n classes: 'w-14',\r\n maxlength: 2\r\n },\r\n {\r\n name: 'month',\r\n classes: 'w-14',\r\n maxlength: 2\r\n },\r\n {\r\n name: 'year',\r\n classes: 'w-20',\r\n maxlength: 4\r\n }\r\n ];\r\n\r\n @Input() ngModelGroup: string;\r\n\r\n @DesyOnInputChange('onExternalChange')\r\n @Input() items: ItemDateInputData[];\r\n @Output() itemsChange: EventEmitter<ItemDateInputData[]> = new EventEmitter<ItemDateInputData[]>();\r\n\r\n @DesyOnInputChange('onExternalChange')\r\n @Input() namePrefix: string;\r\n @Input() classes: string;\r\n @Input() formGroupClasses: any;\r\n @Input() errorMessage: string;\r\n @Input() id: string;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideFieldsetParams'})\r\n @ContentChildren(FieldsetComponent) fieldsetComponent: FieldsetComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LegendComponent) legendComponent: LegendComponent;\r\n\r\n @ContentChildren(DateInputItemComponent) dateInputItemComponents: QueryList<DateInputItemComponent>;\r\n\r\n /**\r\n * fieldset, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir objeto FieldsetData (interfaz expuesta)\r\n * 2) incluir template legend\r\n * 3) incluir legendData - incluir un fieldset con una legenda con los parametros pasados (interfaz expuesta)\r\n * 4) incluir legendText - incluir un fieldset con un texto en la legenda\r\n */\r\n @Input() fieldsetData: FieldsetData;\r\n @Input() legendRef: TemplateRef<LegendComponent>;\r\n @Input() legendData: LegendData;\r\n @Input() legendText: string;\r\n\r\n @ViewChild('innerHtml', { static: true }) innerHtml: TemplateRef<any>;\r\n\r\n private contentInit = false;\r\n\r\n constructor(@Optional() public controlContainer: ControlContainer) {\r\n super();\r\n }\r\n\r\n ngOnChanges(): void {\r\n this.checkRequired();\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.contentInit = true;\r\n }\r\n\r\n initDefaultItems(): void {\r\n if (!this.items) {\r\n this.items = [\r\n {\r\n name: 'día',\r\n classes: 'w-14',\r\n maxlength: 2\r\n },\r\n {\r\n name: 'mes',\r\n classes: 'w-14',\r\n maxlength: 2\r\n },\r\n {\r\n name: 'año',\r\n classes: 'w-20',\r\n maxlength: 4\r\n }\r\n ];\r\n }\r\n }\r\n\r\n checkRequired(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n if (this.value) {\r\n const items = this.getItems();\r\n items.forEach(item => item.value = this.value[this.getItemName(item)]);\r\n\r\n if (this.items) {\r\n this.itemsChange.emit(this.items);\r\n }\r\n }\r\n this.onChange(value);\r\n }\r\n\r\n overrideFieldsetParams(fieldset: FieldsetComponent): void {\r\n fieldset.caller = this.innerHtml;\r\n fieldset.errorId = this.getErrorId();\r\n fieldset.describedBy = new MakeHtmlListPipe().transform([this.getHintId(), this.getErrorId()], null);\r\n fieldset.role = 'group';\r\n fieldset.detectChanges();\r\n }\r\n\r\n onExternalChange(): void {\r\n if (!this.contentInit) {\r\n return;\r\n }\r\n\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n\r\n const items = this.getItems();\r\n items.forEach(item => this.value[this.getItemName(item)] = item.value);\r\n const newVal = {};\r\n Object.assign(newVal, this.value);\r\n this.onChange(newVal);\r\n }\r\n\r\n onInternalChange(item: ItemDateInputData, itemValue: number): void {\r\n const itemName = this.getItemName(item);\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n\r\n if (this.value[itemName] !== itemValue) {\r\n this.value[itemName] = itemValue ? +itemValue : undefined;\r\n const newVal = {};\r\n Object.assign(newVal, this.value);\r\n this.onChange(newVal);\r\n if (item instanceof DateInputDayComponent || item instanceof DateInputMonthComponent || item instanceof DateInputYearComponent) {\r\n item.valueChange.emit(itemValue);\r\n }\r\n\r\n if (this.items) {\r\n item.value = itemValue;\r\n this.itemsChange.emit(this.items);\r\n }\r\n }\r\n }\r\n\r\n hasFieldset(): boolean {\r\n return !!(this.hasFieldsetComponent() || this.hasLegendComponent() || this.legendRef || this.fieldsetData\r\n || (this.legendData && (this.legendData.text || this.legendData.html)) || this.legendText);\r\n }\r\n\r\n hasFieldsetComponent(): boolean {\r\n return !!this.fieldsetComponent;\r\n }\r\n\r\n hasLegendComponent(): boolean {\r\n return !!this.legendComponent;\r\n }\r\n\r\n hasErrorMessageComponent(): boolean {\r\n return !!this.errorMessageComponent;\r\n }\r\n\r\n getItemName(item: ItemDateInputData): string {\r\n return this.namePrefix ? this.namePrefix + '-' + item.name : item.name;\r\n }\r\n\r\n getItemLabel(item: ItemDateInputData): LabelData {\r\n let labelData: LabelData;\r\n if (item.labelData && (item.labelData.text || item.labelData.html)) {\r\n labelData = item.labelData;\r\n } else {\r\n labelData = {\r\n text: item.labelText ? item.labelText : item.name.toUpperCase()\r\n };\r\n }\r\n return labelData;\r\n }\r\n\r\n getItemLabelRef(item: ItemDateInputData): TemplateRef<any> {\r\n return item instanceof DateInputDayComponent || item instanceof DateInputMonthComponent || item instanceof DateInputYearComponent ?\r\n item.labelRef : null;\r\n }\r\n\r\n getItems(): ItemDateInputData[] {\r\n let items;\r\n if (this.dateInputItemComponents && this.dateInputItemComponents.length > 0) {\r\n items = this.dateInputItemComponents.toArray();\r\n } else if (this.items) {\r\n items = this.items;\r\n } else if (this.contentInit) {\r\n items = DateInputComponent.defaultItems;\r\n } else {\r\n items = [];\r\n }\r\n\r\n items.forEach(item => {\r\n if (!item.name && !(item instanceof DateInputDividerComponent)) {\r\n throw new Error('Item name is required');\r\n }\r\n });\r\n\r\n return items;\r\n }\r\n\r\n getItemDividerTemplate(item: ItemDateInputData): TemplateRef<any> {\r\n return item.divider instanceof DateInputDividerComponent ? item.divider.dividerContent : null;\r\n }\r\n getItemDividerHtml(item: ItemDateInputData): string {\r\n return item.divider.html ? item.divider.html : `<p>${ StringUtils.escapeHtml(item.divider.text) }</p>`;\r\n }\r\n\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n Output, QueryList,\r\n SimpleChanges\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\nimport { ButtonComponent } from '../../../desy-buttons/components/button/button.component';\r\n\r\n@Component({\r\n selector: 'desy-search-bar',\r\n templateUrl: './search-bar.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SearchBarComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class SearchBarComponent extends FormFieldComponent<string> implements OnChanges, AfterViewInit {\r\n\r\n @ContentChildren(ButtonComponent) button: QueryList<ButtonComponent>;\r\n\r\n @Input() describedBy: string;\r\n @Input() classes: string;\r\n @Input() buttonClasses: string;\r\n @Input() placeholder: string;\r\n @Output() clickEvent = new EventEmitter();\r\n\r\n value = '';\r\n\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequiredParams();\r\n }\r\n\r\n checkRequiredParams(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.hasLabel()) {\r\n throw Error('label is required');\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.button && this.button.length > 1) {\r\n throw Error('only 1 button in content is allowed');\r\n }\r\n }\r\n\r\n onClick(event: any): void {\r\n if (!this.disabled) {\r\n this.clickEvent.emit(event);\r\n }\r\n }\r\n\r\n hasButton(): boolean {\r\n return this.button && this.button.length > 0;\r\n }\r\n\r\n}\r\n","import { Directive, Input, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { ItemCheckboxData, ItemRadioWithTemplateData } from '../interfaces';\r\n\r\n@Directive({\r\n selector: '[desyCondition]'\r\n})\r\nexport class ConditionDirective implements OnChanges {\r\n\r\n /**\r\n * Condition, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir objeto ItemCheckboxData o ItemRadioWithTemplateData (interfaces expuesta)\r\n * 2) incluir value y el listado de ItemCheckboxData[] o ItemRadioWithTemplateData[]\r\n */\r\n @Input() item: ItemCheckboxData|ItemRadioWithTemplateData;\r\n\r\n @Input() value: any;\r\n @Input() items: ItemCheckboxData[]|ItemRadioWithTemplateData[];\r\n\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.item) {\r\n this.item.conditionalHtml = this.templateRef;\r\n } else if (this.value && this.items) {\r\n for (const item of this.items) {\r\n if (item.value === this.value) {\r\n item.conditionalHtml = this.templateRef;\r\n }\r\n }\r\n } else {\r\n throw Error('item or value + items are required');\r\n }\r\n }\r\n\r\n}\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {ModalButtonData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-modal-button-primary',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ModalButtonPrimaryComponent extends ContentBaseComponent implements ModalButtonData {\r\n @Input() classes?: string;\r\n\r\n @Output() clickEvent = new EventEmitter();\r\n}\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {ModalButtonData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-modal-button-secondary',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ModalButtonSecondaryComponent extends ContentBaseComponent implements ModalButtonData {\r\n @Input() classes?: string;\r\n\r\n @Output() clickEvent = new EventEmitter();\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren, ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n TemplateRef\r\n} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport { ModalButtonData, ModalData, ModalIconData } from '../../interfaces';\r\nimport {TitleComponent} from '../../../desy-commons/components/title/title.component';\r\nimport {DescriptionComponent} from '../../../desy-commons/components/description/description.component';\r\nimport {IconComponent} from '../../../desy-commons/components/icon/icon.component';\r\nimport {ContentComponent} from '../../../desy-commons/components/content/content.component';\r\nimport {ModalButtonPrimaryComponent} from './modal-button-primary/modal-button-primary.component';\r\nimport {ModalButtonSecondaryComponent} from './modal-button-secondary/modal-button-secondary.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-modal',\r\n templateUrl: './modal.component.html'\r\n})\r\nexport class ModalComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() title: ModalData;\r\n @Input() description: ModalData;\r\n @Input() itemsPrimary: ModalButtonData[];\r\n @Input() itemsSecondary: ModalButtonData[];\r\n @Input() icon: ModalIconData;\r\n @Input() headingLevel: number;\r\n\r\n @Input() isDismissible: boolean;\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() caller: TemplateRef<any>;\r\n\r\n @Output() closeModal: EventEmitter<void> = new EventEmitter();\r\n @Output() clickButton: EventEmitter<any> = new EventEmitter();\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TitleComponent) titleComponent: TitleComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(DescriptionComponent) descriptionComponent: DescriptionComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n @ContentChildren(ModalButtonPrimaryComponent) primaryButtonComponents: QueryList<ModalButtonPrimaryComponent>;\r\n @ContentChildren(ModalButtonSecondaryComponent) secondaryButtonComponents: QueryList<ModalButtonSecondaryComponent>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(IconComponent) iconComponent: IconComponent;\r\n\r\n hasIconContent = true;\r\n descriptionIsHtml = true;\r\n descriptionIsEmpty = false;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n closeDialog(): void {\r\n this.closeModal.emit();\r\n }\r\n\r\n getType(): string {\r\n let type: string;\r\n if (this.iconComponent) {\r\n type = this.iconComponent.type ? this.iconComponent.type.toLocaleLowerCase() : null;\r\n } else if (this.icon.type) {\r\n type = this.icon.type ? this.icon.type.toLocaleLowerCase() : null;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.id){\r\n throw new Error(`id are required`);\r\n }\r\n }\r\n\r\n handleRequiredEmpty(element: string): void {\r\n throw new Error(`${element} is required`);\r\n }\r\n\r\n checkDescriptionContent(element: ElementRef): void {\r\n const childs: NodeListOf<ChildNode> = element.nativeElement.childNodes;\r\n let hasHtml = false;\r\n let hasContent = false;\r\n for (let i = 0; i < childs.length && !hasHtml; i++) {\r\n const item = childs.item(i);\r\n if (item.nodeType === Node.TEXT_NODE && item.textContent.length > 0) {\r\n hasContent = true;\r\n } else if (item.nodeType === Node.ELEMENT_NODE || item.nodeType === Node.CDATA_SECTION_NODE) {\r\n hasHtml = true;\r\n hasContent = true;\r\n }\r\n }\r\n\r\n const descriptionWasEmpty = this.descriptionIsEmpty;\r\n this.descriptionIsEmpty = !hasContent;\r\n this.descriptionIsHtml = hasHtml;\r\n this.changeDetectorRef.detectChanges();\r\n\r\n if (!hasContent && !descriptionWasEmpty) {\r\n this.handleRequiredEmpty('description');\r\n }\r\n }\r\n\r\n clickButtonEmit(item: ModalButtonData, event): void{\r\n this.clickButton.emit(event);\r\n\r\n if (item instanceof ModalButtonPrimaryComponent || item instanceof ModalButtonSecondaryComponent) {\r\n item.clickEvent.emit(event);\r\n }\r\n }\r\n\r\n handleIconContentEmpty(isEmpty: boolean): void {\r\n this.hasIconContent = !isEmpty;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n getTitleClasses(): string {\r\n let classes = 'c-h2 px-base text-center focus:outline-none focus:underline';\r\n if (this.titleComponent && this.titleComponent.classes) {\r\n classes = this.titleComponent.classes;\r\n } else if (this.title && this.title.classes) {\r\n classes = this.title.classes;\r\n }\r\n return classes;\r\n }\r\n\r\n getDescriptionClasses(): string {\r\n let classes = 'c-paragraph-base my-base text-center';\r\n if (this.descriptionComponent && this.descriptionComponent.classes) {\r\n classes = this.descriptionComponent.classes;\r\n } else if (this.description && this.description.classes) {\r\n classes = this.description.classes;\r\n }\r\n return classes;\r\n }\r\n\r\n getPrimaryItems(): ModalButtonData[]|ModalButtonPrimaryComponent[] {\r\n return this.primaryButtonComponents && this.primaryButtonComponents.length > 0 ? this.primaryButtonComponents.toArray()\r\n : this.itemsPrimary;\r\n }\r\n\r\n getSecondaryItems(): ModalButtonData[]|ModalButtonPrimaryComponent[] {\r\n return this.secondaryButtonComponents && this.secondaryButtonComponents.length > 0 ? this.secondaryButtonComponents.toArray()\r\n : this.itemsSecondary;\r\n }\r\n}\r\n","import {\r\n Component,\r\n HostListener,\r\n OnChanges,\r\n OnDestroy,\r\n Input,\r\n ViewChild,\r\n ViewContainerRef,\r\n TemplateRef,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Output,\r\n EventEmitter, ComponentRef, ElementRef, Type, ComponentFactoryResolver\r\n} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';\r\nimport { FocusUtils } from '../../../shared/utils/focus-utils';\r\n\r\nlet numDialogsOpened = 0;\r\ntype DialogCreationCallback = ((dialog: DialogComponent, caller: ComponentRef<any>) => void);\r\n\r\n@Component({\r\n selector: 'desy-dialog',\r\n templateUrl: './dialog.component.html'\r\n})\r\nexport class DialogComponent extends AccessibilityComponent implements OnChanges, OnDestroy, AfterViewInit {\r\n\r\n static readonly DIALOG_OPEN_CLASS = 'has-dialog';\r\n static readonly KEY_CODE_ESC = 'Escape';\r\n\r\n @ViewChild('container', {read: ViewContainerRef}) container: ViewContainerRef;\r\n @ViewChild('focusTrapWrapper') focusTrapWrapper: ElementRef;\r\n\r\n @Input() active: boolean;\r\n @Output() activeChange = new EventEmitter<boolean>();\r\n\r\n @Input() id: any;\r\n @Input() caller: TemplateRef<any>;\r\n @Input() classes: string;\r\n @Input() focusOnClose: string|HTMLElement;\r\n @Input() dismissOnBackdrop: boolean;\r\n\r\n public callerType: Type<any>;\r\n public onCallerCreationCallback: DialogCreationCallback;\r\n\r\n lastActiveState = false;\r\n focusTrap: ConfigurableFocusTrap;\r\n clickOutsideEnabled = false;\r\n childElem: ElementRef;\r\n\r\n constructor(private cdRef: ChangeDetectorRef,\r\n private focusTrapFactory: ConfigurableFocusTrapFactory,\r\n private factoryResolver: ComponentFactoryResolver) {\r\n super();\r\n }\r\n\r\n ngOnChanges(): void {\r\n if (this.focusTrapWrapper) {\r\n this.handleActiveState();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n\r\n if (!this.caller && !this.callerType) {\r\n throw Error('caller is required');\r\n }\r\n\r\n if (this.callerType) {\r\n const factory = this.factoryResolver.resolveComponentFactory(this.callerType);\r\n const component = this.container.createComponent(factory);\r\n if (this.onCallerCreationCallback) {\r\n this.onCallerCreationCallback(this, component);\r\n }\r\n }\r\n\r\n if (this.focusTrapWrapper.nativeElement.children && this.focusTrapWrapper.nativeElement.children.length === 1) {\r\n this.childElem = this.focusTrapWrapper.nativeElement.children[0];\r\n }\r\n\r\n this.handleActiveState();\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.active = false;\r\n this.handleActiveState();\r\n }\r\n\r\n\r\n public dismiss(): void {\r\n this.activeChange.emit(false);\r\n }\r\n\r\n\r\n @HostListener('document:keyup', ['$event'])\r\n onKeyUp(event: KeyboardEvent): void {\r\n if (event.key === DialogComponent.KEY_CODE_ESC) {\r\n event.stopPropagation();\r\n this.dismiss();\r\n }\r\n }\r\n\r\n handleActiveState(): void {\r\n if (!this.focusTrap) {\r\n this.focusTrap = this.focusTrapFactory.create(this.focusTrapWrapper.nativeElement);\r\n }\r\n\r\n if (this.active !== this.lastActiveState) {\r\n this.lastActiveState = this.active;\r\n\r\n // Habilitar/deshabilitar scroll\r\n if (this.active && numDialogsOpened === 0) {\r\n document.body.classList.add(DialogComponent.DIALOG_OPEN_CLASS);\r\n } else if (!this.active && numDialogsOpened === 1) {\r\n document.body.classList.remove(DialogComponent.DIALOG_OPEN_CLASS);\r\n if (document.body.classList.length === 0) {\r\n document.body.removeAttribute('class');\r\n }\r\n }\r\n\r\n if (this.active) {\r\n setTimeout(() => this.focusTrap.focusInitialElement());\r\n numDialogsOpened++;\r\n } else {\r\n let focusElem: HTMLElement;\r\n this.focusTrap.destroy();\r\n if (this.focusOnClose) {\r\n if (typeof this.focusOnClose === 'string') {\r\n focusElem = document.getElementById(this.focusOnClose);\r\n } else {\r\n focusElem = this.focusOnClose;\r\n }\r\n } else {\r\n focusElem = FocusUtils.getFirstFocusableElement();\r\n }\r\n if (focusElem) {\r\n setTimeout(() => focusElem.focus());\r\n }\r\n numDialogsOpened--;\r\n }\r\n\r\n setTimeout(() => this.clickOutsideEnabled = this.active);\r\n }\r\n }\r\n\r\n handleClickOutside(): void {\r\n if (this.dismissOnBackdrop) {\r\n this.dismiss();\r\n }\r\n }\r\n}\r\n","import {\r\n ApplicationRef,\r\n ComponentFactoryResolver,\r\n ComponentRef, EmbeddedViewRef,\r\n Injectable,\r\n Injector,\r\n TemplateRef,\r\n Type\r\n} from '@angular/core';\r\nimport { DialogOptions, ModalOptions, OpenDialogResult } from '../interfaces';\r\nimport { DialogComponent } from '../components/dialog/dialog.component';\r\nimport { ModalComponent } from '../components/modal/modal.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n\r\n constructor(private factoryResolver: ComponentFactoryResolver,\r\n private defaultInjector: Injector,\r\n private appRef: ApplicationRef) { }\r\n\r\n openDialog(caller: Type<any>|ModalOptions|TemplateRef<any>,\r\n dialogOptions: DialogOptions): Promise<OpenDialogResult> {\r\n return new Promise<OpenDialogResult>((resolve, reject) => {\r\n\r\n if (!caller) {\r\n reject('caller is required');\r\n }\r\n\r\n if (!dialogOptions) {\r\n reject('dialogOptions is required');\r\n }\r\n\r\n const dialog = this.createDialog(dialogOptions);\r\n const result: OpenDialogResult = {\r\n dialog\r\n };\r\n\r\n if (caller instanceof Type) {\r\n dialog.instance.callerType = caller;\r\n dialog.instance.onCallerCreationCallback = (d, c) => {\r\n result.component = c;\r\n resolve(result);\r\n };\r\n } else if (caller instanceof TemplateRef) {\r\n dialog.instance.caller = caller;\r\n resolve(result);\r\n } else {\r\n dialog.instance.callerType = ModalComponent;\r\n dialog.instance.onCallerCreationCallback = (d, c) => {\r\n this.initModal(d, c, caller);\r\n result.component = c;\r\n resolve(result);\r\n };\r\n }\r\n });\r\n }\r\n\r\n closeDialog(dialog: ComponentRef<DialogComponent>|DialogComponent): void {\r\n\r\n if (!dialog) {\r\n throw Error('dialog is required');\r\n }\r\n\r\n if (dialog instanceof ComponentRef) {\r\n dialog.instance.dismiss();\r\n } else {\r\n dialog.dismiss();\r\n }\r\n }\r\n\r\n onCloseDialog(dialog: ComponentRef<DialogComponent>|DialogComponent): Promise<void> {\r\n return new Promise<void>((resolve => {\r\n let d;\r\n if (dialog instanceof ComponentRef) {\r\n d = dialog.instance;\r\n } else {\r\n d = dialog;\r\n }\r\n\r\n const subscription = d.activeChange.subscribe(() => {\r\n resolve();\r\n subscription.unsubscribe();\r\n });\r\n }));\r\n }\r\n\r\n private createDialog(dialogOptions: DialogOptions): ComponentRef<DialogComponent> {\r\n const factory = this.factoryResolver.resolveComponentFactory(DialogComponent);\r\n let dialog;\r\n if (dialogOptions.rootViewContainer) {\r\n dialog = dialogOptions.rootViewContainer.createComponent<DialogComponent>(factory);\r\n } else {\r\n dialog = factory.create(this.defaultInjector);\r\n this.appRef.attachView(dialog.hostView);\r\n const componentElement = (dialog.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\r\n document.body.appendChild(componentElement);\r\n }\r\n\r\n dialog.instance.active = true;\r\n if (dialogOptions) {\r\n Object.assign(dialog.instance, dialogOptions);\r\n }\r\n\r\n this.onCloseDialog(dialog).then(() => dialog.destroy());\r\n\r\n return dialog;\r\n }\r\n\r\n private initModal(dialog: DialogComponent, modalRef: ComponentRef<ModalComponent>, modalOptions: ModalOptions): void {\r\n modalRef.instance.title = modalOptions.title;\r\n modalRef.instance.description = modalOptions.description;\r\n modalRef.instance.itemsPrimary = modalOptions.itemsPrimary;\r\n modalRef.instance.itemsSecondary = modalOptions.itemsSecondary;\r\n modalRef.instance.icon = modalOptions.icon;\r\n\r\n modalRef.instance.isDismissible = modalOptions.isDismissible;\r\n modalRef.instance.id = modalOptions.id;\r\n modalRef.instance.classes = modalOptions.classes;\r\n modalRef.instance.caller = modalOptions.caller;\r\n\r\n if (modalOptions.isDismissible) {\r\n const subscription = modalRef.instance.closeModal.subscribe(() => {\r\n this.closeDialog(dialog);\r\n subscription.unsubscribe();\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport { BreadcrumbsData } from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-breadcrumbs-item',\r\n templateUrl: './breadcrumbs-item.component.html'\r\n})\r\nexport class BreadcrumbsItemComponent extends ContentBaseComponent implements BreadcrumbsData {\r\n\r\n @Input() id?: string;\r\n @Input() routerLink?: string;\r\n\r\n}\r\n","import {Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { BreadcrumbsData } from '../../interfaces';\r\nimport { BreadcrumbsItemComponent } from './breadcrumbs-item/breadcrumbs-item.component';\r\n\r\n@Component({\r\n selector: 'desy-breadcrumbs',\r\n templateUrl: './breadcrumbs.component.html'\r\n})\r\nexport class BreadcrumbsComponent extends AccessibilityComponent {\r\n\r\n @Input() items: Array<BreadcrumbsData>;\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n @Input() collapseOnMobile: boolean;\r\n @Input() hasBackButton: boolean;\r\n @ContentChildren(BreadcrumbsItemComponent) itemComponentList: QueryList<BreadcrumbsItemComponent>;\r\n\r\n constructor(private location: Location){\r\n super();\r\n }\r\n\r\n getLength(): number {\r\n let itemsLength: number = this.items ? this.items.length : this.itemComponentList.length;\r\n\r\n if (this.hasBackButton) {\r\n itemsLength += 1;\r\n }\r\n return itemsLength;\r\n }\r\n\r\n goBack(): void {\r\n this.location.back();\r\n }\r\n\r\n getItemList(): BreadcrumbsData[] {\r\n const itemList = this.itemComponentList && this.itemComponentList.length > 0 ? this.itemComponentList.toArray() : this.items;\r\n if (!itemList || itemList.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n\r\n return itemList;\r\n }\r\n\r\n handleEmptyItem(position: number): void {\r\n throw new Error(`item content, html or text are required at position ${position}`);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-header-offcanvas-close-button',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class HeaderOffcanvasCloseButtonComponent extends ContentBaseComponent {\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-header-offcanvas-button',\r\n templateUrl: './header-offcanvas-button.component.html'\r\n})\r\nexport class HeaderOffcanvasButtonComponent extends ContentBaseComponent {\r\n\r\n openOffcanvas = async () => {};\r\n\r\n async handleClick(event: Event): Promise<void> {\r\n event.stopPropagation();\r\n await this.openOffcanvas();\r\n }\r\n\r\n handleEmptyContent(element: string): void {\r\n throw new Error(`${element} content is required`);\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n ComponentRef,\r\n ContentChildren,\r\n HostBinding,\r\n Input,\r\n OnDestroy,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {ContentComponent} from '../../../../desy-commons/components/content/content.component';\r\nimport {HeaderOffcanvasCloseButtonComponent} from './header-offcanvas-close-button/header-offcanvas-close-button.component';\r\nimport {DialogComponent} from '../../../../desy-modals/components/dialog/dialog.component';\r\nimport {DialogService} from '../../../../desy-modals/services/dialog.service';\r\nimport {DialogOptions} from '../../../../desy-modals/interfaces';\r\nimport {HeaderOffcanvasButtonComponent} from './header-offcanvas-button/header-offcanvas-button.component';\r\nimport {DesyOnInputChange} from '../../../../shared/decorators/desy-on-input-change.decorator';\r\n\r\n@Component({\r\n selector: 'desy-header-offcanvas',\r\n templateUrl: './header-offcanvas.component.html'\r\n})\r\nexport class HeaderOffcanvasComponent implements OnDestroy {\r\n\r\n private static dialogOptions: DialogOptions = {\r\n id: 'header-offcanvas-dialog',\r\n focusOnClose: 'header-offcanvas',\r\n ariaModal: 'true',\r\n ariaLabelledBy: 'header-offcanvas-button-text'\r\n };\r\n\r\n @DesyOnInputChange('setHostClass')\r\n @Input() classes: string;\r\n\r\n @HostBinding('class') hostClass = '-mr-2 flex lg:hidden';\r\n\r\n @ViewChild('offcanvasContent') offcanvasContent: TemplateRef<any>;\r\n\r\n @DesyContentChild({onSetCallbackName: 'bindButton'})\r\n @ContentChildren(HeaderOffcanvasButtonComponent) button: HeaderOffcanvasButtonComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) content: ContentComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(HeaderOffcanvasCloseButtonComponent) closeButton: HeaderOffcanvasCloseButtonComponent;\r\n\r\n private dialog: ComponentRef<DialogComponent>;\r\n\r\n constructor(private dialogService: DialogService) {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.isOpen()) {\r\n this.close();\r\n }\r\n }\r\n\r\n async open(): Promise<void> {\r\n if (!this.isOpen()) {\r\n this.dialog = (await this.dialogService.openDialog(this.offcanvasContent, HeaderOffcanvasComponent.dialogOptions)).dialog;\r\n this.dialogService.onCloseDialog(this.dialog).then(() => this.dialog = null);\r\n }\r\n }\r\n\r\n close(): void {\r\n if (this.isOpen()) {\r\n this.dialogService.closeDialog(this.dialog);\r\n this.dialog = null;\r\n }\r\n }\r\n\r\n isOpen(): boolean {\r\n return !!this.dialog;\r\n }\r\n\r\n /**\r\n * Estable las clases del elemento html del componente\r\n */\r\n setHostClass(): void {\r\n this.hostClass = this.classes ? this.classes : '-mr-2 flex lg:hidden';\r\n }\r\n\r\n /**\r\n * Enlaza el botón del componente hijo con la acción de abrir de este componente\r\n * @param button componente botón pasado como contenido\r\n */\r\n bindButton(button: HeaderOffcanvasButtonComponent): void {\r\n button.openOffcanvas = this.open.bind(this);\r\n }\r\n\r\n handleEmptyContent(element: string): void {\r\n throw new Error(`${element} content is required`);\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {HeaderNavigationItemData} from '../../../../interfaces/header-navigation-item-data';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-header-navigation-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class HeaderNavigationItemComponent extends ContentBaseComponent implements HeaderNavigationItemData {\r\n @Input() href: string;\r\n @Input() routerLink: string;\r\n @Input() fragment: string;\r\n @Input() id: string;\r\n @Input() active: boolean;\r\n @Input() disabled: boolean;\r\n}\r\n","import {AfterContentInit, Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport { HeaderNavigationItemData } from '../../../interfaces/header-navigation-item-data';\r\nimport { AccessibilityComponent } from '../../../../shared/components';\r\nimport {HeaderNavigationItemComponent} from './header-navigation-item/header-navigation-item.component';\r\n\r\n@Component({\r\n selector: 'desy-header-navigation',\r\n templateUrl: './header-navigation.component.html'\r\n})\r\nexport class HeaderNavigationComponent extends AccessibilityComponent implements AfterContentInit {\r\n\r\n @Input() idPrefix: string;\r\n @Input() classes: string;\r\n @Input() items: HeaderNavigationItemData[];\r\n\r\n @ContentChildren(HeaderNavigationItemComponent) itemComponents: QueryList<HeaderNavigationItemComponent>;\r\n\r\n ngAfterContentInit(): void {\r\n const items = this.getItems();\r\n if (!items || items.length === 0) {\r\n throw new Error('Header-navigation items are required');\r\n }\r\n }\r\n\r\n getItemId(item: HeaderNavigationItemData, index: number): string {\r\n const prefix = this.idPrefix ? this.idPrefix : 'header-nav-item';\r\n const suffix = index > 0 ? '-' + index : '';\r\n return item.id ? item.id : prefix + suffix;\r\n }\r\n\r\n getItems(): HeaderNavigationItemData[] {\r\n return this.itemComponents && this.itemComponents.length > 0 ? this.itemComponents.toArray() : this.items;\r\n }\r\n}\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {NavItemData, NavItemEventData} from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-nav-item',\r\n templateUrl: './nav-item.component.html'\r\n})\r\nexport class NavItemComponent extends ContentBaseComponent implements NavItemData {\r\n\r\n @Input() id?: string;\r\n @Input() active?: boolean;\r\n @Input() classes?: string;\r\n @Input() title?: string;\r\n @Input() href?: string;\r\n @Input() routerLink?: string|any[];\r\n @Input() fragment?: string;\r\n @Input() target?: string;\r\n @Input() disabled?: boolean;\r\n @Input() divider?: boolean;\r\n\r\n @Output() clickEvent = new EventEmitter<NavItemEventData>();\r\n @Output() activeChange = new EventEmitter<boolean>();\r\n}\r\n","import {\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges\r\n} from '@angular/core';\r\nimport {\r\n AccessibilityComponent\r\n} from '../../../shared/components';\r\nimport {NavItemData, NavItemEventData} from '../../interfaces';\r\nimport {NavItemComponent} from './nav-item/nav-item.component';\r\n\r\n\r\n@Component({\r\n selector: 'desy-nav',\r\n templateUrl: './nav.component.html'\r\n})\r\nexport class NavComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() hasNav = true;\r\n @Input() idPrefix: string;\r\n @Input() items: NavItemData[];\r\n @Input() classes: string;\r\n\r\n @Output() clickEvent = new EventEmitter<NavItemEventData>();\r\n @ContentChildren(NavItemComponent) itemComponentList: QueryList<NavItemComponent>;\r\n\r\n onClick(event: any, item: NavItemData): void {\r\n const itemsActiveChange = [];\r\n if (!item.active) {\r\n itemsActiveChange.push(item);\r\n }\r\n\r\n const itemList = this.getItemList();\r\n itemList.forEach(i => {\r\n if (i.active && i !== item) {\r\n itemsActiveChange.push(i);\r\n }\r\n i.active = false;\r\n });\r\n item.active = true;\r\n\r\n // Se emite el evento sólo para los items cuyo valor de active ha sido modificado\r\n itemsActiveChange.forEach(i => {\r\n if (i instanceof NavItemComponent) {\r\n i.activeChange.emit(i.active);\r\n }\r\n });\r\n\r\n this.clickEvent.emit({ item, event });\r\n if (item instanceof NavItemComponent) {\r\n item.clickEvent.emit({ item, event });\r\n }\r\n }\r\n\r\n ngOnChanges(changes?: SimpleChanges): void {\r\n if (!this.idPrefix) {\r\n throw new Error(`idPrefix is required`);\r\n }\r\n }\r\n\r\n getItemList(): NavItemData[] {\r\n const itemList = this.itemComponentList && this.itemComponentList.length > 0 ? this.itemComponentList.toArray() : this.items;\r\n if (!itemList || itemList.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n\r\n itemList.forEach(element => {\r\n if (!element.href && !element.routerLink) {\r\n throw new Error(`href or routerLink are required`);\r\n }\r\n });\r\n return itemList;\r\n }\r\n\r\n handleContentEmpty(position: number): void {\r\n throw new Error(`item content, html or text are required at position ${position}`);\r\n }\r\n\r\n getItemId(item: NavItemData, index: number): string {\r\n let id;\r\n if (item.id) {\r\n id = item.id;\r\n } else if (index === 0) {\r\n id = this.getIdPrefix();\r\n } else {\r\n id = this.getIdPrefix() + '-' + index;\r\n }\r\n return id;\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : 'nav-item';\r\n }\r\n}\r\n","import {Component, ContentChildren, HostBinding, Input} from '@angular/core';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport {NavComponent} from '../../nav/nav.component';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\n\r\n\r\n@Component({\r\n selector: 'desy-header-subnav',\r\n templateUrl: './header-subnav.component.html',\r\n animations: [\r\n trigger('toggleDropdown', [\r\n state('void', style({\r\n opacity: '0.0',\r\n transform: 'scale(0.95)'\r\n })),\r\n state('*', style({\r\n opacity: '1.0',\r\n transform: 'scale(1.0)'\r\n })),\r\n transition(':enter', [\r\n animate('100ms ease-out')\r\n ]),\r\n transition(':leave', [\r\n animate('75ms ease-in')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class HeaderSubnavComponent {\r\n\r\n @HostBinding('class')\r\n @Input() classes: string;\r\n\r\n @DesyContentChild({onSetCallbackName: 'overrideNavParams'})\r\n @ContentChildren(NavComponent) nav: NavComponent;\r\n\r\n isOpen = false;\r\n clickOutsideEnabled = false;\r\n\r\n toggleOpen(): void {\r\n this.isOpen = !this.isOpen;\r\n setTimeout(() => this.clickOutsideEnabled = this.isOpen);\r\n }\r\n\r\n onKeydownEscape(): void {\r\n this.isOpen = false;\r\n this.clickOutsideEnabled = false;\r\n document.getElementById('header-subnav-button').focus();\r\n }\r\n\r\n hasSubnavItems(): boolean {\r\n return this.nav && this.nav.getItemList().length > 0;\r\n }\r\n\r\n overrideNavParams(nav: NavComponent): void {\r\n nav.hasNav = true;\r\n nav.idPrefix = 'header-subnav-nav-item';\r\n nav.ariaLabel = 'Aplicaciones';\r\n nav.classes = 'w-max max-w-64';\r\n // nav.id = 'id-subnav-nav'; // No existe como param de navComponent\r\n }\r\n\r\n handleEmptyContent(element: string): void {\r\n throw new Error(`${element} content is required`);\r\n }\r\n\r\n}\r\n","import {Component, ContentChildren, HostBinding, Input} from '@angular/core';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {NavComponent} from '../../nav/nav.component';\r\nimport {DesyOnInputChange} from '../../../../shared/decorators/desy-on-input-change.decorator';\r\n\r\n@Component({\r\n selector: 'desy-header-dropdown',\r\n templateUrl: './header-dropdown.component.html',\r\n animations: [\r\n trigger('toggleDropdown', [\r\n state('void', style({\r\n opacity: '0.0',\r\n transform: 'scale(0.95)'\r\n })),\r\n state('*', style({\r\n opacity: '1.0',\r\n transform: 'scale(1.0)'\r\n })),\r\n transition(':enter', [\r\n animate('100ms ease-out')\r\n ]),\r\n transition(':leave', [\r\n animate('75ms ease-in')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class HeaderDropdownComponent {\r\n\r\n @DesyOnInputChange('setHostClass')\r\n @Input() classes: string;\r\n\r\n @HostBinding('class') hostClass = 'hidden lg:block';\r\n\r\n @DesyContentChild({onSetCallbackName: 'overrideNavParams'})\r\n @ContentChildren(NavComponent) nav: NavComponent;\r\n\r\n\r\n isOpen = false;\r\n clickOutsideEnabled = false;\r\n\r\n toggleOpen(): void {\r\n this.isOpen = !this.isOpen;\r\n setTimeout(() => this.clickOutsideEnabled = this.isOpen);\r\n }\r\n\r\n onKeydownEscape(): void {\r\n this.isOpen = false;\r\n this.clickOutsideEnabled = false;\r\n document.getElementById('header-dropdown-button').focus();\r\n }\r\n\r\n overrideNavParams(nav: NavComponent): void {\r\n nav.hasNav = true;\r\n nav.idPrefix = 'header-dropdown-nav-item';\r\n nav.ariaLabel = 'Menú de usuario';\r\n nav.classes = 'w-max max-w-64';\r\n // nav.id = 'id-dropdown-nav'; // No existe como param de navComponent\r\n }\r\n\r\n /**\r\n * Estable las clases del elemento html del componente\r\n */\r\n setHostClass(): void {\r\n this.hostClass = this.classes ? this.classes : 'hidden lg:block';\r\n }\r\n\r\n handleEmptyContent(element: string): void {\r\n throw new Error(`${element} content is required`);\r\n }\r\n\r\n}\r\n","import {ChangeDetectorRef, Component, Input} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-skip-link',\r\n templateUrl: './skip-link.component.html'\r\n})\r\nexport class SkipLinkComponent extends AccessibilityComponent {\r\n\r\n @Input() html: string;\r\n @Input() text: string;\r\n @Input() fragment: string;\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n hasContent = true;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n getClassNames(): string {\r\n let classNames = 'c-skip-link sr-only active:not-sr-only focus:not-sr-only focus:outline-none focus:shadow-outline-focus block p-base bg-warning-base text-center text-black underline';\r\n if (this.classes) {\r\n classNames += ' ' + this.classes;\r\n }\r\n return classNames;\r\n }\r\n\r\n handleNoContent(): void {\r\n if (!this.html && !this.text) {\r\n throw new Error('skip-link content, html or text are required');\r\n } else {\r\n this.hasContent = false;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n}\r\n","import {Component, ContentChildren, Input} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { HeaderSubnavData } from '../../interfaces';\r\nimport { HeaderNavigationData } from '../../interfaces';\r\nimport { HeaderDropdownData } from '../../interfaces';\r\nimport { HeaderOffcanvasData } from '../../interfaces';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\nimport {HeaderOffcanvasComponent} from './header-offcanvas/header-offcanvas.component';\r\nimport {HeaderNavigationComponent} from './header-navigation/header-navigation.component';\r\nimport {HeaderSubnavComponent} from './header-subnav/header-subnav.component';\r\nimport {HeaderDropdownComponent} from './header-dropdown/header-dropdown.component';\r\nimport {SkipLinkComponent} from '../skip-link/skip-link.component';\r\n\r\n@Component({\r\n selector: 'desy-header',\r\n templateUrl: './header.component.html'\r\n})\r\nexport class HeaderComponent extends AccessibilityComponent {\r\n\r\n @Input() classes: string;\r\n @Input() containerClasses: string;\r\n @Input() homepageUrl: string;\r\n @Input() homepageRouterLink: string;\r\n @Input() homepageFragment: string;\r\n @Input() expandedLogo: boolean;\r\n\r\n @Input() subnavData: HeaderSubnavData;\r\n @Input() navigationData: HeaderNavigationData;\r\n @Input() dropdownData: HeaderDropdownData;\r\n @Input() offcanvasData: HeaderOffcanvasData;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideSkipLinkParams'})\r\n @ContentChildren(SkipLinkComponent) skiplinkComponent: SkipLinkComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(HeaderSubnavComponent) subnavComponent: HeaderSubnavComponent;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideNavigationParams'})\r\n @ContentChildren(HeaderNavigationComponent) navigationComponent: HeaderNavigationComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(HeaderDropdownComponent) dropdownComponent: HeaderDropdownComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(HeaderOffcanvasComponent) offcanvasComponent: HeaderOffcanvasComponent;\r\n\r\n\r\n overrideSkipLinkParams(skiplinkComponent: SkipLinkComponent): void {\r\n skiplinkComponent.id = skiplinkComponent.id || 'skip-link';\r\n skiplinkComponent.text = 'Saltar al contenido principal';\r\n }\r\n\r\n overrideNavigationParams(navigationComponent: HeaderNavigationComponent): void {\r\n navigationComponent.idPrefix = 'header-nav-item';\r\n navigationComponent.ariaLabel = 'Menú principal';\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {NavigationItemData} from '../../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-footer-navigation-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class FooterNavigationItemComponent extends ContentBaseComponent implements NavigationItemData {\r\n @Input() href?: string;\r\n @Input() routerLink?: string;\r\n @Input() fragment?: string;\r\n}\r\n","import {Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport {NavigationData} from '../../../interfaces';\r\nimport {FooterNavigationItemComponent} from './footer-navigation-item/footer-navigation-item.component';\r\n\r\n@Component({\r\n selector: 'desy-footer-navigation',\r\n templateUrl: './footer-navigation.component.html'\r\n})\r\nexport class FooterNavigationComponent implements NavigationData {\r\n @Input() title: string;\r\n @Input() columns: number;\r\n\r\n @ContentChildren(FooterNavigationItemComponent) itemComponents: QueryList<FooterNavigationItemComponent>;\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {MetaItemData} from '../../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-footer-meta-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class FooterMetaItemComponent extends ContentBaseComponent implements MetaItemData {\r\n @Input() href?: string;\r\n @Input() routerLink?: string;\r\n @Input() fragment?: string;\r\n}\r\n","import {Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport {MetaData} from '../../../interfaces';\r\nimport {FooterMetaItemComponent} from './footer-meta-item/footer-meta-item.component';\r\nimport {ContentComponent} from '../../../../desy-commons/components/content/content.component';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-footer-meta',\r\n template: ''\r\n})\r\nexport class FooterMetaComponent extends ContentBaseComponent implements MetaData {\r\n\r\n @Input() visuallyHiddenTitle: string;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n @ContentChildren(FooterMetaItemComponent) itemComponents: QueryList<FooterMetaItemComponent>;\r\n}\r\n","import {Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {MetaData, MetaItemData, NavigationData, NavigationItemData} from '../../interfaces';\r\nimport {IconData} from '../../../desy-commons/interfaces';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\nimport {IconComponent} from '../../../desy-commons/components/icon/icon.component';\r\nimport {FooterNavigationComponent} from './footer-navigation/footer-navigation.component';\r\nimport {FooterMetaComponent} from './footer-meta/footer-meta.component';\r\nimport {ContentComponent} from '../../../desy-commons/components/content/content.component';\r\n\r\n\r\n@Component({\r\n selector: 'desy-footer',\r\n templateUrl: './footer.component.html'\r\n})\r\nexport class FooterComponent extends AccessibilityComponent {\r\n\r\n @Input() meta: MetaData;\r\n @Input() navigation: NavigationData[];\r\n @Input() icon: IconData;\r\n @Input() containerClasses: string;\r\n @Input() classes: string;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(IconComponent) iconComponent: IconComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(FooterMetaComponent) metaComponent: FooterMetaComponent;\r\n\r\n @ContentChildren(FooterNavigationComponent) navigationComponent: QueryList<FooterNavigationComponent>;\r\n\r\n\r\n getNavigationItems(): NavigationData[] {\r\n const navItems = this.navigationComponent && this.navigationComponent.length > 0 ? this.navigationComponent.toArray() : this.navigation;\r\n return navItems && navItems.length > 0 ? navItems : null;\r\n }\r\n\r\n getNavigationItemItems(navigation: NavigationData): NavigationItemData[] {\r\n return navigation instanceof FooterNavigationComponent ? navigation.itemComponents.toArray() : navigation.items;\r\n }\r\n\r\n getMetaItems(meta: MetaData): MetaItemData[] {\r\n return meta instanceof FooterMetaComponent ? meta.itemComponents.toArray() : meta.items;\r\n }\r\n\r\n getMetaContent(meta: MetaData): ContentComponent {\r\n return meta instanceof FooterMetaComponent ? meta.contentComponent : null;\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {ErrorSummaryData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-error-summary-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ErrorSummaryItemComponent extends ContentBaseComponent implements ErrorSummaryData {\r\n\r\n @Input() fragment: string;\r\n @Input() id: string;\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n ContentChildren,\r\n QueryList\r\n} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {ErrorSummaryData} from '../../interfaces';\r\nimport {ErrorSummaryItemComponent} from './error-summary-item/error-summary-item.component';\r\nimport {TitleComponent} from '../../../desy-commons/components/title/title.component';\r\nimport {DescriptionComponent} from '../../../desy-commons/components/description/description.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-error-summary',\r\n templateUrl: './error-summary.component.html'\r\n})\r\nexport class ErrorSummaryComponent extends AccessibilityComponent {\r\n\r\n @Input() titleText: string;\r\n @Input() titleHtml: string;\r\n @Input() descriptionText: string;\r\n @Input() descriptionHtml: string;\r\n @Input() classes: string;\r\n @Input() id: string;\r\n @Input() errorList: Array<ErrorSummaryData>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TitleComponent) titleComponent: TitleComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(DescriptionComponent) descriptionComponent: DescriptionComponent;\r\n\r\n @ContentChildren(ErrorSummaryItemComponent) errorComponentList: QueryList<ErrorSummaryItemComponent>;\r\n\r\n lastErrorItemCount: number;\r\n\r\n handleContentRequired(element: string): void {\r\n throw new Error(element + ' content, html or text are required');\r\n }\r\n\r\n getErrorItemList(): ErrorSummaryData[] {\r\n let errorItemList: ErrorSummaryData[];\r\n if (this.errorComponentList && this.errorComponentList.length > 0) {\r\n errorItemList = this.errorComponentList.toArray();\r\n } else {\r\n errorItemList = this.errorList;\r\n }\r\n\r\n const lastLength = this.lastErrorItemCount;\r\n this.lastErrorItemCount = errorItemList.length;\r\n if (errorItemList.length === 0 && lastLength !== 0) {\r\n throw new Error(`errorList or inner error-summary-item are required`);\r\n }\r\n\r\n return errorItemList;\r\n }\r\n}\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {MenuHorizontalItemData, MenuHorizontalItemEventData} from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-menu-horizontal-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class MenuHorizontalItemComponent extends ContentBaseComponent implements MenuHorizontalItemData {\r\n\r\n @Input() href?: string;\r\n @Input() routerLink?: string|any[];\r\n @Input() fragment?: string;\r\n @Input() target?: string;\r\n @Input() id?: string;\r\n @Input() active?: boolean;\r\n @Input() disabled?: boolean;\r\n @Input() classes?: string;\r\n\r\n @Output() clickEvent = new EventEmitter<MenuHorizontalItemEventData>();\r\n @Output() activeChange = new EventEmitter<boolean>();\r\n\r\n}\r\n","import {Component, ContentChildren, EventEmitter, Input, OnChanges, Output, QueryList, SimpleChanges} from '@angular/core';\r\nimport { MenuHorizontalItemData, MenuHorizontalItemEventData } from '../../interfaces';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport {MenuHorizontalItemComponent} from './menu-horizontal-item/menu-horizontal-item.component';\r\n\r\n@Component({\r\n selector: 'desy-menu-horizontal',\r\n templateUrl: './menu-horizontal.component.html'\r\n})\r\nexport class MenuHorizontalComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() id: string;\r\n @Input() idPrefix: string;\r\n @Input() classes: string;\r\n @Input() items: MenuHorizontalItemData[];\r\n\r\n @ContentChildren(MenuHorizontalItemComponent) itemComponents: QueryList<MenuHorizontalItemComponent>;\r\n\r\n @Output() clickEvent = new EventEmitter<MenuHorizontalItemEventData>();\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n }\r\n\r\n onClick(event: any, item: MenuHorizontalItemData): void {\r\n const itemsActiveChange = [];\r\n if (!item.active) {\r\n itemsActiveChange.push(item);\r\n }\r\n\r\n const itemList = this.getItemList();\r\n itemList.forEach(i => {\r\n if (i.active && i !== item) {\r\n itemsActiveChange.push(i);\r\n }\r\n i.active = false;\r\n });\r\n item.active = true;\r\n\r\n // Se emite el evento sólo para los items cuyo valor de active ha sido modificado\r\n itemsActiveChange.forEach(i => {\r\n if (i instanceof MenuHorizontalItemComponent) {\r\n i.activeChange.emit(i.active);\r\n }\r\n });\r\n\r\n this.clickEvent.emit({ item, event });\r\n if (item instanceof MenuHorizontalItemComponent) {\r\n item.clickEvent.emit({ item, event });\r\n }\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : 'menu-item';\r\n }\r\n\r\n getItemList(): MenuHorizontalItemData[] {\r\n const itemList = this.itemComponents && this.itemComponents.length > 0 ? this.itemComponents.toArray() : this.items;\r\n if (!itemList || itemList.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n\r\n itemList.forEach(item => {\r\n if (!item.routerLink && !item.href) {\r\n throw Error('item routerLink or href are required');\r\n }\r\n });\r\n return itemList;\r\n }\r\n\r\n handleEmptyItem(position: number): void {\r\n throw new Error(`item content, html or text are required at position ${position}`);\r\n }\r\n\r\n getItemId(item: MenuHorizontalItemData, index: number): string {\r\n let id;\r\n if (item.id) {\r\n id = item.id;\r\n } else if (index === 0) {\r\n id = this.getIdPrefix();\r\n } else {\r\n id = this.getIdPrefix() + '-' + index;\r\n }\r\n return id;\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {MenuVerticalSubItemsData} from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-menu-vertical-item-sub-item',\r\n templateUrl: './menu-vertical-item-sub-item.component.html'\r\n})\r\nexport class MenuVerticalItemSubItemComponent extends ContentBaseComponent implements MenuVerticalSubItemsData {\r\n\r\n @Input() id?: string;\r\n @Input() classes?: string;\r\n @Input() href?: string;\r\n @Input() routerLink?: string;\r\n @Input() routerLinkActiveClasses?: string;\r\n @Input() fragment?: string;\r\n @Input() target?: string;\r\n @Input() disabled?: boolean;\r\n @Input() active?: boolean;\r\n @Input() divider?: boolean;\r\n @Input() title?: string;\r\n}\r\n","import {Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport {MenuVerticalSubData} from '../../../interfaces';\r\nimport {MenuVerticalItemSubItemComponent} from '../menu-vertical-item-sub-item/menu-vertical-item-sub-item.component';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-menu-vertical-item-sub',\r\n templateUrl: './menu-vertical-item-sub.component.html'\r\n})\r\nexport class MenuVerticalItemSubComponent extends ContentBaseComponent implements MenuVerticalSubData {\r\n @Input() classes?: string;\r\n\r\n @ContentChildren(MenuVerticalItemSubItemComponent) itemComponents: QueryList<MenuVerticalItemSubItemComponent>;\r\n}\r\n","import {Component, ContentChildren, Input} from '@angular/core';\r\nimport {MenuVerticalItemsData} from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {MenuVerticalItemSubComponent} from '../menu-vertical-item-sub/menu-vertical-item-sub.component';\r\n\r\n@Component({\r\n selector: 'desy-menu-vertical-item',\r\n templateUrl: './menu-vertical-item.component.html'\r\n})\r\nexport class MenuVerticalItemComponent extends ContentBaseComponent implements MenuVerticalItemsData {\r\n\r\n @Input() id?: string;\r\n @Input() classes?: string;\r\n @Input() href?: string;\r\n @Input() routerLink?: string;\r\n @Input() routerLinkActiveClasses?: string;\r\n @Input() fragment?: string;\r\n @Input() target?: string;\r\n @Input() disabled?: boolean;\r\n @Input() active?: boolean;\r\n @Input() divider?: boolean;\r\n @Input() title?: string;\r\n @Input() expanded?: boolean; // no se utiliza\r\n\r\n @DesyContentChild()\r\n @ContentChildren(MenuVerticalItemSubComponent) subComponent: MenuVerticalItemSubComponent;\r\n\r\n}\r\n","import {Component, Input, ContentChildren, QueryList} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport {MenuVerticalItemsData, MenuVerticalSubData, MenuVerticalSubItemsData} from '../../interfaces';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { StringUtils } from '../../../shared/utils/string-utils';\r\nimport {MenuVerticalItemComponent} from './menu-vertical-item/menu-vertical-item.component';\r\nimport {MenuVerticalItemSubComponent} from './menu-vertical-item-sub/menu-vertical-item-sub.component';\r\n\r\n@Component({\r\n selector: 'desy-menu-vertical',\r\n templateUrl: './menu-vertical.component.html',\r\n animations: [\r\n trigger('displayMenuVertical', [\r\n state('void', style({\r\n opacity: '0.0',\r\n transform: 'scale(0.95)'\r\n })),\r\n state('*', style({\r\n opacity: '1.0',\r\n transform: 'scale(1.0)'\r\n })),\r\n transition(':enter', [\r\n animate('100ms ease-out')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class MenuVerticalComponent extends AccessibilityComponent {\r\n\r\n @Input() id: string;\r\n @Input() idPrefix: string;\r\n @Input() items: MenuVerticalItemsData[];\r\n @Input() hasUnderline: boolean;\r\n @Input() classes: string;\r\n\r\n @ContentChildren(MenuVerticalItemComponent) itemComponents: QueryList<MenuVerticalItemComponent>;\r\n\r\n handleItemContentEmpty(index: number, isRoot: boolean): void {\r\n throw new Error(`${isRoot ? 'Item' : 'Subitem'} content, html or text ar required at position ${index}`);\r\n }\r\n\r\n getItemHtml(item: MenuVerticalItemsData): string {\r\n let itemHtml: string;\r\n if (item.active) {\r\n itemHtml = item.html ? `<strong>${ item.html }</strong>` : `<strong>${ StringUtils.escapeHtml(item.text) }</strong>`;\r\n } else {\r\n itemHtml = item.html;\r\n }\r\n\r\n return itemHtml;\r\n }\r\n\r\n getId(item: MenuVerticalItemsData, i: number): string {\r\n if (item.id) {\r\n return item.id;\r\n } else {\r\n const idPrefix = this.idPrefix ? this.idPrefix : 'nav-item';\r\n if (i === 0) {\r\n return idPrefix;\r\n } else {\r\n return idPrefix + '-' + i;\r\n }\r\n }\r\n }\r\n\r\n getSubItemId(item: MenuVerticalItemsData, itemIndex: number, subItemIndex: number): string{\r\n let subItemId: string;\r\n const sub = this.getItemSub(item);\r\n const subItems = this.getSubItems(sub);\r\n const subItem = subItems[subItemIndex];\r\n if (subItem) {\r\n if (subItem.id) {\r\n subItemId = subItem.id;\r\n } else {\r\n const itemId = this.getId(item, itemIndex);\r\n subItemId = subItemIndex === 0 ? `sub-${itemId}` : `sub-${itemId}-${subItemIndex}`;\r\n }\r\n }\r\n\r\n return subItemId;\r\n }\r\n\r\n getItems(): MenuVerticalItemsData[] {\r\n const itemList = this.itemComponents && this.itemComponents.length > 0 ? this.itemComponents.toArray() : this.items;\r\n if (!itemList || itemList.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n return itemList;\r\n }\r\n\r\n getItemSub(item: MenuVerticalItemsData): MenuVerticalSubData {\r\n return item instanceof MenuVerticalItemComponent ? item.subComponent : item.sub;\r\n }\r\n\r\n getSubItems(sub: MenuVerticalSubData): MenuVerticalSubItemsData[] {\r\n const subItems = sub instanceof MenuVerticalItemSubComponent ? sub.itemComponents.toArray() : sub.items;\r\n return subItems && subItems.length > 0 ? subItems : null;\r\n }\r\n}\r\n","import {\r\n ContentChild,\r\n ContentChildren,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n Output,\r\n QueryList,\r\n AfterContentChecked\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[desyMenubaritem]'\r\n})\r\nexport class MenubaritemDirective implements AfterContentChecked {\r\n @ContentChild('link', { read: ElementRef }) link: ElementRef;\r\n @ContentChild('itemContentWrapper', { read: ElementRef }) itemContentWrapper: ElementRef;\r\n @ContentChild('popupMenu', { read: ElementRef }) popupMenu: ElementRef;\r\n @ContentChildren('popupMenuItem', { read: ElementRef, descendants: true}) popupMenuItems: QueryList<ElementRef>;\r\n\r\n @Output() contentChanged: EventEmitter<any> = new EventEmitter();\r\n\r\n private lastPopupMenu: ElementRef;\r\n private lastPopupMenuItems: QueryList<ElementRef>;\r\n private lastItemContentWrapper: ElementRef;\r\n private lastLink: ElementRef;\r\n\r\n contentHasBeenChecked = false;\r\n\r\n constructor(public elementRef: ElementRef) { }\r\n\r\n ngAfterContentChecked(): void {\r\n if (this.popupMenu !== this.lastPopupMenu || this.popupMenuItems !== this.lastPopupMenuItems\r\n || this.link !== this.lastLink || this.itemContentWrapper !== this.lastItemContentWrapper) {\r\n setTimeout(() => this.contentChanged.emit());\r\n this.lastPopupMenu = this.popupMenu;\r\n this.lastPopupMenuItems = this.popupMenuItems;\r\n this.lastLink = this.link;\r\n this.lastItemContentWrapper = this.itemContentWrapper;\r\n }\r\n\r\n if (!this.contentHasBeenChecked) {\r\n setTimeout(() => this.contentHasBeenChecked = true);\r\n }\r\n }\r\n\r\n}\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {MenubarItemSubItemSubItem} from '../../../../interfaces/menubar-item-sub-item-sub-item';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-menubar-subsubitem',\r\n templateUrl: './menubar-subsubitem.component.html'\r\n})\r\nexport class MenubarSubsubitemComponent extends ContentBaseComponent implements MenubarItemSubItemSubItem {\r\n\r\n @Input() html?: string;\r\n @Input() text?: string;\r\n @Input() checked?: boolean;\r\n\r\n @Output() selected = new EventEmitter<any>();\r\n @Output() checkedChange = new EventEmitter<boolean>();\r\n\r\n}\r\n","import {\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n} from '@angular/core';\r\nimport {MenubarItemSubItem} from '../../../../interfaces/menubar-item-sub-item';\r\nimport {MenubarItemSubItemSubItem} from '../../../../interfaces/menubar-item-sub-item-sub-item';\r\nimport {MenubarSubsubitemComponent} from '../menubar-subsubitem/menubar-subsubitem.component';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-menubar-subitem',\r\n templateUrl: './menubar-subitem.component.html'\r\n})\r\nexport class MenubarSubitemComponent extends ContentBaseComponent implements MenubarItemSubItem {\r\n\r\n @Input() text?: string;\r\n @Input() html?: string;\r\n @Input() checked?: boolean;\r\n @Input() items?: MenubarItemSubItemSubItem[];\r\n\r\n @Output() selected = new EventEmitter<any>();\r\n @Output() checkedChange = new EventEmitter<boolean>();\r\n\r\n @ContentChildren(MenubarSubsubitemComponent) subItems: QueryList<MenubarSubsubitemComponent>;\r\n\r\n public getSubItems(): MenubarSubsubitemComponent[] {\r\n return this.subItems.toArray();\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n} from '@angular/core';\r\nimport {MenubarItem} from '../../../../interfaces/menubar-item';\r\nimport {MenubarItemSub} from '../../../../interfaces/menubar-item-sub';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\nimport {MenubarSubitemComponent} from '../menubar-subitem/menubar-subitem.component';\r\n\r\n@Component({\r\n selector: 'desy-menubar-item',\r\n templateUrl: './menubar-item.component.html'\r\n})\r\nexport class MenubarItemComponent extends ContentBaseComponent implements MenubarItem {\r\n\r\n @Input() href?: string;\r\n @Input() target?: string;\r\n @Input() routerLink?: string|any[];\r\n @Input() routerLinkActiveClasses?: string;\r\n @Input() fragment?: string;\r\n @Input() text?: string;\r\n @Input() html?: string;\r\n @Input() id?: string;\r\n @Input() sub?: MenubarItemSub;\r\n @Input() classes?: string;\r\n\r\n @Input() title?: string;\r\n @Input() disabled?: boolean;\r\n @Input() active?: boolean;\r\n\r\n @Output() selected = new EventEmitter<any>();\r\n\r\n @ContentChildren(MenubarSubitemComponent) subItems: QueryList<MenubarSubitemComponent>;\r\n\r\n public getSubItems(): MenubarSubitemComponent[] {\r\n return this.subItems.toArray();\r\n }\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-menubar-label',\r\n templateUrl: './menubar-label.component.html'\r\n})\r\nexport class MenubarLabelComponent extends ContentBaseComponent {\r\n\r\n @Input() classes: string;\r\n\r\n}\r\n","import {\r\n AfterViewInit, ChangeDetectorRef,\r\n Component, ContentChildren,\r\n ElementRef, EventEmitter,\r\n Input,\r\n OnChanges, Output,\r\n QueryList,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {MenubarItem} from '../../interfaces/menubar-item';\r\nimport {MenubaritemDirective} from './directives/menubaritem.directive';\r\nimport {MenubarItemSubItem} from '../../interfaces/menubar-item-sub-item';\r\nimport {MenubarItemSubItemSubItem} from '../../interfaces/menubar-item-sub-item-sub-item';\r\nimport {LabelComponent} from '../../../desy-forms/components/label/label.component';\r\nimport {LabelData} from '../../../desy-forms/interfaces';\r\nimport {StringUtils} from '../../../shared/utils/string-utils';\r\nimport {MenubarItemComponent} from './components/menubar-item/menubar-item.component';\r\nimport {MenubarSubitemComponent} from './components/menubar-subitem/menubar-subitem.component';\r\nimport {MenubarSubsubitemComponent} from './components/menubar-subsubitem/menubar-subsubitem.component';\r\nimport {MenubarLabelComponent} from './components/menubar-label/menubar-label.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-menubar',\r\n templateUrl: './menubar.component.html'\r\n})\r\nexport class MenubarComponent extends AccessibilityComponent implements OnChanges, AfterViewInit {\r\n\r\n @Input() id: string;\r\n @Input() idPrefix: string;\r\n @Input() classes: string;\r\n @Input() items: MenubarItem[];\r\n @Output() itemsChange = new EventEmitter<MenubarItem[]>();\r\n @Output() activeItemChange = new EventEmitter<MenubarItem>();\r\n @Output() activeSubItemChange = new EventEmitter<MenubarItemSubItem|MenubarItemSubItemSubItem>();\r\n\r\n /**\r\n * label, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir componente menubar-label anidado\r\n * 2) incluir template\r\n * 3) incluir objeto label (interfaz expuesta)\r\n * 4) incluir legendText - incluir un label con solo un texto\r\n */\r\n @Input() labelRef: TemplateRef<LabelComponent>;\r\n @Input() labelData: LabelData;\r\n @Input() labelText: string;\r\n\r\n @ViewChild('menubar', { read: ElementRef }) menubar: ElementRef;\r\n @ViewChildren(MenubaritemDirective) menuItems: QueryList<MenubaritemDirective>;\r\n @DesyContentChild() @ContentChildren(MenubarLabelComponent) labelComponent: MenubarLabelComponent;\r\n @ContentChildren(MenubarItemComponent) itemComponentList: QueryList<MenubarItemComponent>;\r\n\r\n menuData: any[];\r\n viewInit = false;\r\n isFocused: boolean;\r\n currentFocusItemIndex = 0;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngOnChanges(changes?: SimpleChanges): void {\r\n if (this.viewInit) {\r\n this.checkChanges();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.viewInit = true;\r\n this.checkChanges();\r\n }\r\n\r\n checkChanges(): void {\r\n if (!this.menuItems) {\r\n return;\r\n }\r\n this.menuData = [];\r\n this.getItems().forEach((_, index) => {\r\n const itemData = {\r\n open: false,\r\n currentFocusSubItemIndex: 0,\r\n currentFocusSubSubItemIndex: 0,\r\n menuItem: this.menuItems.toArray()[index]\r\n };\r\n this.menuData.push(itemData);\r\n });\r\n\r\n if (this.viewInit) {\r\n this.checkRequired();\r\n }\r\n\r\n\r\n const lastCurrentFocusItemIndex = this.currentFocusItemIndex;\r\n const items = this.getItems();\r\n if (items) {\r\n while (!this.isItemFocusable(this.currentFocusItemIndex % items.length)) {\r\n this.currentFocusItemIndex = (this.currentFocusItemIndex + items.length + 1) % items.length;\r\n if (this.currentFocusItemIndex === lastCurrentFocusItemIndex) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Eventos\r\n */\r\n\r\n handleMenuFocusIn(): void {\r\n this.isFocused = true;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n handleMenuFocusOut(event): void {\r\n if (!this.menubar.nativeElement.contains(event.relatedTarget)) {\r\n this.closeMenu();\r\n }\r\n this.isFocused = false;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n handleMenuItemClick(event, itemIndex: number): void {\r\n if (this.hasPopupMenu(itemIndex)) {\r\n event.preventDefault();\r\n const isOpen = this.menuData[itemIndex].open;\r\n this.closeMenu();\r\n if (!isOpen) {\r\n this.openMenu(itemIndex);\r\n }\r\n } else {\r\n this.activateMenuItem(itemIndex);\r\n }\r\n }\r\n\r\n handleMenuItemKeydown(event: KeyboardEvent, itemIndex: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n case 'ArrowDown':\r\n if (this.hasPopupMenu(itemIndex)) {\r\n this.openMenu(itemIndex);\r\n setTimeout(() => this.focusFirstSubItem(itemIndex));\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n break;\r\n\r\n case 'Escape':\r\n if (this.hasPopupMenu(itemIndex)) {\r\n this.closeMenu(itemIndex);\r\n }\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowLeft':\r\n this.focusNextAvailableItem(itemIndex, -1);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowRight':\r\n this.focusNextAvailableItem(itemIndex, +1);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowUp':\r\n if (this.hasPopupMenu(itemIndex)) {\r\n this.openMenu(itemIndex);\r\n setTimeout(() => this.focusLastSubItem(itemIndex));\r\n }\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'Home':\r\n case 'PageUp':\r\n if (this.hasPopupMenu(itemIndex)) {\r\n this.closeMenu();\r\n }\r\n this.focusFirstItem();\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'End':\r\n case 'PageDown':\r\n if (this.hasPopupMenu(itemIndex)) {\r\n this.closeMenu();\r\n }\r\n this.focusLastItem();\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n default:\r\n if (this.isPrintableChar(event.key)) {\r\n this.focusItemByFirstChar(event.key);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n handleMenuItemMouseOver(itemIndex: number): void {\r\n this.focusItem(itemIndex, true);\r\n }\r\n\r\n handlePopupMenuItemClick(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): void {\r\n this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);\r\n this.focusItem(itemIndex);\r\n this.closeMenu(itemIndex);\r\n }\r\n\r\n handlePopupMenuItemKeydown(event: KeyboardEvent, itemIndex: number, subItemIndex: number, subSubItemIndex?: number): void {\r\n const currentSubIndex = this.menuData[itemIndex].currentFocusSubItemIndex;\r\n const currentSubSubIndex = this.menuData[itemIndex].currentFocusSubSubItemIndex;\r\n const items = this.getItems();\r\n switch (event.key) {\r\n case ' ':\r\n this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);\r\n if (this.mustCloseAfterSelectPopupItem(itemIndex, subItemIndex, subSubItemIndex)) {\r\n this.closeMenu(itemIndex);\r\n this.focusItem(itemIndex);\r\n }\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'Enter':\r\n this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);\r\n this.closeMenu(itemIndex);\r\n this.focusItem(itemIndex);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'Escape':\r\n this.closeMenu(itemIndex);\r\n this.focusItem(itemIndex);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowUp':\r\n this.focusNextAvailableSubItem(itemIndex, currentSubIndex, currentSubSubIndex, -1);\r\n // this.focusSubItem(itemIndex, (currentSubIndex + listLength - 1) % listLength);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowDown':\r\n this.focusNextAvailableSubItem(itemIndex, currentSubIndex, currentSubSubIndex, +1);\r\n // this.focusSubItem(itemIndex, (currentSubIndex + listLength + 1) % listLength);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowLeft':\r\n this.closeMenu(itemIndex);\r\n this.focusItem((itemIndex + items.length - 1) % items.length);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowRight':\r\n this.closeMenu(itemIndex);\r\n this.focusItem((itemIndex + items.length + 1) % items.length);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'Home':\r\n case 'PageUp':\r\n this.focusFirstSubItem(itemIndex);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'End':\r\n case 'PageDown':\r\n this.focusLastSubItem(itemIndex);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'Tab':\r\n this.closeMenu(itemIndex);\r\n this.focusItem(itemIndex);\r\n break;\r\n\r\n default:\r\n if (this.isPrintableChar(event.key)) {\r\n this.focusSubItemByFirstChar(itemIndex, event.key);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n handlePopupMenuItemMouseOver(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): void {\r\n this.focusSubItem(itemIndex, subItemIndex, subSubItemIndex);\r\n }\r\n\r\n /*\r\n * Comunes\r\n */\r\n\r\n checkRequired(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n\r\n if (!this.ariaLabel) {\r\n throw Error('ariaLabel is required');\r\n }\r\n\r\n const items = this.getItems();\r\n if (!items || items.length === 0) {\r\n throw Error('Items are required');\r\n }\r\n\r\n // No se ha puesto label required porque en algunos ejemplos de desy-frontend no aparece\r\n }\r\n\r\n handleEmptyItem(text: string): void {\r\n throw Error(text);\r\n }\r\n\r\n activateMenuItem(itemIndex: number): void {\r\n const items = this.getItems();\r\n this.activeItemChange.emit(items[itemIndex] as MenubarItem);\r\n if (items[itemIndex] instanceof MenubarItemComponent) {\r\n (items[itemIndex] as MenubarItemComponent).selected.emit();\r\n }\r\n }\r\n\r\n activatePopupMenuItem(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): void {\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n let item: MenubarItemSubItem|MenubarItemSubItemSubItem = subItems[subItemIndex];\r\n let subSubItems = [];\r\n if (subSubItemIndex !== null && subSubItemIndex !== undefined) {\r\n subSubItems = this.getSubItemSubitems(item);\r\n item = subSubItems[subSubItemIndex];\r\n }\r\n\r\n let checkedChange = false;\r\n if (item.role === 'menuitemcheckbox') {\r\n item.checked = !item.checked;\r\n checkedChange = true;\r\n } else if (item.role === 'menuitemradio') {\r\n checkedChange = !item.checked;\r\n subSubItems.forEach(i => i.checked = false);\r\n item.checked = true;\r\n }\r\n\r\n this.itemsChange.emit(items);\r\n this.activeSubItemChange.emit(item as MenubarItem);\r\n if (item instanceof MenubarSubitemComponent || item instanceof MenubarSubsubitemComponent) {\r\n item.selected.emit();\r\n\r\n if (checkedChange) {\r\n item.checkedChange.emit(item.checked);\r\n }\r\n }\r\n }\r\n\r\n mustCloseAfterSelectPopupItem(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): boolean {\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n let item: MenubarItemSubItem|MenubarItemSubItemSubItem = subItems[subItemIndex];\r\n if (subSubItemIndex !== null && subSubItemIndex !== undefined) {\r\n const subSubItems = this.getSubItemSubitems(item);\r\n item = subSubItems[subSubItemIndex];\r\n }\r\n\r\n return item.role !== 'menuitemcheckbox' && item.role !== 'menuitemradio';\r\n }\r\n\r\n openMenu(itemIndex: number): void {\r\n const wasOpened = this.menuData[itemIndex].open;\r\n this.menuData[itemIndex].open = true;\r\n if (wasOpened) {\r\n this.activateMenuItem(itemIndex);\r\n }\r\n }\r\n\r\n closeMenu(itemIndex?: number): void {\r\n if (itemIndex !== null && itemIndex !== undefined) {\r\n this.menuData[itemIndex].open = false;\r\n } else {\r\n this.menuData.forEach(item => item.open = false);\r\n }\r\n }\r\n\r\n hasPopupMenu(itemIndex: number): boolean {\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n return items[itemIndex].sub && subItems && subItems.length > 0;\r\n }\r\n\r\n private isPrintableChar(str: string): boolean {\r\n return str.length === 1 && !!str.match(/\\S/);\r\n }\r\n\r\n private getMenuDataIndex(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): number {\r\n let menuDataIndex = 0;\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n for (let i = 0; i < subItemIndex; i++) {\r\n const subItem = subItems[i];\r\n const subSubItems = this.getSubItemSubitems(subItem);\r\n menuDataIndex += subSubItems && subSubItems.length > 0 ? subSubItems.length : 1;\r\n }\r\n\r\n if (subSubItemIndex !== null && subSubItemIndex !== undefined) {\r\n menuDataIndex += subSubItemIndex;\r\n }\r\n\r\n return menuDataIndex;\r\n }\r\n\r\n /*\r\n * Comunes - focus\r\n */\r\n\r\n focusItem(itemIndex: number, hover?: boolean): void {\r\n const hasFocus = this.menubar.nativeElement.contains(document.activeElement);\r\n const isOpen = this.menuData[this.currentFocusItemIndex].open;\r\n\r\n if (!hover || hasFocus) {\r\n this.menuData[itemIndex].menuItem.link.nativeElement.focus();\r\n }\r\n\r\n this.closeMenu();\r\n if (isOpen && this.hasPopupMenu(itemIndex)) {\r\n this.openMenu(itemIndex);\r\n }\r\n\r\n this.currentFocusItemIndex = itemIndex;\r\n }\r\n\r\n focusNextAvailableItem(fromItemIndex: number, step: number): void {\r\n let nextItem = fromItemIndex;\r\n const items = this.getItems();\r\n do {\r\n nextItem = (nextItem + items.length + step) % items.length;\r\n } while (!this.isItemFocusable(nextItem) && nextItem !== fromItemIndex);\r\n\r\n if (nextItem !== fromItemIndex) {\r\n this.focusItem(nextItem);\r\n }\r\n }\r\n\r\n focusFirstItem(): void {\r\n if (this.isItemFocusable(0)) {\r\n this.focusItem(0);\r\n } else {\r\n this.focusNextAvailableItem(0, +1);\r\n }\r\n }\r\n\r\n focusLastItem(): void {\r\n const items = this.getItems();\r\n if (this.isItemFocusable(items.length - 1)) {\r\n this.focusItem(items.length - 1);\r\n } else {\r\n this.focusNextAvailableItem(items.length - 1, -1);\r\n }\r\n }\r\n\r\n isItemFocusable(itemIndex: number): boolean {\r\n return !this.getItems()[itemIndex].disabled;\r\n }\r\n\r\n focusItemByFirstChar(char: string): void {\r\n const itemContents: string[] = this.menuItems.map(menuItem => menuItem.itemContentWrapper.nativeElement.textContent);\r\n let index = this.currentFocusItemIndex;\r\n let foundIndex = -1;\r\n do {\r\n index = (index + itemContents.length + 1) % itemContents.length;\r\n if (itemContents[index] && itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase()\r\n && this.isItemFocusable(index)) {\r\n foundIndex = index;\r\n }\r\n } while (foundIndex === -1 && index !== this.currentFocusItemIndex);\r\n\r\n if (foundIndex >= 0) {\r\n this.focusItem(foundIndex);\r\n }\r\n }\r\n\r\n focusSubItem(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): void {\r\n if (this.menuData[itemIndex].menuItem.popupMenuItems.length > 0) {\r\n const menuDataIndex = this.getMenuDataIndex(itemIndex, subItemIndex, subSubItemIndex);\r\n\r\n this.menuData[itemIndex].currentFocusSubItemIndex = subItemIndex;\r\n this.menuData[itemIndex].currentFocusSubSubItemIndex = subSubItemIndex;\r\n const elem = this.menuData[itemIndex].menuItem.popupMenuItems.toArray()[menuDataIndex].nativeElement;\r\n if (elem) {\r\n elem.focus();\r\n } else {\r\n console.error('No subitem to focus');\r\n }\r\n } else {\r\n console.error('No subitems');\r\n }\r\n }\r\n\r\n focusNextAvailableSubItem(itemIndex: number, fromItemSubIndex: number, fromItemSubSubIndex: number, step: number): void {\r\n let nextSubIndex = fromItemSubIndex;\r\n let nextSubSubIndex = fromItemSubSubIndex;\r\n let allSubItemsChecked;\r\n const items = this.getItems();\r\n do {\r\n const nextIndexes = this.getNextSubItemIndexes(items, itemIndex, nextSubIndex, nextSubSubIndex, step);\r\n nextSubIndex = nextIndexes.subIndex;\r\n nextSubSubIndex = nextIndexes.subSubIndex;\r\n allSubItemsChecked = (fromItemSubIndex === nextSubIndex && fromItemSubSubIndex === nextSubSubIndex);\r\n } while (!this.isSubItemFocusable(itemIndex, nextSubIndex, nextSubSubIndex) && !allSubItemsChecked);\r\n\r\n if (!allSubItemsChecked) {\r\n this.focusSubItem(itemIndex, nextSubIndex, nextSubSubIndex);\r\n }\r\n }\r\n\r\n focusFirstSubItem(itemIndex: number): void {\r\n let firstSubSubItem = null;\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n const subSubItems = this.getSubItemSubitems(subItems[0]);\r\n if (subSubItems && subSubItems.length > 0) {\r\n firstSubSubItem = 0;\r\n }\r\n\r\n if (this.isSubItemFocusable(itemIndex, 0, firstSubSubItem)) {\r\n this.focusSubItem(itemIndex, 0, firstSubSubItem);\r\n } else {\r\n this.focusNextAvailableSubItem(itemIndex, 0, firstSubSubItem, +1);\r\n }\r\n }\r\n\r\n focusLastSubItem(itemIndex: number): void {\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n const lastItemIndex = subItems.length - 1;\r\n const lastItem = subItems[lastItemIndex];\r\n const subSubItems = this.getSubItemSubitems(lastItem);\r\n let lastSubSubItem = null;\r\n if (subSubItems && subSubItems.length > 0) {\r\n lastSubSubItem = subSubItems.length - 1;\r\n }\r\n\r\n if (this.isSubItemFocusable(itemIndex, lastItemIndex, lastSubSubItem)) {\r\n this.focusSubItem(itemIndex, lastItemIndex, lastSubSubItem);\r\n } else {\r\n this.focusNextAvailableSubItem(itemIndex, lastItemIndex, lastSubSubItem, -1);\r\n }\r\n }\r\n\r\n isSubItemFocusable(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): boolean {\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n let item: MenubarItemSubItem|MenubarItemSubItemSubItem = subItems[subItemIndex];\r\n if (subSubItemIndex !== null && subSubItemIndex !== undefined) {\r\n const subSubItems = this.getSubItemSubitems(item);\r\n item = subSubItems[subSubItemIndex];\r\n }\r\n\r\n let isFocusable = false;\r\n if (item.role !== 'separator' && item.role !== 'none') {\r\n isFocusable = true;\r\n }\r\n\r\n return isFocusable;\r\n }\r\n\r\n focusSubItemByFirstChar(itemIndex: number, char: string): void {\r\n const itemContents: string[] = this.menuItems.toArray()[itemIndex].popupMenuItems.map(menuItem => menuItem.nativeElement.textContent);\r\n let subItemIndex = this.menuData[itemIndex].currentFocusSubItemIndex;\r\n let subSubItemIndex = this.menuData[itemIndex].currentFocusSubSubItemIndex;\r\n let foundSubIndex = -1;\r\n let foundSubSubIndex = null;\r\n let allSubItemsChecked = false;\r\n const items = this.getItems();\r\n do {\r\n const nextIndexes = this.getNextSubItemIndexes(items, itemIndex, subItemIndex, subSubItemIndex, +1);\r\n subItemIndex = nextIndexes.subIndex;\r\n subSubItemIndex = nextIndexes.subSubIndex;\r\n const index = this.getMenuDataIndex(itemIndex, subItemIndex, subSubItemIndex);\r\n if (itemContents[index] && itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase()\r\n && this.isSubItemFocusable(itemIndex, subItemIndex, subSubItemIndex)) {\r\n foundSubIndex = subItemIndex;\r\n foundSubSubIndex = subSubItemIndex;\r\n }\r\n allSubItemsChecked = (this.menuData[itemIndex].currentFocusSubItemIndex === subItemIndex\r\n && this.menuData[itemIndex].currentFocusSubSubItemIndex === subSubItemIndex);\r\n } while (foundSubIndex === -1 && !allSubItemsChecked);\r\n\r\n if (foundSubIndex >= 0) {\r\n this.focusSubItem(itemIndex, foundSubIndex, foundSubSubIndex);\r\n }\r\n }\r\n\r\n /*\r\n * Metodos para facilitar contenido\r\n */\r\n\r\n getItems(): MenubarItem[]|MenubarItemComponent[] {\r\n let items;\r\n if (this.itemComponentList && this.itemComponentList.length > 0) {\r\n items = this.itemComponentList.toArray();\r\n } else {\r\n items = this.items;\r\n }\r\n return items;\r\n }\r\n\r\n getItemSubitems(item: MenubarItem|MenubarItemComponent): MenubarItemSubItem[]|MenubarSubitemComponent[] {\r\n let subItems = [];\r\n if (item instanceof MenubarItemComponent){\r\n subItems = item.getSubItems();\r\n }\r\n\r\n if (!subItems || subItems.length === 0) {\r\n subItems = item.sub ? item.sub.items : [];\r\n }\r\n\r\n return subItems;\r\n }\r\n\r\n getSubItemSubitems(item: MenubarItemSubItem|MenubarSubitemComponent): MenubarItemSubItemSubItem[]|MenubarSubsubitemComponent[] {\r\n let subItems = [];\r\n\r\n if (item.role === 'group') {\r\n if (item instanceof MenubarSubitemComponent) {\r\n subItems = item.getSubItems();\r\n }\r\n\r\n if (!subItems || subItems.length === 0) {\r\n subItems = item.items ? item.items : [];\r\n }\r\n }\r\n\r\n return subItems;\r\n }\r\n\r\n getNextSubItemIndexes(items, itemIndex, nextSubIndex, nextSubSubIndex, step): { subIndex: number, subSubIndex?: number} {\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n const subSubItems = this.getSubItemSubitems(subItems[nextSubIndex]);\r\n\r\n let checkNextSubItem = true;\r\n if (subSubItems && subSubItems.length > 0) {\r\n if (nextSubSubIndex + step >= 0 && nextSubSubIndex + step < subSubItems.length) {\r\n nextSubSubIndex += step;\r\n checkNextSubItem = false;\r\n }\r\n }\r\n\r\n if (checkNextSubItem) {\r\n nextSubIndex = (nextSubIndex + step + subItems.length) % subItems.length;\r\n const nextSubItemItems = this.getSubItemSubitems(subItems[nextSubIndex]);\r\n if (nextSubItemItems && nextSubItemItems.length > 0) {\r\n nextSubSubIndex = ((step > 0 ? -1 : 0) + step + nextSubItemItems.length) % nextSubItemItems.length;\r\n } else {\r\n nextSubSubIndex = null;\r\n }\r\n }\r\n\r\n return {subIndex: nextSubIndex, subSubIndex: nextSubSubIndex};\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : this.id + 'menubar-item';\r\n }\r\n\r\n getLabelRef(): TemplateRef<any> {\r\n return this.labelComponent ? this.labelComponent.getContent() : this.labelRef;\r\n }\r\n\r\n getLabelContent(): string {\r\n let content: string;\r\n if (this.labelData) {\r\n content = this.labelData.html ? this.labelData.html : `<p>${ StringUtils.escapeHtml(this.labelData.text) }</p>`;\r\n } else if (this.labelText) {\r\n content = `<p>${ StringUtils.escapeHtml(this.labelText) }</p>`;\r\n }\r\n return content;\r\n }\r\n\r\n getItemId(item, index: number): string {\r\n let id: string;\r\n if (item) {\r\n if (item.id) {\r\n id = item.id;\r\n } else {\r\n id = index === 0 ? this.getIdPrefix() : `${this.getIdPrefix()}-${index}`;\r\n }\r\n }\r\n return id;\r\n }\r\n\r\n getPopupStyle(itemIndex: number): object {\r\n let style = {};\r\n if (this.menuData && itemIndex < this.menuData.length) {\r\n const menuItem = this.menuData[itemIndex].menuItem;\r\n const rect = menuItem.link.nativeElement.getBoundingClientRect();\r\n if (this.menuData[itemIndex].open) {\r\n style = {\r\n position: 'absolute',\r\n top: (rect.height - 1) + 'px',\r\n left: '0px',\r\n zIndex: 100,\r\n display: 'block'\r\n };\r\n } else {\r\n style = {\r\n zIndex: 0,\r\n display: 'none'\r\n };\r\n }\r\n }\r\n\r\n return style;\r\n }\r\n\r\n getSubItemId(item, index: number, parentId: string): string {\r\n let id: string;\r\n if (item) {\r\n if (item.id) {\r\n id = item.id;\r\n } else {\r\n id = index === 0 ? `sub-${parentId}` : `sub-${parentId}-${index}`;\r\n }\r\n }\r\n return id;\r\n }\r\n\r\n getSubSubItemAriaChecked(subsubitem): string {\r\n let ariaChecked = null;\r\n if (subsubitem.role === 'menuitemcheckbox' || subsubitem.role === 'menuitemradio') {\r\n ariaChecked = !!subsubitem.checked;\r\n }\r\n return ariaChecked;\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {NotificationItemsData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-notification-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class NotificationItemComponent extends ContentBaseComponent implements NotificationItemsData {\r\n @Input() href: string;\r\n @Input() target?: string;\r\n @Input() routerLink?: string;\r\n @Input() fragment?: string;\r\n @Input() id: string;\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges\r\n} from '@angular/core';\r\n\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport {NotificationItemsData} from '../../interfaces';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport {TitleComponent} from '../../../desy-commons/components/title/title.component';\r\nimport {IconComponent} from '../../../desy-commons/components/icon/icon.component';\r\nimport {DescriptionComponent} from '../../../desy-commons/components/description/description.component';\r\nimport {ContentComponent} from '../../../desy-commons/components/content/content.component';\r\nimport {NotificationItemComponent} from './notification-item/notification-item.component';\r\nimport {ContentData, DescriptionData, IconData, TitleData} from '../../../desy-commons/interfaces';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-notification',\r\n templateUrl: './notification.component.html',\r\n animations: [\r\n trigger('displayNotification', [\r\n state('void', style({\r\n opacity: '0.0',\r\n transform: 'scaleY(0.95)'\r\n })),\r\n state('*', style({\r\n opacity: '1.0',\r\n transform: 'scaleY(1.0)'\r\n })),\r\n transition(':enter', [\r\n animate('100ms ease-out')\r\n ]),\r\n transition(':leave', [\r\n animate('75ms ease-in')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class NotificationComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() isOpen = true;\r\n @Output() isOpenChange = new EventEmitter<boolean>();\r\n\r\n @Input() title: TitleData;\r\n @Input() description: DescriptionData;\r\n @Input() content: ContentData;\r\n @Input() items: NotificationItemsData[];\r\n\r\n @Input() icon: IconData;\r\n @Input() type: string;\r\n @Input() isDismissible: boolean;\r\n @Input() headingLevel: number;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TitleComponent) titleComponent: TitleComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(DescriptionComponent) descriptionComponent: DescriptionComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(IconComponent) iconComponent: IconComponent;\r\n\r\n @ContentChildren(NotificationItemComponent) itemCompontents: QueryList<NotificationItemComponent>;\r\n\r\n isDismissing = false;\r\n displayDefaultIcon = false;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n dismiss(): void {\r\n // Se emite 75ms más tarde para poder visualizar la animación en cualquier caso\r\n this.isDismissing = true;\r\n setTimeout(() => {\r\n this.isDismissing = false;\r\n this.isOpenChange.emit(false);\r\n }, 75);\r\n }\r\n\r\n getType(): string {\r\n let type: string;\r\n if (this.type){\r\n type = this.type.toLocaleLowerCase();\r\n }\r\n return type;\r\n }\r\n\r\n getItems(): NotificationItemsData[] {\r\n return this.itemCompontents && this.itemCompontents.length > 0 ? this.itemCompontents.toArray() : this.items;\r\n }\r\n\r\n handleIconEmpty(empty: boolean): void {\r\n this.displayDefaultIcon = empty;\r\n\r\n // Como que el contenido vacío se comprueba a posteriori, es necesario forzar la detección de cambios para mostrar el icono por defecto\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n handleRequiredEmpty(text: string): void {\r\n throw new Error(text);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.id){\r\n throw new Error(`id is required`);\r\n }\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {CellData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-table-cell',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class TableCellComponent extends ContentBaseComponent implements CellData {\r\n @Input() classes?: string;\r\n @Input() id?: string;\r\n @Input() colspan?: number;\r\n @Input() rowspan?: number;\r\n}\r\n","import {Component, ContentChildren, QueryList} from '@angular/core';\r\nimport {TableCellComponent} from './table-cell.component';\r\n\r\n@Component({\r\n selector: 'desy-table-header',\r\n template: ''\r\n})\r\nexport class TableHeaderComponent {\r\n @ContentChildren(TableCellComponent) cells: QueryList<TableCellComponent>;\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-table-caption',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class TableCaptionComponent extends ContentBaseComponent {\r\n @Input() classes: string;\r\n}\r\n","import {Component, ContentChildren, QueryList} from '@angular/core';\r\nimport {TableCellComponent} from './table-cell.component';\r\n\r\n@Component({\r\n selector: 'desy-table-row',\r\n template: ''\r\n})\r\nexport class TableRowComponent {\r\n @ContentChildren(TableCellComponent) cells: QueryList<TableCellComponent>;\r\n}\r\n","import {Component, Input, ContentChildren, QueryList} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport {CellData, WrapperData} from '../../interfaces';\r\nimport {TableHeaderComponent} from './components/table-header.component';\r\nimport {TableCellComponent} from './components/table-cell.component';\r\nimport {TableCaptionComponent} from './components/table-caption.component';\r\nimport {TableRowComponent} from './components/table-row.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n\r\n@Component({\r\n selector: 'desy-table',\r\n templateUrl: './table.component.html'\r\n})\r\nexport class TableComponent extends AccessibilityComponent {\r\n\r\n @Input() rows: Array<CellData[]>;\r\n @Input() head: CellData[];\r\n @Input() caption: string;\r\n @Input() captionClasses: string;\r\n @Input() firstCellIsHeader: boolean;\r\n @Input() classes: string;\r\n @Input() id: string;\r\n @Input() wrapper: WrapperData;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TableCaptionComponent) captionComponent: TableCaptionComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TableHeaderComponent) headerComponent: TableHeaderComponent;\r\n\r\n @ContentChildren(TableRowComponent) rowComponentList: QueryList<TableRowComponent>;\r\n\r\n getCaptionClass(): string {\r\n return this.captionComponent ? this.captionComponent.classes : this.captionClasses;\r\n }\r\n\r\n getHeaderCells(): TableCellComponent[]|CellData[] {\r\n let headerCells = [];\r\n if (this.headerComponent && this.headerComponent.cells) {\r\n headerCells = this.headerComponent.cells.toArray();\r\n } else if (this.head) {\r\n headerCells = this.head;\r\n }\r\n return headerCells;\r\n }\r\n\r\n getRows(): TableRowComponent[]|CellData[][] {\r\n const rowList = this.rowComponentList && this.rowComponentList.length > 0 ? this.rowComponentList.toArray() : this.rows;\r\n if (!rowList || rowList.length === 0) {\r\n throw new Error(`rows are required`);\r\n }\r\n return rowList;\r\n }\r\n\r\n getRowCells(row: TableRowComponent|CellData[]): TableCellComponent[]|CellData[] {\r\n return row instanceof TableRowComponent ? row.cells.toArray() : row;\r\n }\r\n\r\n handleEmptyCell(cell: TableCellComponent|CellData, row: number, cellIndex: number): void {\r\n if (cell instanceof TableCellComponent) {\r\n throw new Error(`Content is required for cell at position ${cellIndex} of row ${row}`);\r\n } else {\r\n throw new Error(`Text or Html are required for cell at position ${cellIndex} of row ${row}`);\r\n }\r\n }\r\n}\r\n\r\n","export class SearchUtils {\r\n\r\n /**\r\n * Comprueba si una cadena de texto (target) contiene cualquier palabra de otro texto (text)\r\n * @param target - Texto en el que buscar\r\n * @param text - Texto a buscar\r\n * @param fullWord - Indica si las palabras del texto a buscar deben aparecer enteras\r\n */\r\n public static containsAnyWordFrom(target: string, text: string, fullWord?: boolean): boolean {\r\n let words: string[] = [];\r\n let includes = false;\r\n const simplifiedTarget = this.getSimplifiedString(target);\r\n\r\n if (text && text.split(' ').length > 1) {\r\n words = text.split(' ');\r\n }\r\n words.push(text);\r\n\r\n words.forEach(word => {\r\n if (simplifiedTarget && word) {\r\n if ((fullWord && simplifiedTarget === this.getSimplifiedString(word))\r\n || (!fullWord && simplifiedTarget.includes(this.getSimplifiedString(word)))) {\r\n includes = true;\r\n }\r\n }\r\n });\r\n\r\n return includes;\r\n }\r\n\r\n /**\r\n * Convierte a mayúsculas, elimina espacios y reemplaza/elimina caracteres especiales para realizar comparaciones más tolerantes\r\n * @param str - cadena de entrada\r\n */\r\n private static getSimplifiedString(str: string): string {\r\n let res = str;\r\n if (str) {\r\n res = str.toLocaleUpperCase().trim();\r\n res = res.replace('Á', 'A');\r\n res = res.replace('É', 'E');\r\n res = res.replace('Í', 'I');\r\n res = res.replace('Ó', 'O');\r\n res = res.replace('Ú', 'U');\r\n res = res.replace('À', 'A');\r\n res = res.replace('È', 'E');\r\n res = res.replace('Ì', 'I');\r\n res = res.replace('Ò', 'O');\r\n res = res.replace('Ù', 'U');\r\n res = res.replace('Ä', 'A');\r\n res = res.replace('Ë', 'E');\r\n res = res.replace('Ï', 'I');\r\n res = res.replace('Ö', 'O');\r\n res = res.replace('Ü', 'U');\r\n res = res.replace(',', '');\r\n res = res.replace('.', '');\r\n res = res.replace('\\'', '');\r\n res = res.replace('\"', '');\r\n }\r\n\r\n return res;\r\n }\r\n}\r\n","import { CellData } from './cell-data';\r\n\r\nexport interface HeadCellData extends CellData {\r\n orderBy?: OrderBy; // Possible values `none`, `asc`, `desc`.\r\n hasFilter?: boolean;\r\n filterClasses?: string;\r\n}\r\n\r\nexport interface HeadCellModelData extends HeadCellData {\r\n valueFilter?: string;\r\n activeFilter?: boolean;\r\n}\r\n\r\nexport enum OrderBy {\r\n none = 'none',\r\n asc = 'asc',\r\n desc = 'desc'\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {HeadCellModelData, OrderBy} from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-table-advanced-header-cell',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class TableAdvancedHeaderCellComponent extends ContentBaseComponent implements HeadCellModelData {\r\n @Input() classes: string;\r\n @Input() id: string;\r\n @Input() colspan: number;\r\n @Input() rowspan: number;\r\n @Input() orderBy: OrderBy; // Possible values `none`, `asc`, `desc`.\r\n @Input() hasFilter: boolean;\r\n @Input() filterClasses: string;\r\n valueFilter?: string;\r\n activeFilter?: boolean;\r\n}\r\n","import {Component, ContentChildren, QueryList} from '@angular/core';\r\nimport {TableAdvancedHeaderCellComponent} from './table-advanced-header-cell.component';\r\n\r\n@Component({\r\n selector: 'desy-table-advanced-header',\r\n template: ''\r\n})\r\nexport class TableAdvancedHeaderComponent {\r\n @ContentChildren(TableAdvancedHeaderCellComponent) cells: QueryList<TableAdvancedHeaderCellComponent>;\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {CellData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-table-advanced-row-cell',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class TableAdvancedRowCellComponent extends ContentBaseComponent implements CellData {\r\n @Input() classes?: string;\r\n @Input() id?: string;\r\n @Input() colspan?: number;\r\n @Input() rowspan?: number;\r\n}\r\n","import {Component, ContentChildren, EventEmitter, Input, Output, QueryList} from '@angular/core';\r\nimport {TableAdvancedRowCellComponent} from './table-advanced-row-cell.component';\r\n\r\n@Component({\r\n selector: 'desy-table-advanced-row',\r\n template: ''\r\n})\r\nexport class TableAdvancedRowComponent {\r\n\r\n @ContentChildren(TableAdvancedRowCellComponent) cellsList: QueryList<TableAdvancedRowCellComponent>;\r\n\r\n @Input() id: string;\r\n @Input() checked: boolean;\r\n @Output() checkedChange: EventEmitter<boolean> = new EventEmitter();\r\n}\r\n","import {Directive, ElementRef, Input} from '@angular/core';\r\nimport {RowData} from '../interfaces';\r\nimport {TableAdvancedRowComponent} from '../components/table-advanced/components/table-advanced-row.component';\r\n\r\n/**\r\n * Permite gestionar celdas de una fila de la tabla\r\n */\r\n@Directive({\r\n selector: '[desyCell]'\r\n})\r\nexport class CellDirective {\r\n\r\n @Input() row: RowData|TableAdvancedRowComponent;\r\n @Input() rowIndex: number;\r\n @Input() columnIndex: number;\r\n\r\n constructor(private element: ElementRef) { }\r\n\r\n public getContent(): string {\r\n return this.element.nativeElement.textContent;\r\n }\r\n}\r\n","import {ContentChildren, Directive, Input, QueryList} from '@angular/core';\r\nimport {CellDirective} from './cell.directive';\r\nimport {RowData} from '../interfaces';\r\nimport {TableAdvancedRowComponent} from '../components/table-advanced/components/table-advanced-row.component';\r\n\r\n/**\r\n * Permite gestionar filas de la tabla\r\n */\r\n@Directive({\r\n selector: '[desyRow]'\r\n})\r\nexport class RowDirective {\r\n\r\n @ContentChildren(CellDirective) contentCells: QueryList<CellDirective>;\r\n @Input() desyRow: RowData|TableAdvancedRowComponent;\r\n\r\n\r\n /**\r\n * Devuelve la celda ubicada en la columna indicada\r\n * @param column índice de la columna\r\n */\r\n public getCell(column: number): CellDirective {\r\n return this.contentCells.find(cell => cell.columnIndex === column);\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {SearchUtils} from '../../../shared/utils/search-utils';\r\nimport {HeadCellModelData, OrderBy, RowData, WrapperData} from '../../interfaces';\r\nimport {TableCaptionComponent} from '../table/components/table-caption.component';\r\nimport {TableAdvancedHeaderCellComponent} from './components/table-advanced-header-cell.component';\r\nimport {TableAdvancedHeaderComponent} from './components/table-advanced-header.component';\r\nimport {TableAdvancedRowComponent} from './components/table-advanced-row.component';\r\nimport {CellDirective} from '../../directives/cell.directive';\r\nimport {RowDirective} from '../../directives/row.directive';\r\nimport {RecalculateTableParams} from '../../interfaces/recalculate-table-params';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-table-advanced',\r\n templateUrl: './table-advanced.component.html'\r\n})\r\nexport class TableAdvancedComponent extends AccessibilityComponent implements AfterViewInit {\r\n\r\n @Input() rows: RowData[]; // original data\r\n @Input() head: HeadCellModelData[];\r\n\r\n @Input() caption: string;\r\n @Input() captionClasses: string;\r\n @Input() firstCellIsHeader: boolean;\r\n @Input() hasCheckboxes: boolean;\r\n @Input() idPrefix: string;\r\n @Input() classes: string;\r\n @Input() checkboxClasses: string;\r\n @Input() id: string;\r\n @Input() wrapper: WrapperData;\r\n\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TableCaptionComponent) captionComponent: TableCaptionComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TableAdvancedHeaderComponent) headerComponent: TableAdvancedHeaderComponent;\r\n\r\n @ContentChildren(TableAdvancedRowComponent) rowComponentList: QueryList<TableAdvancedRowComponent>;\r\n @ViewChildren(RowDirective) rowData: QueryList<RowDirective>;\r\n\r\n @Output() rowsChange = new EventEmitter();\r\n @Output() rowsChecked = new EventEmitter();\r\n @Output() recalculateTable = new EventEmitter<RecalculateTableParams>();\r\n\r\n visibleRows: RowData[]|TableAdvancedRowComponent[];\r\n orderByType = OrderBy;\r\n isReset: boolean;\r\n\r\n constructor(private el: ElementRef, private changeDetector: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const elemntsFocus = this.el.nativeElement.querySelector('[tabindex]');\r\n if (elemntsFocus) {\r\n elemntsFocus.setAttribute('tabindex', '0');\r\n }\r\n this.recalculateVisibleElements();\r\n }\r\n\r\n /**\r\n * Refresca las filas visibles tras realizarse una búsqueda o una ordenación\r\n */\r\n recalculateVisibleElements(): void {\r\n const recalculateParams = this.buildRecalculateParams();\r\n\r\n // Si se captura el evento recalculateTable se deja al usuario la responsabilidad de filtrar y ordenar los elementos.\r\n if (this.recalculateTable.observers.length > 0) {\r\n this.recalculateTable.emit(recalculateParams);\r\n this.changeDetector.markForCheck();\r\n } else {\r\n\r\n // Se deben mostrar todas las filas temporalmente para poder aplicar el filtro y la ordenación sobre el contenido insertado\r\n this.visibleRows = this.getRows();\r\n this.changeDetector.detectChanges();\r\n\r\n // Se aplica el filtro y la ordenación\r\n let rowData = this.filterRows(recalculateParams, this.rowData.toArray());\r\n rowData = this.sortRows(recalculateParams, rowData);\r\n this.visibleRows = rowData.map(r => r.desyRow) as RowData[]|TableAdvancedRowComponent[];\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Construye los parámetros necesarios para recalcular la tabla, indicando los filtros y la ordenación\r\n */\r\n private buildRecalculateParams(): RecalculateTableParams {\r\n const params = {\r\n filters: [],\r\n sort: null\r\n };\r\n\r\n const head = this.getHeaderCells() as (HeadCellModelData|TableAdvancedHeaderCellComponent)[];\r\n if (head) {\r\n head.forEach((headerCell, headerCellIndex) => {\r\n if (headerCell.hasFilter && headerCell.activeFilter) {\r\n params.filters.push({ columnIndex: headerCellIndex, filterText: headerCell.valueFilter });\r\n }\r\n });\r\n\r\n const orderByColumnIndex = head.findIndex(cell => cell.orderBy && cell.orderBy !== OrderBy.none);\r\n params.sort = (orderByColumnIndex >= 0) ? { columnIndex: orderByColumnIndex, order: head[orderByColumnIndex].orderBy } : null;\r\n }\r\n\r\n return params;\r\n }\r\n\r\n /**\r\n * funciones de recoger ids, y caracteristicas\r\n */\r\n\r\n hasFilters(): boolean {\r\n const head = this.getHeaderCells();\r\n return head ? head.findIndex(cell => cell.hasFilter) >= 0 : false;\r\n }\r\n\r\n getHeaderCells(): HeadCellModelData[]|TableAdvancedHeaderCellComponent[] {\r\n return this.headerComponent && this.headerComponent.cells.length > 0 ? this.headerComponent.cells.toArray() : this.head;\r\n }\r\n\r\n getRows(): RowData[]|TableAdvancedRowComponent[] {\r\n let rows = [];\r\n if (this.rowComponentList.length > 0) {\r\n rows = this.rowComponentList.toArray();\r\n } else if (this.rows) {\r\n rows = this.rows;\r\n }\r\n return rows;\r\n }\r\n\r\n /**\r\n * Si se sobreescribe el comportamiento por defecto de filtrado y ordenación, se utilizarán las indicadas desde fuera del\r\n * componente (ya sea por parámetro o por contenido).\r\n * Si no se sobreescribe, devuelve las filas calculadas.\r\n */\r\n getVisibleRows(): RowData[]|TableAdvancedRowComponent[] {\r\n return this.recalculateTable.observers.length > 0 ? this.getRows() : this.visibleRows;\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : 'id-table-row';\r\n }\r\n\r\n getIdHeader(index: number): string {\r\n return this.getIdPrefix() + '-header-' + index;\r\n }\r\n\r\n getIdRowCheckbox(index: number): string {\r\n return this.getIdPrefix() + '-checkbox-' + index;\r\n }\r\n\r\n getIdHeaderFilter(index: number): string {\r\n return this.getIdPrefix() + '-header-filter-' + index;\r\n }\r\n\r\n getCaptionClass(): string {\r\n return this.captionComponent ? this.captionComponent.classes : this.captionClasses;\r\n }\r\n\r\n getStringOrderBy(orderBy: OrderBy): string {\r\n if (orderBy === OrderBy.asc){\r\n return 'ascending';\r\n } else if (orderBy === OrderBy.desc){\r\n return 'descending';\r\n } else if (orderBy === OrderBy.none){\r\n return 'none';\r\n }\r\n }\r\n\r\n handleTableCellContentEmpty(row: number, column: number): void {\r\n throw new Error(`cell content, html or text are required at row ${row} and column ${column}`);\r\n }\r\n\r\n /**\r\n * checks\r\n */\r\n handleCheckboxChange(row: RowData|TableAdvancedRowComponent): void {\r\n if (row instanceof TableAdvancedRowComponent) {\r\n row.checkedChange.emit(row.checked);\r\n }\r\n this.notifyCheckedChange();\r\n }\r\n\r\n /**\r\n * Permite desmarcar todas las filas\r\n */\r\n private uncheckAll(): void{\r\n this.getRows().forEach(r => {\r\n const mustEmit = r.checked && r instanceof TableAdvancedRowComponent;\r\n r.checked = false;\r\n if (mustEmit) {\r\n (r as TableAdvancedRowComponent).checkedChange.emit(r.checked);\r\n }\r\n });\r\n this.notifyCheckedChange();\r\n }\r\n\r\n /**\r\n * Notifica cambios en las filas\r\n */\r\n private notifyCheckedChange(): void {\r\n if (this.rowComponentList.length === 0) {\r\n this.rowsChange.emit(this.rows);\r\n }\r\n\r\n const rowChecks: any = {};\r\n this.getRows().forEach(r => rowChecks[r.id] = !!r.checked); // Se aplican también a las no visibles\r\n this.rowsChecked.emit(rowChecks);\r\n }\r\n\r\n\r\n /**\r\n * busqueda\r\n */\r\n handleInputSearch(item: HeadCellModelData): void {\r\n if (item.hasFilter) { // si tiene buscador\r\n item.activeFilter = !!item.valueFilter;\r\n this.uncheckAll();\r\n }\r\n\r\n this.recalculateVisibleElements();\r\n }\r\n\r\n /**\r\n * Se filtran las filas según lo especificado en la barra de búsqueda de cada columna.\r\n * Si no hay búsqueda sse devuelven todas las filas.\r\n * @param recalculateParams parametros para recalcular los elementos visibles\r\n * @param rows lista con todas las filas\r\n * @return lista de filas filtrada\r\n */\r\n private filterRows(recalculateParams: RecalculateTableParams, rows: RowDirective[]): RowDirective[] {\r\n let filteredRows = rows;\r\n recalculateParams.filters.forEach(filter => {\r\n filteredRows = filteredRows.filter(row =>\r\n SearchUtils.containsAnyWordFrom(row.getCell(filter.columnIndex).getContent(), filter.filterText));\r\n });\r\n\r\n return filteredRows;\r\n }\r\n\r\n /**\r\n * ordenacion\r\n */\r\n\r\n /**\r\n * Permite indicar que se debe ordenar la tabla\r\n * @param index indice de la columna\r\n */\r\n handleSortByColumn(index: number): void {\r\n const head = this.getHeaderCells();\r\n if (head) {\r\n head.forEach((cell, cellIndex) => {\r\n if (cell.orderBy) {\r\n cell.orderBy = cellIndex === index ? this.getNextDirection(cell) : OrderBy.none;\r\n }\r\n });\r\n }\r\n\r\n this.recalculateVisibleElements();\r\n }\r\n\r\n\r\n /**\r\n * Ordena las filas indicadas según la columna especificada en la cabecera\r\n * @param recalculateParams parametros para recalcular los elementos visibles\r\n * @param rows filas de la tabla a ordenar\r\n * @return mismas filas pero ordenadas por la columna indicada\r\n */\r\n private sortRows(recalculateParams: RecalculateTableParams, rows: RowDirective[]): RowDirective[] {\r\n let sortedRows = rows;\r\n if (recalculateParams.sort) {\r\n const columnIndex = recalculateParams.sort.columnIndex;\r\n const isAsc = recalculateParams.sort.order === OrderBy.asc;\r\n sortedRows = rows.sort((a, b) =>\r\n this.compareCellContent(a.getCell(columnIndex), b.getCell(columnIndex), isAsc));\r\n }\r\n\r\n return sortedRows;\r\n }\r\n\r\n /**\r\n * Compara el contenido de dos celdas. Este se invierte si el orden especificado es descendente.\r\n */\r\n compareCellContent(a: CellDirective, b: CellDirective, isAsc: boolean): number{\r\n let result;\r\n const aComparable = this.cleanCurrency(a.getContent());\r\n const bComparable = this.cleanCurrency(b.getContent());\r\n\r\n if (isNaN(+aComparable) && isNaN(+bComparable) ) { // son textos\r\n result = aComparable.localeCompare(bComparable, 'es', { sensitivity: 'base', ignorePunctuation: true });\r\n }else{ // son numeros\r\n result = aComparable.localeCompare(bComparable, undefined, { numeric: true });\r\n }\r\n\r\n return result * (isAsc ? 1 : -1);\r\n }\r\n\r\n /**\r\n * se calcula la ordenación nueva\r\n */\r\n private getNextDirection(item: HeadCellModelData): OrderBy {\r\n if (item.orderBy === OrderBy.none || item.orderBy === OrderBy.desc) {\r\n return OrderBy.asc;\r\n } else {\r\n return OrderBy.desc;\r\n }\r\n }\r\n\r\n /**\r\n * si es una cantidad de dinero se quita € para poder comparar los numeros\r\n */\r\n private cleanCurrency(txt: string): string {\r\n if (/[\\d.,]+[\\€]/g.test(txt)) {\r\n txt = txt.replace(/€/g, '');\r\n }\r\n return txt;\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ComponentRef,\r\n ElementRef,\r\n EventEmitter,\r\n Input, OnChanges,\r\n OnDestroy,\r\n Output,\r\n TemplateRef, Type,\r\n ViewChild, ViewContainerRef\r\n} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { FocusUtils } from '../../../shared/utils/focus-utils';\r\n\r\ntype AlertCreationCallback = ((dialog: AlertComponent, caller: ComponentRef<any>) => void);\r\n\r\n@Component({\r\n selector: 'desy-alert',\r\n templateUrl: './alert.component.html'\r\n})\r\nexport class AlertComponent extends AccessibilityComponent implements OnChanges, OnDestroy, AfterViewInit {\r\n\r\n @ViewChild('alertWrapper') alertWrapper: ElementRef;\r\n @ViewChild('container', {read: ViewContainerRef}) container: ViewContainerRef;\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() caller: TemplateRef<any>;\r\n @Input() focusFirst: boolean;\r\n @Input() active: boolean;\r\n @Output() activeChange = new EventEmitter<boolean>();\r\n\r\n public callerContext: any;\r\n public callerType: Type<any>;\r\n public onCallerCreationCallback: AlertCreationCallback;\r\n\r\n private lastActiveState: boolean = undefined;\r\n private hasViewinit = false;\r\n\r\n constructor(private cdRef: ChangeDetectorRef, private factoryResolver: ComponentFactoryResolver) {\r\n super();\r\n }\r\n\r\n ngOnChanges(): void {\r\n this.handleActiveState();\r\n }\r\n ngOnDestroy(): void {\r\n this.active = false;\r\n this.handleActiveState();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n\r\n if (!this.caller && !this.callerType) {\r\n throw Error('caller is required');\r\n }\r\n\r\n this.hasViewinit = true;\r\n this.cdRef.detectChanges();\r\n\r\n if (this.callerType) {\r\n const factory = this.factoryResolver.resolveComponentFactory(this.callerType);\r\n const component = this.container.createComponent(factory);\r\n if (this.onCallerCreationCallback) {\r\n this.onCallerCreationCallback(this, component);\r\n }\r\n }\r\n\r\n this.handleActiveState();\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n dismiss(): void {\r\n this.activeChange.emit(false);\r\n }\r\n\r\n handleActiveState(): void {\r\n if (this.active !== this.lastActiveState && this.hasViewinit) {\r\n this.lastActiveState = this.active;\r\n\r\n if (this.active && this.focusFirst) {\r\n setTimeout(() => {\r\n const focusElem = FocusUtils.getFirstFocusableElement(this.alertWrapper.nativeElement as HTMLElement);\r\n if (focusElem) {\r\n setTimeout(() => focusElem.focus());\r\n }\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {AccordionHeaderData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-accordion-header',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class AccordionHeaderComponent extends ContentBaseComponent implements AccordionHeaderData {\r\n\r\n @Input() classes?: string;\r\n\r\n}\r\n","import {Component, ContentChildren, EventEmitter, Input, Output} from '@angular/core';\r\nimport {AccordionItemData} from '../../../interfaces';\r\nimport {AccordionHeaderComponent} from '../accordion-header/accordion-header.component';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {ContentComponent} from '../../../../desy-commons/components/content/content.component';\r\nimport {AccessibilityComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-accordion-item',\r\n template: '',\r\n})\r\nexport class AccordionItemComponent extends AccessibilityComponent implements AccordionItemData {\r\n\r\n @Input() id: string;\r\n @Input() open: boolean;\r\n @Input() classes: string;\r\n\r\n @Output() openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n @DesyContentChild()\r\n @ContentChildren(AccordionHeaderComponent) headerComponent: AccordionHeaderComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n}\r\n","import {Component, ContentChildren, ElementRef, Input, OnChanges, QueryList, SimpleChanges, ViewChildren} from '@angular/core';\r\nimport {AccordionHeaderData} from '../../interfaces';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {AccordionItemData} from '../../interfaces';\r\nimport {AccordionHeaderComponent} from './accordion-header/accordion-header.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\nimport {AccordionItemComponent} from './accordion-item/accordion-item.component';\r\nimport {ContentComponent} from '../../../desy-commons/components/content/content.component';\r\n\r\n\r\n@Component({\r\n selector: 'desy-accordion',\r\n templateUrl: './accordion.component.html'\r\n})\r\nexport class AccordionComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @ViewChildren('itemSelector') itemSelectors: QueryList<ElementRef>;\r\n\r\n @Input() idPrefix: string;\r\n @Input() allowToggle: boolean;\r\n @Input() allowMultiple: boolean;\r\n @Input() heading: AccordionHeaderData;\r\n @Input() headingLevel;\r\n @Input() showControl: boolean;\r\n @Input() items: AccordionItemData[];\r\n @Input() classes: string;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(AccordionHeaderComponent) headingComponent: AccordionHeaderComponent;\r\n @ContentChildren(AccordionItemComponent) itemComponentList: QueryList<AccordionItemComponent>;\r\n\r\n showAll = true;\r\n currentItem: number;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.idPrefix) {\r\n throw new Error(`idPrefix is required`);\r\n }\r\n }\r\n\r\n getItemId(item, index: number): string {\r\n let id;\r\n if (item.id) {\r\n id = item.id;\r\n } else {\r\n if (index === 0) {\r\n id = this.idPrefix ? this.idPrefix : undefined;\r\n } else {\r\n id = this.idPrefix ? this.idPrefix + '-' + index : index;\r\n }\r\n }\r\n return id;\r\n }\r\n\r\n changeAll(): void {\r\n const items = this.getItems();\r\n items.forEach(item => {\r\n const isChange = item.open !== this.showAll;\r\n item.open = this.showAll;\r\n if (isChange && item instanceof AccordionItemComponent) {\r\n item.openChange.emit(item.open);\r\n }\r\n });\r\n this.showAll = !this.showAll;\r\n }\r\n\r\n toggleItem(item: AccordionItemData): void {\r\n if (!item.open || this.allowToggle) {\r\n const newOpenValue = !item.open;\r\n if (!this.allowMultiple) {\r\n const items = this.getItems();\r\n items.forEach(it => {\r\n const wasOpen = it.open;\r\n it.open = false;\r\n if (wasOpen && it !== item && it instanceof AccordionItemComponent) {\r\n it.openChange.emit(it.open);\r\n }\r\n });\r\n }\r\n item.open = newOpenValue;\r\n if (item instanceof AccordionItemComponent) {\r\n item.openChange.emit(item.open);\r\n }\r\n }\r\n }\r\n\r\n focusFirstItem(event): void {\r\n event.preventDefault();\r\n this.itemSelectors.toArray()[0].nativeElement.focus();\r\n }\r\n\r\n focusLastItem(event): void {\r\n event.preventDefault();\r\n this.itemSelectors.toArray()[this.itemSelectors.length - 1].nativeElement.focus();\r\n }\r\n\r\n focusNextItem(event, focusedItem: number): void {\r\n event.preventDefault();\r\n const selectors = this.itemSelectors.toArray();\r\n if (selectors[(focusedItem + 1) % selectors.length] != null) {\r\n selectors[(focusedItem + 1) % selectors.length].nativeElement.focus();\r\n }\r\n }\r\n\r\n focusPreviousItem(event, focusedItem: number): void {\r\n event.preventDefault();\r\n const selectors = this.itemSelectors.toArray();\r\n if (selectors[(focusedItem + selectors.length - 1) % selectors.length] != null) {\r\n selectors[(focusedItem + selectors.length - 1) % selectors.length].nativeElement.focus();\r\n }\r\n }\r\n\r\n selectItem( i: number ): void {\r\n this.currentItem = i;\r\n }\r\n\r\n getTitleClasses(): string {\r\n let classes = 'c-h2 mb-base';\r\n if (this.headingComponent && this.headingComponent.classes) {\r\n classes = this.headingComponent.classes;\r\n } else if (this.heading && this.heading.classes) {\r\n classes = this.heading.classes;\r\n }\r\n return classes;\r\n }\r\n\r\n getItems(): AccordionItemData[] {\r\n const items = this.itemComponentList && this.itemComponentList.length > 0 ? this.itemComponentList.toArray() : this.items;\r\n if (!items || items.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n return items;\r\n }\r\n\r\n getItemHeader(item: AccordionItemData): AccordionHeaderComponent {\r\n return item instanceof AccordionItemComponent ? item.headerComponent : null;\r\n }\r\n\r\n getItemContent(item: AccordionItemData): ContentComponent {\r\n return item instanceof AccordionItemComponent ? item.contentComponent : null;\r\n }\r\n\r\n handleRequiredEmpty(text: string): void {\r\n throw new Error(text);\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-spinner',\r\n templateUrl: './spinner.component.html'\r\n})\r\nexport class SpinnerComponent extends AccessibilityComponent {\r\n\r\n @Input() classes: string;\r\n @Input() text: string;\r\n\r\n @Input() id: string;\r\n\r\n}\r\n","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-details',\r\n templateUrl: './details.component.html'\r\n})\r\nexport class DetailsComponent extends AccessibilityComponent implements OnInit, OnChanges {\r\n\r\n @Input() summaryText: string;\r\n @Input() summaryHtml: string;\r\n @Input() summaryClasses: string;\r\n @Input() containerClasses: string;\r\n @Input() id: string;\r\n @Input() open: boolean;\r\n @Input() classes: string;\r\n\r\n ngOnInit(): void {\r\n summaryTextOrSummaryHtmlRequiredFunction(this.summaryText, this.summaryHtml);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n summaryTextOrSummaryHtmlRequiredFunction(this.summaryText, this.summaryHtml);\r\n }\r\n\r\n}\r\n\r\nexport function summaryTextOrSummaryHtmlRequiredFunction(text: string, html: string): void {\r\n if (!html && !text) {\r\n throw new Error(`summaryHtml or summaryText are required`);\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {TermDefinitionData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-term',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class TermComponent extends ContentBaseComponent implements TermDefinitionData {\r\n\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {TermDefinitionData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-definition',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class DefinitionComponent extends ContentBaseComponent implements TermDefinitionData {\r\n\r\n @Input() classes: string;\r\n @Input() id: string;\r\n}\r\n","import {Component, ContentChildren, Input} from '@angular/core';\r\nimport {DescriptionItemData} from '../../../interfaces';\r\nimport {TermComponent} from '../term/term.component';\r\nimport {DefinitionComponent} from '../definition/definition.component';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-description-item',\r\n template: ''\r\n})\r\nexport class DescriptionItemComponent implements DescriptionItemData {\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TermComponent) term: TermComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(DefinitionComponent) definition: DefinitionComponent;\r\n\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n}\r\n","import {Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { DescriptionItemData } from '../../interfaces';\r\nimport {DescriptionItemComponent} from './description-item/description-item.component';\r\n\r\n@Component({\r\n selector: 'desy-description-list',\r\n templateUrl: './description-list.component.html'\r\n})\r\nexport class DescriptionListComponent extends AccessibilityComponent {\r\n\r\n @Input() items: Array<DescriptionItemData>;\r\n @ContentChildren(DescriptionItemComponent) itemComponents: QueryList<DescriptionItemComponent>;\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n handleContentEmpty(element: string): void {\r\n throw new Error(`${element} content, html or text is required`);\r\n }\r\n\r\n getItems(): DescriptionItemData[]|DescriptionItemComponent[] {\r\n const items = (this.itemComponents.length > 0) ? this.itemComponents.toArray() : this.items;\r\n if (!items || items.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n return items;\r\n }\r\n\r\n}\r\n","import { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { Component, Input, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { AccessibilityAndContentRequiredComponent, textOrHtmlRequiredFunction } from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-collapsible',\r\n templateUrl: './collapsible.component.html',\r\n animations: [\r\n trigger('displayCollapsible', [\r\n state('void', style({\r\n opacity: '0.0',\r\n transform: 'scaleY(0.95)'\r\n })),\r\n state('*', style({\r\n opacity: '1.0',\r\n transform: 'scaleY(1.0)'\r\n })),\r\n transition(':enter', [\r\n animate('100ms ease-out')\r\n ]),\r\n transition(':leave', [\r\n animate('75ms ease-in')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class CollapsibleComponent extends AccessibilityAndContentRequiredComponent implements OnInit, OnChanges {\r\n\r\n @Input() headerText: string;\r\n @Input() headerHtml: string;\r\n @Input() id: string;\r\n @Input() open: boolean;\r\n @Input() classes: string;\r\n\r\n show: string;\r\n\r\n isOpen(): void {\r\n this.open = !this.open;\r\n this.toggleOpen();\r\n }\r\n\r\n toggleOpen(): void {\r\n if (this.open){\r\n this.show = 'Ocultar';\r\n } else {\r\n this.show = 'Mostrar';\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n textOrHtmlRequiredFunction(this.text, this.html);\r\n this.toggleOpen();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n textOrHtmlRequiredFunction(this.text, this.html);\r\n this.toggleOpen();\r\n\r\n }\r\n\r\n headerTextOrheaderHtmlRequiredFunction(text: string, html: string, content: any): void {\r\n if (!html && !text && !content) {\r\n throw new Error(`headerHtml or headerText are required`);\r\n }\r\n }\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-item-content-right',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ItemContentRightComponent extends ContentBaseComponent {\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {ContentData} from '../../../../desy-commons/interfaces';\r\n\r\n@Component({\r\n selector: 'desy-item-content-bottom',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ItemContentBottomComponent extends ContentBaseComponent implements ContentData {\r\n @Input() classes: string;\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-item-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ItemItemComponent extends ContentBaseComponent {\r\n\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n Input,\r\n QueryList,\r\n TemplateRef\r\n} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {ContentData, DescriptionData, IconData, TitleData} from '../../../desy-commons/interfaces';\r\nimport {TitleComponent} from '../../../desy-commons/components/title/title.component';\r\nimport {DescriptionComponent} from '../../../desy-commons/components/description/description.component';\r\nimport {ItemContentRightComponent} from './item-content-right/item-content-right.component';\r\nimport {ItemContentBottomComponent} from './item-content-bottom/item-content-bottom.component';\r\nimport {ItemItemComponent} from './item-item/item-item.component';\r\nimport {IconComponent} from '../../../desy-commons/components/icon/icon.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-item',\r\n templateUrl: './item.component.html'\r\n})\r\nexport class ItemComponent extends AccessibilityComponent implements AfterViewInit {\r\n\r\n @Input() title: TitleData;\r\n @Input() description: DescriptionData;\r\n @Input() headingLevel: number;\r\n @Input() items: string[];\r\n @Input() content: ContentData;\r\n @Input() icon: IconData;\r\n @Input() isDraggable: boolean;\r\n @Input() isLocked: boolean;\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() caller: TemplateRef<any>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TitleComponent) titleComponent: TitleComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(DescriptionComponent) descriptionComponent: DescriptionComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(IconComponent) iconComponent: IconComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ItemContentBottomComponent) contentBottomComponent: ItemContentBottomComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ItemContentRightComponent) contentRightComponent: ItemContentRightComponent;\r\n\r\n @ContentChildren(ItemItemComponent) itemComponents: QueryList<ItemItemComponent>;\r\n\r\n hasIconContent = true;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.titleComponent && !this.title) {\r\n throw new Error('title is required');\r\n }\r\n }\r\n\r\n\r\n getItems(): string[]|ItemItemComponent[] {\r\n return this.itemComponents.length > 0 ? this.itemComponents.toArray() : this.items;\r\n }\r\n\r\n handleIconContentEmpty(isEmpty: boolean): void {\r\n this.hasIconContent = !isEmpty;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n handleRequiredEmpty(text: string): void {\r\n throw new Error(text);\r\n }\r\n\r\n getTitle(): TitleData {\r\n return this.titleComponent ? this.titleComponent : this.title;\r\n }\r\n\r\n}\r\n","import { Component, Input, SimpleChanges, TemplateRef, OnChanges } from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-media-object',\r\n templateUrl: './media-object.component.html'\r\n})\r\nexport class MediaObjectComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() figureHtml: string;\r\n @Input() classes: string;\r\n @Input() center: boolean;\r\n @Input() reverse: boolean;\r\n @Input() figureClasses: string;\r\n @Input() contenClasses: string;\r\n\r\n @Input() caller: TemplateRef<any>;\r\n @Input() id: string;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequiredParams();\r\n }\r\n\r\n checkRequiredParams(): void {\r\n if (!this.figureHtml) {\r\n throw new Error(`figureHtml are required`);\r\n }\r\n }\r\n}\r\n","import { Component, ContentChild, Input, OnChanges, SimpleChanges, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { AccessibilityAndContentRequiredComponent, AccessibilityComponent } from '../../../shared/components';\r\nimport { StatusIconData } from '../../interfaces/status-icon-data';\r\n\r\n@Component({\r\n selector: 'desy-status',\r\n templateUrl: './status.component.html'\r\n})\r\nexport class StatusComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() text: string;\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() icon: StatusIconData;\r\n\r\n\r\n getType(): string {\r\n let type: string;\r\n if (this.icon.type){\r\n type = this.icon.type.toLocaleLowerCase();\r\n } else {\r\n type = 'success';\r\n } \r\n return type;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.text){\r\n throw new Error(`title is required`);\r\n }\r\n\r\n if (!this.icon){\r\n throw new Error(`icon is required`);\r\n }\r\n \r\n }\r\n}\r\n","import { Component, ContentChildren, Input, OnChanges, QueryList, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { DescriptionItemData, StatusItemTitleData, StatusData } from '../../interfaces';\r\nimport { ErrorMessageData, HintData } from '../../../desy-forms/interfaces';\r\nimport { DescriptionItemComponent } from '../description-list/description-item/description-item.component';\r\nimport { TitleComponent } from '../../../desy-commons/components/title/title.component';\r\nimport { HintComponent } from '../../../desy-forms/components/hint/hint.component';\r\nimport { ErrorMessageComponent } from '../../../desy-forms/components/error-message/error-message.component';\r\nimport { StatusComponent } from '../status/status.component';\r\nimport { ContentComponent } from '../../../desy-commons/components/content/content.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-status-item',\r\n templateUrl: './status-item.component.html'\r\n})\r\nexport class StatusItemComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n\r\n @Input() errorId: string;\r\n @Input() describedBy: string;\r\n\r\n @Input() title: StatusItemTitleData;\r\n @Input() hint: HintData;\r\n @Input() errorMessage: ErrorMessageData;\r\n @Input() items: DescriptionItemData[];\r\n @Input() status: StatusData;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TitleComponent) titleComponent: TitleComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(HintComponent) hintComponent: HintComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ErrorMessageComponent) errorMessageComponent: ErrorMessageComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n @ContentChildren(DescriptionItemComponent) itemComponents: QueryList<DescriptionItemComponent>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(StatusComponent) statusComponent: StatusComponent;\r\n @Input() caller: TemplateRef<any>;\r\n\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.id){\r\n throw new Error(`id is required`);\r\n }\r\n }\r\n\r\n handleContentEmpty(element: string): void {\r\n throw new Error(`${element} content, html or text is required`);\r\n }\r\n\r\n getItems(): DescriptionItemData[]|DescriptionItemComponent[] {\r\n return (this.itemComponents.length > 0) ? this.itemComponents.toArray() : this.items;\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {TabsPanelData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-panel',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class PanelComponent extends ContentBaseComponent implements TabsPanelData {\r\n\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n}","import {Component, ContentChildren, Input } from '@angular/core';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {ContentComponent} from '../../../../desy-commons/components/content/content.component';\r\nimport { PanelComponent } from '../panel/panel.component';\r\nimport { TabsItemsData, TabsPanelData } from '../../../interfaces';\r\nimport { AccessibilityComponent } from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-tab-item',\r\n template: ''\r\n})\r\nexport class TabItemComponent extends AccessibilityComponent implements TabsItemsData {\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(PanelComponent) panelComponent: PanelComponent;\r\n\r\n @Input() classes: string;\r\n @Input() disabled: boolean;\r\n @Input() id: string;\r\n panel?: TabsPanelData;\r\n\r\n}\r\n","import {\r\n AfterViewInit, ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n QueryList,\r\n SimpleChanges, ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { StringUtils } from '../../../shared/utils/string-utils';\r\nimport {TabsItemsData, TabsPanelData} from '../../interfaces';\r\nimport { TabItemComponent } from './tab-item/tab-item.component';\r\n\r\n@Component({\r\n selector: 'desy-tabs',\r\n templateUrl: './tabs.component.html'\r\n})\r\nexport class TabsComponent extends AccessibilityComponent implements OnChanges, AfterViewInit {\r\n\r\n @ContentChildren(TabItemComponent) itemComponents: QueryList<TabItemComponent>;\r\n @ViewChildren('tabSelector') tabSelectors: QueryList<ElementRef>;\r\n @ViewChildren('tabSelectorContentWrapper') tabSelectorContentWrapper: QueryList<ElementRef>;\r\n @ViewChild('tabSrOnly') tabSrOnly: ElementRef;\r\n\r\n\r\n @Input() id: string;\r\n @Input() idPrefix: string;\r\n @Input() classes: string;\r\n @Input() headingLevel: number;\r\n\r\n @Input() title: string;\r\n @Input() tablistAriaLabel: string;\r\n @Input() items: TabsItemsData[];\r\n\r\n currentTab = 0;\r\n currentPanel;\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.title){\r\n throw new Error(`title is required`);\r\n }\r\n\r\n if (!this.tablistAriaLabel){\r\n throw new Error(`tablistAriaLabel is required`);\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const item = this.getItems();\r\n this.selectTab(item.findIndex(value => !value.disabled));\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n getItems(): TabsItemsData[]|TabItemComponent[] {\r\n const items = (this.itemComponents.length > 0) ? this.itemComponents.toArray() : this.items;\r\n if (!items || items.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n return items;\r\n }\r\n\r\n getItemPanel(tab: number): TabItemComponent {\r\n let panel;\r\n const items = this.getItems();\r\n const item = items[tab];\r\n if (item instanceof TabItemComponent){\r\n panel = item.panelComponent;\r\n }\r\n return panel;\r\n }\r\n\r\n handleContentEmpty(element: string): void {\r\n throw new Error(`${element} content, html or text is required`);\r\n }\r\n\r\n getIdPrefix(): string {\r\n if (this.idPrefix) {\r\n return this.idPrefix;\r\n }\r\n }\r\n\r\n getItemId(index: number): string {\r\n let id;\r\n const item = this.getItems();\r\n if (item[index].id) {\r\n id = item[index].id;\r\n } else {\r\n id = this.getIdPrefix() + '-' + index;\r\n }\r\n return id;\r\n }\r\n\r\n isDisabled(item: TabsItemsData): boolean {\r\n return item.disabled ? true : null;\r\n }\r\n\r\n\r\n selectTab( i: number ): void {\r\n this.currentTab = i;\r\n const currentItem = this.getItems()[i];\r\n this.currentPanel = currentItem instanceof TabItemComponent ? currentItem.panelComponent : currentItem.panel;\r\n this.tabSrOnly.nativeElement.innerHTML = this.tabSelectorContentWrapper.toArray()[this.currentTab].nativeElement.innerHTML;\r\n }\r\n\r\n focusFirstTab(event?): void {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n const enabledTabs = this.tabSelectors.filter((item, index) => !item[index].disabled);\r\n enabledTabs[0].nativeElement.focus();\r\n }\r\n\r\n focusLastTab(event?): void {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n const enabledTabs = this.tabSelectors.filter((item, index) => !item[index].disabled);\r\n enabledTabs[enabledTabs.length - 1].nativeElement.focus();\r\n }\r\n\r\n focusNextTab(focusedTab: number): void {\r\n const item = this.getItems();\r\n let nextTab = (focusedTab + 1) % item.length;\r\n while (nextTab !== focusedTab) {\r\n if (!item[nextTab].disabled) {\r\n this.tabSelectors.find((i, index) => index === nextTab).nativeElement.focus();\r\n break;\r\n }\r\n nextTab = (nextTab + 1) % item.length;\r\n }\r\n }\r\n\r\n focusPreviousTab(focusedTab: number): void {\r\n const item = this.getItems();\r\n let previousTab = (focusedTab - 1 + item.length) % item.length;\r\n while (previousTab !== focusedTab) {\r\n if (!item[previousTab].disabled) {\r\n this.tabSelectors.find((i, index) => index === previousTab).nativeElement.focus();\r\n break;\r\n }\r\n previousTab = (previousTab - 1 + item.length) % item.length;\r\n }\r\n }\r\n\r\n getPanelContent(tab: number): string {\r\n const item = this.getItems();\r\n return item[tab].panel && item[tab].panel.text ? `<p>${ StringUtils.escapeHtml(item[tab].panel.text) }</p>` : null;\r\n }\r\n}\r\n","import {\r\n ComponentFactoryResolver, ComponentRef,\r\n Injectable,\r\n TemplateRef, Type\r\n} from '@angular/core';\r\nimport { AlertOptions } from '../interfaces/alert-options';\r\nimport { OpenAlertResult } from '../interfaces/open-alert-result';\r\nimport { AlertComponent } from '../components/alert/alert.component';\r\nimport { NotificationComponent } from '../../desy-nav/components/notification/notification.component';\r\nimport { NotificationOptions } from '../../desy-nav/interfaces/notification-options';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AlertService {\r\n\r\n constructor(private factoryResolver: ComponentFactoryResolver) { }\r\n\r\n public openAlert(caller: TemplateRef<any>|NotificationOptions, alertOptions: AlertOptions): Promise<OpenAlertResult> {\r\n return new Promise<OpenAlertResult>((resolve, reject) => {\r\n\r\n if (!caller) {\r\n reject('caller is required');\r\n }\r\n\r\n if (!alertOptions) {\r\n reject('alertOptions is required');\r\n }\r\n\r\n const alert = this.createAlert(alertOptions);\r\n const result: OpenAlertResult = {\r\n alert\r\n };\r\n\r\n\r\n if (caller instanceof TemplateRef) {\r\n alert.instance.caller = caller;\r\n resolve(result);\r\n } else {\r\n alert.instance.callerType = NotificationComponent;\r\n alert.instance.onCallerCreationCallback = (d, c) => {\r\n this.initNotification(d, c, caller);\r\n result.component = c;\r\n resolve(result);\r\n };\r\n }\r\n });\r\n }\r\n\r\n public closeAlert(alert: ComponentRef<AlertComponent>|AlertComponent): void {\r\n\r\n if (!alert) {\r\n throw Error('alert is required');\r\n }\r\n\r\n if (alert instanceof ComponentRef) {\r\n alert.instance.dismiss();\r\n } else {\r\n alert.dismiss();\r\n }\r\n }\r\n\r\n public onCloseAlert(alert: ComponentRef<AlertComponent>|AlertComponent): Promise<void> {\r\n return new Promise<void>((resolve => {\r\n let a;\r\n if (alert instanceof ComponentRef) {\r\n a = alert.instance;\r\n } else {\r\n a = alert;\r\n }\r\n\r\n const subscription = a.activeChange.subscribe(() => {\r\n resolve();\r\n subscription.unsubscribe();\r\n });\r\n }));\r\n }\r\n\r\n\r\n private createAlert(alertOptions: AlertOptions): ComponentRef<AlertComponent> {\r\n const factory = this.factoryResolver.resolveComponentFactory(AlertComponent);\r\n const alert = alertOptions.place.createComponent<AlertComponent>(factory);\r\n\r\n alert.instance.active = true;\r\n if (alertOptions) {\r\n Object.assign(alert.instance, alertOptions);\r\n }\r\n\r\n this.onCloseAlert(alert).then(() => alert.destroy());\r\n\r\n return alert;\r\n }\r\n\r\n private initNotification(alert: AlertComponent, notificationRef: ComponentRef<NotificationComponent>,\r\n options: NotificationOptions): void {\r\n Object.assign(notificationRef.instance, options);\r\n if (options.isDismissible) {\r\n const subscription = notificationRef.instance.isOpenChange.subscribe(() => {\r\n this.closeAlert(alert);\r\n subscription.unsubscribe();\r\n });\r\n }\r\n }\r\n}\r\n","import {Component} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-tooltip-content',\r\n templateUrl: './tooltip-content.component.html'\r\n})\r\nexport class TooltipContentComponent extends ContentBaseComponent {\r\n}\r\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { PaginationItemData } from '../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-pagination',\r\n templateUrl: './pagination.component.html'\r\n})\r\nexport class PaginationComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() hasSelect: boolean;\r\n @Input() idPrefix: string;\r\n @Input() classesContainer: string;\r\n @Input() totalItems: number;\r\n @Input() itemsPerPage: number;\r\n @Input() hasPrevious: boolean;\r\n @Input() hasNext: boolean;\r\n @Input() previousText: string;\r\n @Input() nextText: string;\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n @Input() currentPage = 1; // == currentPageindex + 1\r\n @Output() currentPageChange = new EventEmitter<number>();\r\n\r\n nPages: number;\r\n items: PaginationItemData[];\r\n\r\n readonly previousIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"self-center h-2.5 w-2.5 mr-2\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M54.87 71.77a2.5 2.5 0 010-3.54L106 17.07A10 10 0 1091.89 2.93L35.43 59.39a15 15 0 000 21.22l56.46 56.46A10 10 0 10106 122.93z\" fill=\"currentColor\" /></svg>';\r\n readonly nextIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"self-center h-2.5 w-2.5 ml-2\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M34 137.07a10 10 0 010-14.14l51.13-51.16a2.5 2.5 0 000-3.54L34 17.07A10 10 0 0148.11 2.93l56.46 56.46a15 15 0 010 21.22l-56.46 56.46a10 10 0 01-14.11 0z\" fill=\"currentColor\" /></svg>';\r\n readonly prefix = '<span class=\"sr-only\">Página </span>';\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.id) {\r\n throw new Error(`id is required`);\r\n }\r\n if (this.totalItems === undefined || this.totalItems === null) {\r\n throw new Error(`totalItems is required`);\r\n }\r\n if (!this.itemsPerPage === undefined || this.itemsPerPage === null) {\r\n throw new Error(`itemsPerPage is required`);\r\n }\r\n\r\n this.nPages = Math.ceil(this.totalItems / this.itemsPerPage);\r\n\r\n if (!this.currentPage || this.currentPage < 1 || this.currentPage > this.nPages) {\r\n this.currentPage = 1;\r\n setTimeout( () => this.currentPageChange.emit(this.currentPage));\r\n }\r\n\r\n if (!this.previousText) {\r\n this.previousText = 'Anterior';\r\n }\r\n if (!this.nextText) {\r\n this.nextText = 'Siguiente';\r\n }\r\n\r\n this.buildPages();\r\n }\r\n\r\n getSuffix(page: number): string {\r\n return page >= 0 && page * this.itemsPerPage < this.totalItems ?\r\n `<span class=\"sr-only\">: Página ${page + 1} con los resultados del ${page * this.itemsPerPage + 1} al ${this.getLastItemNumber(page)}</span>`\r\n : '';\r\n }\r\n\r\n getLastItemNumber(pageIndex: number): number {\r\n return Math.min((pageIndex + 1) * this.itemsPerPage, this.totalItems);\r\n }\r\n\r\n buildPages(): void {\r\n this.items = [];\r\n for (let i = 0; i < this.nPages; i++) {\r\n const item: PaginationItemData = {\r\n text: i + 1,\r\n active: ( (i + 1) === this.currentPage),\r\n routerLink: []\r\n };\r\n this.items.push(item);\r\n }\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : 'pagination-item';\r\n }\r\n\r\n getButtonId( index: number): string {\r\n return this.getIdPrefix() + (index === 0) ? '' : '-' + index;\r\n }\r\n\r\n changePage(current: number): void{\r\n this.currentPage = current;\r\n this.currentPageChange.emit(this.currentPage);\r\n for (let i = 0; i < this.items.length; i++) {\r\n const item = this.items[i];\r\n item.active = ((i + 1) === this.currentPage);\r\n }\r\n }\r\n\r\n previous(): void {\r\n if (this.currentPage > 1) {\r\n this.changePage(this.currentPage - 1);\r\n }\r\n }\r\n\r\n next(): void {\r\n if (this.currentPage < this.nPages) {\r\n this.changePage(this.currentPage + 1);\r\n }\r\n }\r\n\r\n getActiveItemText(): any {\r\n const activeItems = this.items.filter(item => item.active);\r\n return activeItems && activeItems.length > 0 ? activeItems[0].text : '';\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform, SecurityContext } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'innerHtml'\r\n})\r\nexport class InnerHtmlPipe implements PipeTransform {\r\n\r\n constructor(private sanitizer: DomSanitizer) { }\r\n\r\n transform(value: string): SafeHtml {\r\n return this.sanitizer.sanitize(SecurityContext.HTML, value);\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'externalHref'\r\n})\r\nexport class ExternalHrefPipe implements PipeTransform {\r\n\r\n /**\r\n * Asegura que un enlace externo sea correcto\r\n * @param href enlace\r\n */\r\n transform(href: string): string {\r\n let externalHref: string;\r\n if (href) {\r\n if (href.match('http(s)?://')) {\r\n externalHref = href;\r\n } else {\r\n externalHref = 'http://' + href;\r\n }\r\n } else {\r\n externalHref = '#';\r\n }\r\n return externalHref;\r\n }\r\n\r\n}\r\n","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, Output} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[desyAttributeChange]'\r\n})\r\nexport class AttributeChangeDirective implements OnDestroy {\r\n\r\n private changes: MutationObserver;\r\n\r\n @Input() attributesToCheck: string|string[];\r\n\r\n @Output()\r\n public desyAttributeChange = new EventEmitter();\r\n\r\n @Output()\r\n public desyAttributeChangeMutation = new EventEmitter();\r\n\r\n constructor(private elementRef: ElementRef) {\r\n const element = this.elementRef.nativeElement;\r\n\r\n this.changes = new MutationObserver((mutations: MutationRecord[]) => {\r\n mutations.forEach((mutation: MutationRecord) => {\r\n if (this.attributesToCheck) {\r\n const attrs = typeof (this.attributesToCheck) === 'string' ? [this.attributesToCheck] : this.attributesToCheck;\r\n if (attrs.findIndex(v => v === mutation.attributeName) >= 0) {\r\n this.desyAttributeChange.emit(this.elementRef.nativeElement.innerHTML);\r\n this.desyAttributeChangeMutation.emit(mutation);\r\n }\r\n }\r\n });\r\n }\r\n );\r\n\r\n this.changes.observe(element, {\r\n attributes: true,\r\n childList: false,\r\n characterData: false,\r\n subtree: false\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.changes.disconnect();\r\n }\r\n}\r\n","import {Directive, ElementRef, Input, OnChanges, SimpleChanges} from '@angular/core';\r\n@Directive({\r\n selector: '[desyInnerContent]'\r\n})\r\nexport class InnerContentDirective implements OnChanges {\r\n\r\n @Input('desyInnerContent') content: string;\r\n @Input() isHtml: boolean;\r\n @Input() deleteContentIfEmpty = true;\r\n\r\n constructor(private el: ElementRef) { }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.content) {\r\n if (this.isHtml) {\r\n this.el.nativeElement.innerHTML = this.content;\r\n } else {\r\n this.el.nativeElement.innerText = this.content;\r\n }\r\n } else if (this.deleteContentIfEmpty) {\r\n this.el.nativeElement.innerText = null;\r\n }\r\n }\r\n\r\n}\r\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[desyClickOutside]'\r\n})\r\nexport class ClickOutsideDirective {\r\n\r\n @Input('desyClickOutside') active = true;\r\n @Output() clickOutside = new EventEmitter<void>();\r\n @Input() desyClickOutsideElem: Element;\r\n\r\n constructor(private hostElementRef: ElementRef) { }\r\n\r\n @HostListener('document:click', ['$event.target'])\r\n public onClick(target): void {\r\n let clickedInside;\r\n if (this.desyClickOutsideElem) {\r\n clickedInside = this.desyClickOutsideElem.contains(target);\r\n } else {\r\n clickedInside = (this.hostElementRef.nativeElement as Element).contains(target);\r\n }\r\n if (!clickedInside && this.active) {\r\n this.clickOutside.emit();\r\n }\r\n }\r\n\r\n}\r\n","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, Output} from '@angular/core';\r\n\r\n/**\r\n * Permite comprobar cuándo se produce un cambio en el contenido de un elemento.\r\n * La propia directiva emite el html interno del elemento en formato string, mientras que desyContentChangeMutation emite los cambios.\r\n */\r\n@Directive({\r\n selector: '[desyContentChange]'\r\n})\r\nexport class ContentChangeDirective implements OnDestroy {\r\n\r\n private changes: MutationObserver;\r\n\r\n @Input() observeProperties: { attributes: boolean, childList: boolean, characterData: boolean, subtree: boolean } = {\r\n attributes: false,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n };\r\n\r\n @Output()\r\n public desyContentChange = new EventEmitter<ElementRef>();\r\n\r\n @Output()\r\n public desyContentChangeMutation = new EventEmitter();\r\n\r\n constructor(private elementRef: ElementRef) {\r\n const element = this.elementRef.nativeElement;\r\n\r\n this.changes = new MutationObserver((mutations: MutationRecord[]) => {\r\n mutations.forEach((mutation: MutationRecord) => {\r\n this.desyContentChange.emit(this.elementRef);\r\n this.desyContentChangeMutation.emit(mutation);\r\n });\r\n }\r\n );\r\n\r\n this.changes.observe(element, this.observeProperties);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.changes.disconnect();\r\n }\r\n}\r\n","import {AfterViewInit, ContentChildren, Directive, ElementRef, EventEmitter, OnDestroy, Output, QueryList} from '@angular/core';\r\n\r\n/**\r\n * Emite un evento cuando el contenido de un elemento esté vacío\r\n * El contenido marcado con #desyContentEmptyIgnore será ignorado\r\n *\r\n * NOTA: tener en cuenta que los eventos se emiten después de generarse la vista, por lo que si al gestionar el evento se realizan\r\n * cambios que afectan a la template, conviene forzar la detección de cambios. (Ejemplo de esto en el icono de NotificationComponent)\r\n */\r\n@Directive({\r\n selector: '[desyContentEmpty]'\r\n})\r\nexport class ContentEmptyDirective implements OnDestroy, AfterViewInit {\r\n\r\n @Output()\r\n public desyContentEmpty = new EventEmitter();\r\n\r\n @Output()\r\n public desyContentNotEmpty = new EventEmitter();\r\n\r\n @ContentChildren('desyContentEmptyIgnore', {read: ElementRef}) contentsToIgnore: QueryList<ElementRef>;\r\n\r\n private changes: MutationObserver;\r\n private lastWasEmpty = false;\r\n private viewInit = false;\r\n\r\n constructor(private elementRef: ElementRef) {\r\n const element = this.elementRef.nativeElement;\r\n this.changes = new MutationObserver((mutations: MutationRecord[]) => mutations.forEach(() => this.checkContent()));\r\n this.changes.observe(element, {\r\n attributes: false,\r\n childList: true,\r\n characterData: true,\r\n subtree: false\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.viewInit) {\r\n this.viewInit = true;\r\n this.checkContent();\r\n }\r\n }\r\n\r\n /**\r\n * Comprueba el contenido del elemento una vez se haya inicializado la vista. Si se detecta que el elemento está vacío, las comprobaciones\r\n * sucesivas que tampoco detecten contenido no emitirán evento.\r\n */\r\n checkContent(): void {\r\n if (this.viewInit) {\r\n const childs: NodeListOf<ChildNode> = this.elementRef.nativeElement.childNodes;\r\n let hasContent = false;\r\n for (let i = 0; i < childs.length && !hasContent; i++) {\r\n const item = childs.item(i);\r\n if (item.nodeType === Node.TEXT_NODE && item.textContent.length > 0) {\r\n hasContent = true;\r\n } else if ((item.nodeType === Node.ELEMENT_NODE || item.nodeType === Node.CDATA_SECTION_NODE) && this.isContentNode(item)) {\r\n hasContent = true;\r\n }\r\n }\r\n\r\n if (hasContent) {\r\n if (this.lastWasEmpty) {\r\n this.desyContentNotEmpty.emit(this.elementRef.nativeElement.innerHTML);\r\n }\r\n this.lastWasEmpty = false;\r\n } else {\r\n if (!this.lastWasEmpty) {\r\n this.desyContentEmpty.emit(this.elementRef.nativeElement.innerHTML);\r\n }\r\n this.lastWasEmpty = true;\r\n }\r\n }\r\n }\r\n\r\n private isContentNode(elem: Node): boolean {\r\n let contentNode = true;\r\n if (this.contentsToIgnore && this.contentsToIgnore.length > 0) {\r\n contentNode = !this.contentsToIgnore.find(ignoreElem => ignoreElem.nativeElement === elem);\r\n }\r\n return contentNode;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.changes.disconnect();\r\n }\r\n}\r\n","import {\r\n ComponentFactory,\r\n ComponentFactoryResolver,\r\n Directive,\r\n Injector,\r\n Input, OnChanges,\r\n SimpleChanges, TemplateRef,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport {ContentBaseComponent} from '../components';\r\n\r\n/**\r\n * Permite introducir contenido de forma dinámica en una posición determinada desde:\r\n * - component: Componente existente de tipo ContentBase\r\n * - html: texto html en formato string\r\n * - text: texto plano en formato string\r\n */\r\n@Directive({\r\n selector: '[desyCustomInnerContent]'\r\n})\r\nexport class CustomInnerContentDirective implements OnChanges {\r\n\r\n @Input() desyCustomInnerContent: { component?: any|ContentBaseComponent, template?: TemplateRef<any>, html?: string, text?: string };\r\n\r\n private factory: ComponentFactory<ContentBaseComponent>;\r\n\r\n constructor(private viewContainerRef: ViewContainerRef, private resolver: ComponentFactoryResolver, private injector: Injector) {\r\n this.factory = this.resolver.resolveComponentFactory(ContentBaseComponent);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.viewContainerRef.clear();\r\n if (this.desyCustomInnerContent.component && this.desyCustomInnerContent.component instanceof ContentBaseComponent) {\r\n\r\n // Se crea la vista embebida basándose en el contenido del ContentBase indicado.\r\n this.viewContainerRef.createEmbeddedView(this.desyCustomInnerContent.component.getContent());\r\n } else if (this.desyCustomInnerContent.template) {\r\n\r\n // Se crea la vista embebida utilizando directamente el template.\r\n this.viewContainerRef.createEmbeddedView(this.desyCustomInnerContent.template);\r\n } else if (this.desyCustomInnerContent.html) {\r\n\r\n // Se carga el contenido en un div temporal.\r\n const tmpWrapper = document.createElement('div');\r\n tmpWrapper.innerHTML = this.desyCustomInnerContent.html;\r\n\r\n // Los nodos hijos del div se proyectan dentro de un componente ContentBase.\r\n const nodeList = [];\r\n tmpWrapper.childNodes.forEach(node => nodeList.push(node));\r\n const componentRef = this.factory.create(this.injector, [ nodeList ]);\r\n\r\n // Finalmente se crea la vista embebida basándose en el contenido del ContentBase creado.\r\n // Se podría hacer con un this.viewContainerRef.createComponent(), pero así se evita el tag envolvente del componente en el DOM\r\n this.viewContainerRef.createEmbeddedView(componentRef.instance.getContent());\r\n } else if (this.desyCustomInnerContent.text) {\r\n\r\n // Se carga el contenido en un nodo de texto\r\n const textNode = document.createTextNode(this.desyCustomInnerContent.text);\r\n\r\n // El nodo de texto se proyecta dentro de un componente ContentBase\r\n const componentRef = this.factory.create(this.injector, [[ textNode ]]);\r\n\r\n // Finalmente se crea la vista embebida basándose en el contenido del ContentBase creado.\r\n // Se podría hacer con un this.viewContainerRef.createComponent(), pero así se evita el tag envolvente del componente en el DOM\r\n this.viewContainerRef.createEmbeddedView(componentRef.instance.getContent());\r\n }\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\n\r\n// components\r\nimport {\r\n AccessibilityComponent,\r\n ContentBaseComponent,\r\n TextOrHtmlRequiredComponent,\r\n AccessibilityAndTextOrHtmlRequiredComponent,\r\n AccessibilityAndContentRequiredComponent\r\n} from './components';\r\n\r\n// pipes\r\nimport { InnerHtmlPipe } from './pipes/inner-html.pipe';\r\nimport { MakeHtmlListPipe } from './pipes/make-html-list.pipe';\r\nimport { ExternalHrefPipe } from './pipes/external-href.pipe';\r\n\r\n// directives\r\nimport { AttributeChangeDirective } from './directives/attribute-change.directive';\r\nimport { InnerContentDirective } from './directives/inner-content.directive';\r\nimport { ClickOutsideDirective } from './directives/click-outside.directive';\r\nimport { ContentChangeDirective } from './directives/content-change.directive';\r\nimport { ContentEmptyDirective } from './directives/content-empty.directive';\r\nimport { CustomInnerContentDirective } from './directives/custom-inner-content.directive';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n // components\r\n AccessibilityComponent,\r\n ContentBaseComponent,\r\n TextOrHtmlRequiredComponent,\r\n AccessibilityAndTextOrHtmlRequiredComponent,\r\n AccessibilityAndContentRequiredComponent,\r\n\r\n // pipes\r\n InnerHtmlPipe,\r\n MakeHtmlListPipe,\r\n ExternalHrefPipe,\r\n\r\n // directives\r\n AttributeChangeDirective,\r\n InnerContentDirective,\r\n ClickOutsideDirective,\r\n ContentChangeDirective,\r\n ContentEmptyDirective,\r\n CustomInnerContentDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n ],\r\n exports: [\r\n RouterModule,\r\n\r\n // components\r\n AccessibilityComponent,\r\n ContentBaseComponent,\r\n TextOrHtmlRequiredComponent,\r\n AccessibilityAndTextOrHtmlRequiredComponent,\r\n AccessibilityAndContentRequiredComponent,\r\n\r\n // pipes\r\n InnerHtmlPipe,\r\n MakeHtmlListPipe,\r\n ExternalHrefPipe,\r\n\r\n // directives\r\n AttributeChangeDirective,\r\n InnerContentDirective,\r\n ClickOutsideDirective,\r\n ContentChangeDirective,\r\n ContentEmptyDirective,\r\n CustomInnerContentDirective,\r\n ]\r\n})\r\nexport class SharedModule { }\r\n","import { Component } from '@angular/core';\r\nimport { ControlContainer, NgForm } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'desy-template-driven-wrapper',\r\n templateUrl: './template-driven-wrapper.component.html',\r\n providers: [ { provide: ControlContainer, useExisting: NgForm, } ]\r\n})\r\nexport class TemplateDrivenWrapperComponent {\r\n}\r\n","// componentes\r\nimport { NgModule } from '@angular/core';\r\nimport { IconComponent } from './components/icon/icon.component';\r\nimport { ContentComponent } from './components/content/content.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { NgxTippyModule } from 'ngx-tippy-wrapper';\r\nimport { TitleComponent } from './components/title/title.component';\r\nimport { DescriptionComponent } from './components/description/description.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n IconComponent,\r\n ContentComponent,\r\n DescriptionComponent,\r\n TitleComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n NgxTippyModule\r\n ],\r\n exports: [\r\n IconComponent,\r\n ContentComponent,\r\n DescriptionComponent,\r\n TitleComponent\r\n ]\r\n})\r\n\r\nexport class DesyCommonsModule { }\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { SharedModule } from '../shared/shared.module';\r\n// componentes\r\nimport { TemplateDrivenWrapperComponent } from './components/template-driven-wrapper/template-driven-wrapper.component';\r\nimport { FormFieldComponent } from './components/form-field/form-field.component';\r\nimport { HintComponent } from './components/hint/hint.component';\r\nimport { LabelComponent } from './components/label/label.component';\r\nimport { ErrorMessageComponent } from './components/error-message/error-message.component';\r\nimport { FieldsetComponent } from './components/fieldset/fieldset.component';\r\nimport { LegendComponent } from './components/fieldset/legend/legend.component';\r\nimport { TextareaComponent } from './components/textarea/textarea.component';\r\nimport { CharacterCountComponent } from './components/character-count/character-count.component';\r\nimport { InputComponent } from './components/input/input.component';\r\nimport { SelectComponent } from './components/select/select.component';\r\nimport { FileUploadComponent } from './components/file-upload/file-upload.component';\r\nimport { InputGroupComponent } from './components/input-group/input-group.component';\r\nimport { RadiosComponent } from './components/radios/radios.component';\r\nimport { RadioItemComponent } from './components/radios/radio-item/radio-item.component';\r\nimport { CheckboxesComponent } from './components/checkboxes/checkboxes.component';\r\nimport { CheckboxItemComponent } from './components/checkboxes/checkbox-item/checkbox-item.component';\r\nimport { DateInputComponent } from './components/date-input/date-input.component';\r\nimport { SearchBarComponent} from './components/search-bar/search-bar.component';\r\nimport { OptionComponent } from './components/select/option/option.component';\r\nimport { DateInputDayComponent } from './components/date-input/date-input-day/date-input-day.component';\r\nimport { DateInputMonthComponent } from './components/date-input/date-input-month/date-input-month.component';\r\nimport { DateInputYearComponent } from './components/date-input/date-input-year/date-input-year.component';\r\n\r\n// directivas\r\nimport { ConditionDirective } from './directives/condition.directive';\r\n\r\nimport {DesyCommonsModule} from '../desy-commons/desy-commons.module';\r\nimport { InputGroupItemComponent } from './components/input-group/input-group-item/input-group-item.component';\r\nimport { DateInputItemComponent } from './components/date-input/date-input-item/date-input-item.component';\r\nimport { InputGroupDividerComponent } from './components/input-group/input-group-divider/input-group-divider.component';\r\nimport { DateInputDividerComponent } from './components/date-input/date-input-divider/date-input-divider.component';\r\nimport { InputGroupInputComponent } from './components/input-group/input-group-input/input-group-input.component';\r\nimport { InputGroupSelectComponent } from './components/input-group/input-group-select/input-group-select.component';\r\nimport { OptionGroupComponent } from './components/select/option-group/option-group.component';\r\nimport { SelectItemComponent } from './components/select/select-item/select-item.component';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n TemplateDrivenWrapperComponent,\r\n FormFieldComponent,\r\n HintComponent,\r\n LabelComponent,\r\n ErrorMessageComponent,\r\n FieldsetComponent,\r\n LegendComponent,\r\n TextareaComponent,\r\n CharacterCountComponent,\r\n InputComponent,\r\n SelectComponent,\r\n FileUploadComponent,\r\n InputGroupComponent,\r\n InputGroupItemComponent,\r\n DateInputItemComponent,\r\n InputGroupDividerComponent,\r\n DateInputDividerComponent,\r\n InputGroupInputComponent,\r\n InputGroupSelectComponent,\r\n RadiosComponent,\r\n RadioItemComponent,\r\n CheckboxesComponent,\r\n CheckboxItemComponent,\r\n DateInputComponent,\r\n SearchBarComponent,\r\n OptionComponent,\r\n OptionGroupComponent,\r\n SelectItemComponent,\r\n DateInputDayComponent,\r\n DateInputMonthComponent,\r\n DateInputYearComponent,\r\n\r\n ConditionDirective,\r\n\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n SharedModule,\r\n DesyCommonsModule,\r\n ],\r\n exports: [\r\n HintComponent,\r\n LabelComponent,\r\n ErrorMessageComponent,\r\n FieldsetComponent,\r\n LegendComponent,\r\n TextareaComponent,\r\n CharacterCountComponent,\r\n InputComponent,\r\n SelectComponent,\r\n FileUploadComponent,\r\n InputGroupComponent,\r\n InputGroupDividerComponent,\r\n DateInputDividerComponent,\r\n InputGroupInputComponent,\r\n InputGroupSelectComponent,\r\n RadiosComponent,\r\n RadioItemComponent,\r\n CheckboxesComponent,\r\n CheckboxItemComponent,\r\n DateInputComponent,\r\n SearchBarComponent,\r\n OptionComponent,\r\n OptionGroupComponent,\r\n DateInputDayComponent,\r\n DateInputMonthComponent,\r\n DateInputYearComponent,\r\n\r\n ConditionDirective\r\n ]\r\n})\r\nexport class DesyFormsModule { }\r\n","import {\r\n AfterContentInit, ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {ContentComponent} from '../../../desy-commons/components/content/content.component';\r\nimport {IconComponent} from '../../../desy-commons/components/icon/icon.component';\r\nimport {IconData} from '../../../desy-commons/interfaces';\r\nimport {TooltipContentComponent} from './tooltip-content/tooltip-content.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-tooltip',\r\n templateUrl: './tooltip.component.html'\r\n})\r\nexport class TooltipComponent extends AccessibilityComponent implements OnChanges, AfterContentInit {\r\n\r\n static readonly KEY_CODE_ESC = 'Escape';\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(IconComponent) iconComponent: IconComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TooltipContentComponent) tooltipContentComponent: TooltipContentComponent;\r\n\r\n @ViewChild('tooltipContent', { read: ElementRef, static: true }) tooltipContent: ElementRef;\r\n\r\n @Input() id: string;\r\n @Input() text: string;\r\n @Input() html: string;\r\n @Input() complex: boolean;\r\n @Input() classes: string;\r\n @Input() classesTooltip: string;\r\n @Input() icon: IconData;\r\n @Input() caller: TemplateRef<any>;\r\n\r\n tippyProperties: any;\r\n hasContent = true;\r\n hasIconComponentContent = true;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngOnChanges(changes?: SimpleChanges): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n const contentTooltip = this.tooltipContent.nativeElement as HTMLElement;\r\n this.tippyProperties = {\r\n placement: 'top',\r\n inlinePositioning: true,\r\n content: contentTooltip,\r\n allowHTML: true, // Make sure you are sanitizing any user data if rendering HTML to prevent XSS attacks.\r\n trigger: 'mouseenter focus',\r\n hideOnClick: false,\r\n theme: '',\r\n plugins: [{\r\n name: 'hideOnEsc',\r\n defaultValue: true,\r\n fn({hide}): any {\r\n\r\n function onKeyDown(event: KeyboardEvent): void {\r\n if (event.key === TooltipComponent.KEY_CODE_ESC) {\r\n hide();\r\n }\r\n }\r\n\r\n return {\r\n onShow(): void {\r\n document.addEventListener('keydown', onKeyDown);\r\n },\r\n onHide(): void {\r\n document.removeEventListener('keydown', onKeyDown);\r\n },\r\n };\r\n },\r\n }],\r\n role: 'tooltip',\r\n aria: {\r\n content: this.complex ? 'describedby' : 'labelledby',\r\n },\r\n };\r\n }\r\n\r\n getIdButton(): string {\r\n return this.id + '-button';\r\n }\r\n\r\n getIdTooltip(): string {\r\n return this.id + '-tooltip';\r\n }\r\n\r\n handleEmptyContent(isEmpty: boolean): void {\r\n this.hasContent = !isEmpty;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n handleEmptyIconContent(isEmpty: boolean): void {\r\n this.hasIconComponentContent = !isEmpty;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n handleEmptyTooltipContent(): void {\r\n throw Error('caller attribute or inner desy-tooltip-content component are required');\r\n }\r\n\r\n getMainContent(): string {\r\n let content;\r\n if (this.html) {\r\n content = this.html;\r\n } else if (this.text) {\r\n content = `<p>${this.text}</p>`;\r\n }\r\n return content;\r\n }\r\n\r\n getIconContent(icon: IconData): string {\r\n let iconContent;\r\n if (icon.html) {\r\n iconContent = this.icon.html;\r\n } else if (icon.type === 'info') {\r\n iconContent = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"w-4 h-4 text-primary-base\" role=\"img\" aria-label=\"Información\"><path d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zm7.5 105a7.5 7.5 0 01-15 0V70a7.5 7.5 0 0115 0zM70 50a10 10 0 1110-10 10 10 0 01-10 10z\" fill=\"currentColor\"/></svg>';\r\n } else if (icon.type === 'alert') {\r\n iconContent = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"w-4 h-4 text-alert-base\" role=\"img\" aria-label=\"Alerta\"><path d=\"M138.42 118.29l-55-110a15 15 0 00-26.84 0l-55 110A15 15 0 0015 140h110a15 15 0 0013.42-21.71zM62.5 50a7.5 7.5 0 0115 0v30a7.5 7.5 0 01-15 0zm7.5 70a10 10 0 1110-10 10 10 0 01-10 10z\" fill=\"currentColor\"/></svg>';\r\n } else {\r\n iconContent = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"w-4 h-4 text-primary-base\" role=\"img\" aria-label=\"Ayuda\"><path d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zm0 117.51a10 10 0 1110-10 10 10 0 01-10 10zm9.17-39.08a2.5 2.5 0 00-1.67 2.36v1.71a7.5 7.5 0 01-15 0v-10A7.5 7.5 0 0170 65a12.5 12.5 0 10-12.5-12.5 7.5 7.5 0 01-15 0 27.5 27.5 0 1136.67 25.93z\" fill=\"currentColor\"/></svg>';\r\n }\r\n return iconContent;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SharedModule } from '../shared/shared.module';\r\n\r\nimport { AlertComponent } from './components/alert/alert.component';\r\nimport { AccordionComponent } from './components/accordion/accordion.component';\r\nimport { AccordionItemComponent } from './components/accordion/accordion-item/accordion-item.component';\r\nimport { SpinnerComponent } from './components/spinner/spinner.component';\r\nimport { DetailsComponent } from './components/details/details.component';\r\nimport { CollapsibleComponent } from './components/collapsible/collapsible.component';\r\nimport { DescriptionListComponent } from './components/description-list/description-list.component';\r\nimport { ItemComponent } from './components/item/item.component';\r\nimport { MediaObjectComponent } from './components/media-object/media-object.component';\r\nimport { StatusComponent } from './components/status/status.component';\r\nimport { StatusItemComponent } from './components/status-item/status-item.component';\r\nimport { DesyFormsModule } from '../desy-forms/desy-forms.module';\r\nimport { TabsComponent } from './components/tabs/tabs.component';\r\nimport { TooltipComponent } from './components/tooltip/tooltip.component';\r\nimport { DesyCommonsModule } from '../desy-commons/desy-commons.module';\r\nimport { NgxTippyModule } from 'ngx-tippy-wrapper';\r\nimport { TooltipContentComponent } from './components/tooltip/tooltip-content/tooltip-content.component';\r\nimport { DescriptionItemComponent } from './components/description-list/description-item/description-item.component';\r\nimport { TermComponent } from './components/description-list/term/term.component';\r\nimport { DefinitionComponent } from './components/description-list/definition/definition.component';\r\nimport { ItemContentBottomComponent } from './components/item/item-content-bottom/item-content-bottom.component';\r\nimport { ItemContentRightComponent } from './components/item/item-content-right/item-content-right.component';\r\nimport { ItemItemComponent } from './components/item/item-item/item-item.component';\r\nimport { AccordionHeaderComponent } from './components/accordion/accordion-header/accordion-header.component';\r\nimport { PanelComponent } from './components/tabs/panel/panel.component';\r\nimport { TabItemComponent } from './components/tabs/tab-item/tab-item.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AlertComponent,\r\n AccordionComponent,\r\n AccordionHeaderComponent,\r\n AccordionItemComponent,\r\n SpinnerComponent,\r\n DetailsComponent,\r\n CollapsibleComponent,\r\n DescriptionListComponent,\r\n DescriptionItemComponent,\r\n TermComponent,\r\n DefinitionComponent,\r\n ItemComponent,\r\n ItemContentBottomComponent,\r\n ItemContentRightComponent,\r\n ItemItemComponent,\r\n MediaObjectComponent,\r\n StatusComponent,\r\n StatusItemComponent,\r\n TabsComponent,\r\n TooltipComponent,\r\n TooltipContentComponent,\r\n PanelComponent,\r\n TabItemComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n DesyFormsModule,\r\n DesyCommonsModule,\r\n NgxTippyModule\r\n ],\r\n exports: [\r\n AlertComponent,\r\n AccordionComponent,\r\n AccordionHeaderComponent,\r\n AccordionItemComponent,\r\n SpinnerComponent,\r\n DetailsComponent,\r\n CollapsibleComponent,\r\n DescriptionListComponent,\r\n DescriptionItemComponent,\r\n TermComponent,\r\n DefinitionComponent,\r\n ItemComponent,\r\n ItemContentBottomComponent,\r\n ItemContentRightComponent,\r\n ItemItemComponent,\r\n MediaObjectComponent,\r\n StatusComponent,\r\n StatusItemComponent,\r\n TabsComponent,\r\n TooltipComponent,\r\n TooltipContentComponent,\r\n PanelComponent,\r\n TabItemComponent,\r\n ]\r\n})\r\nexport class DesyViewsModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DesyViewsModule } from '../desy-views/desy-views.module';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { NgxTippyModule } from 'ngx-tippy-wrapper';\r\n\r\n// componentes\r\nimport { ButtonComponent } from './components/button/button.component';\r\nimport { ButtonLoaderComponent } from './components/button-loader/button-loader.component';\r\nimport { PillComponent } from './components/pill/pill.component';\r\nimport { DropdownComponent } from './components/dropdown/dropdown.component';\r\nimport { ListboxComponent } from './components/listbox/listbox.component';\r\nimport { ListboxItemComponent } from './components/listbox/listbox-item/listbox-item.component';\r\nimport { ListboxLabelComponent } from './components/listbox/listbox-label/listbox-label.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n ButtonComponent,\r\n ButtonLoaderComponent,\r\n DropdownComponent,\r\n ListboxComponent,\r\n PillComponent,\r\n\r\n ListboxItemComponent,\r\n ListboxLabelComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n DesyViewsModule,\r\n NgxTippyModule\r\n ],\r\n exports: [\r\n ButtonComponent,\r\n ButtonLoaderComponent,\r\n DropdownComponent,\r\n ListboxComponent,\r\n PillComponent,\r\n\r\n ListboxItemComponent,\r\n ListboxLabelComponent\r\n ]\r\n})\r\nexport class DesyButtonsModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\nimport { DesyButtonsModule } from '../desy-buttons/desy-buttons.module';\r\n\r\n// components\r\nimport { ModalComponent } from './components/modal/modal.component';\r\nimport { ModalButtonPrimaryComponent } from './components/modal/modal-button-primary/modal-button-primary.component';\r\nimport { ModalButtonSecondaryComponent } from './components/modal/modal-button-secondary/modal-button-secondary.component';\r\nimport { DialogComponent } from './components/dialog/dialog.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n ModalComponent,\r\n ModalButtonPrimaryComponent,\r\n ModalButtonSecondaryComponent,\r\n DialogComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n A11yModule,\r\n SharedModule,\r\n DesyButtonsModule\r\n ],\r\n exports: [\r\n ModalComponent,\r\n ModalButtonPrimaryComponent,\r\n ModalButtonSecondaryComponent,\r\n DialogComponent\r\n ],\r\n})\r\nexport class DesyModalsModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { DesyCommonsModule } from '../desy-commons/desy-commons.module';\r\n\r\nimport { BreadcrumbsComponent } from './components/breadcrumbs/breadcrumbs.component';\r\nimport { BreadcrumbsItemComponent } from './components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component';\r\nimport { ErrorSummaryComponent } from './components/error-summary/error-summary.component';\r\nimport { ErrorSummaryItemComponent } from './components/error-summary/error-summary-item/error-summary-item.component';\r\nimport { MenuHorizontalComponent } from './components/menu-horizontal/menu-horizontal.component';\r\nimport { MenuHorizontalItemComponent } from './components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component';\r\nimport { MenuVerticalComponent } from './components/menu-vertical/menu-vertical.component';\r\nimport { NavComponent } from './components/nav/nav.component';\r\nimport { SkipLinkComponent } from './components/skip-link/skip-link.component';\r\nimport { HeaderComponent } from './components/header/header.component';\r\nimport { HeaderSubnavComponent } from './components/header/header-subnav/header-subnav.component';\r\nimport { HeaderNavigationComponent } from './components/header/header-navigation/header-navigation.component';\r\nimport { HeaderDropdownComponent } from './components/header/header-dropdown/header-dropdown.component';\r\nimport { HeaderOffcanvasButtonComponent } from './components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component';\r\nimport { HeaderOffcanvasComponent } from './components/header/header-offcanvas/header-offcanvas.component';\r\nimport { NotificationComponent } from './components/notification/notification.component';\r\nimport { NotificationItemComponent } from './components/notification/notification-item/notification-item.component';\r\nimport { FooterComponent } from './components/footer/footer.component';\r\nimport { MenubarComponent } from './components/menubar/menubar.component';\r\nimport { MenubaritemDirective } from './components/menubar/directives/menubaritem.directive';\r\nimport { MenubarItemComponent } from './components/menubar/components/menubar-item/menubar-item.component';\r\nimport { MenubarSubitemComponent } from './components/menubar/components/menubar-subitem/menubar-subitem.component';\r\nimport { MenubarSubsubitemComponent } from './components/menubar/components/menubar-subsubitem/menubar-subsubitem.component';\r\nimport { MenubarLabelComponent } from './components/menubar/components/menubar-label/menubar-label.component';\r\nimport { NavItemComponent } from './components/nav/nav-item/nav-item.component';\r\nimport { MenuVerticalItemComponent } from './components/menu-vertical/menu-vertical-item/menu-vertical-item.component';\r\nimport { MenuVerticalItemSubComponent } from './components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component';\r\nimport { MenuVerticalItemSubItemComponent } from './components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component';\r\nimport { HeaderOffcanvasCloseButtonComponent } from './components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component';\r\nimport { HeaderNavigationItemComponent } from './components/header/header-navigation/header-navigation-item/header-navigation-item.component';\r\nimport { FooterMetaComponent } from './components/footer/footer-meta/footer-meta.component';\r\nimport { FooterMetaItemComponent } from './components/footer/footer-meta/footer-meta-item/footer-meta-item.component';\r\nimport { FooterNavigationComponent } from './components/footer/footer-navigation/footer-navigation.component';\r\nimport { FooterNavigationItemComponent } from './components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n BreadcrumbsComponent,\r\n BreadcrumbsItemComponent,\r\n ErrorSummaryComponent,\r\n ErrorSummaryItemComponent,\r\n FooterComponent,\r\n FooterMetaComponent,\r\n FooterMetaItemComponent,\r\n FooterNavigationComponent,\r\n FooterNavigationItemComponent,\r\n HeaderComponent,\r\n HeaderSubnavComponent,\r\n HeaderNavigationComponent,\r\n HeaderNavigationItemComponent,\r\n HeaderDropdownComponent,\r\n HeaderOffcanvasButtonComponent,\r\n HeaderOffcanvasComponent,\r\n HeaderOffcanvasCloseButtonComponent,\r\n MenuHorizontalComponent,\r\n MenuHorizontalItemComponent,\r\n MenuVerticalComponent,\r\n MenuVerticalItemComponent,\r\n MenuVerticalItemSubComponent,\r\n MenuVerticalItemSubItemComponent,\r\n MenubarComponent,\r\n MenubarLabelComponent,\r\n MenubarItemComponent,\r\n MenubarSubitemComponent,\r\n MenubarSubsubitemComponent,\r\n NavComponent,\r\n NotificationComponent,\r\n NotificationItemComponent,\r\n SkipLinkComponent,\r\n NavItemComponent,\r\n\r\n MenubaritemDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n DesyCommonsModule\r\n ],\r\n exports: [\r\n BreadcrumbsComponent,\r\n BreadcrumbsItemComponent,\r\n ErrorSummaryComponent,\r\n ErrorSummaryItemComponent,\r\n FooterComponent,\r\n FooterMetaComponent,\r\n FooterMetaItemComponent,\r\n FooterNavigationComponent,\r\n FooterNavigationItemComponent,\r\n HeaderComponent,\r\n HeaderSubnavComponent,\r\n HeaderNavigationComponent,\r\n HeaderNavigationItemComponent,\r\n HeaderDropdownComponent,\r\n HeaderOffcanvasComponent,\r\n HeaderOffcanvasButtonComponent,\r\n HeaderOffcanvasCloseButtonComponent,\r\n MenuHorizontalComponent,\r\n MenuHorizontalItemComponent,\r\n MenuVerticalComponent,\r\n MenuVerticalItemComponent,\r\n MenuVerticalItemSubComponent,\r\n MenuVerticalItemSubItemComponent,\r\n MenubarComponent,\r\n MenubarLabelComponent,\r\n MenubarItemComponent,\r\n MenubarSubitemComponent,\r\n MenubarSubsubitemComponent,\r\n NavComponent,\r\n NotificationComponent,\r\n NotificationItemComponent,\r\n NavItemComponent,\r\n SkipLinkComponent\r\n ]\r\n})\r\nexport class DesyNavModule { }\r\n","import { Directive, ElementRef, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[desyFocusClickedCell]'\r\n})\r\nexport class FocusClickedCellDirective {\r\n\r\n constructor(private el: ElementRef) {}\r\n\r\n @HostListener('click')\r\n onClick(): void {\r\n const hostElem = this.el.nativeElement; // la tabla - offsetParent\r\n const elemntsFocus = hostElem.offsetParent.querySelectorAll('[tabindex]'); // buscamos todos que pueden tener tabindex\r\n for (const iterator of elemntsFocus) {\r\n iterator.setAttribute('tabindex', '-1'); // se les quita\r\n }\r\n this.activeTabindex();\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n manageArrows(event): void {\r\n if (event.code === 'ArrowDown' || event.code === 'ArrowUp' || event.code === 'ArrowRight' || event.code === 'ArrowLeft'){\r\n let next = null;\r\n if (event.code === 'ArrowDown' || event.code === 'ArrowUp'){\r\n let tr = null;\r\n if (event.code === 'ArrowDown') {\r\n tr = this.el.nativeElement.parentNode.nextElementSibling;\r\n } else if (event.code === 'ArrowUp') {\r\n tr = this.el.nativeElement.parentNode.previousElementSibling;\r\n }\r\n\r\n next = tr ? tr.children[this.findIndex()] : null;\r\n event.preventDefault();\r\n }\r\n\r\n if (event.code === 'ArrowRight' || event.code === 'ArrowLeft') {\r\n next = this.el.nativeElement;\r\n do {\r\n if (event.code === 'ArrowRight') {\r\n next = next.nextElementSibling;\r\n } else if (event.code === 'ArrowLeft') {\r\n next = next.previousElementSibling;\r\n }\r\n } while (next && !next.getAttribute('tabindex'));\r\n }\r\n\r\n if (next && next.getAttribute('tabindex')){\r\n this.inactiveTabindex();\r\n next.setAttribute('tabindex', '0');\r\n next.focus();\r\n }\r\n }\r\n }\r\n\r\n private activeTabindex(): void {\r\n this.el.nativeElement.setAttribute('tabindex', '0');\r\n }\r\n\r\n private inactiveTabindex(): void {\r\n this.el.nativeElement.setAttribute('tabindex', '-1');\r\n }\r\n\r\n private findIndex(): number {\r\n const mynode = this.el.nativeElement;\r\n const parentNode = this.el.nativeElement.parentNode;\r\n let index = -1;\r\n for (let i = 0; i < parentNode.children.length; i++) {\r\n const otherNode = parentNode.children[i];\r\n if (mynode.isEqualNode(otherNode)){\r\n index = i;\r\n break;\r\n }\r\n }\r\n return index;\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { DesyFormsModule } from '../desy-forms/desy-forms.module';\r\n\r\nimport { TableComponent } from './components/table/table.component';\r\nimport { TableAdvancedComponent } from './components/table-advanced/table-advanced.component';\r\nimport { FocusClickedCellDirective } from './directives/focus-clicked-cell.directive';\r\nimport { TableCellComponent } from './components/table/components/table-cell.component';\r\nimport { TableHeaderComponent } from './components/table/components/table-header.component';\r\nimport { TableRowComponent } from './components/table/components/table-row.component';\r\nimport { TableCaptionComponent } from './components/table/components/table-caption.component';\r\nimport { TableAdvancedHeaderComponent } from './components/table-advanced/components/table-advanced-header.component';\r\nimport { TableAdvancedHeaderCellComponent } from './components/table-advanced/components/table-advanced-header-cell.component';\r\nimport { TableAdvancedRowComponent } from './components/table-advanced/components/table-advanced-row.component';\r\nimport { CellDirective } from './directives/cell.directive';\r\nimport { RowDirective } from './directives/row.directive';\r\nimport {TableAdvancedRowCellComponent} from './components/table-advanced/components/table-advanced-row-cell.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n TableComponent,\r\n TableCaptionComponent,\r\n TableCellComponent,\r\n TableHeaderComponent,\r\n TableRowComponent,\r\n TableAdvancedComponent,\r\n TableAdvancedHeaderComponent,\r\n TableAdvancedHeaderCellComponent,\r\n TableAdvancedRowComponent,\r\n TableAdvancedRowCellComponent,\r\n\r\n FocusClickedCellDirective,\r\n CellDirective,\r\n RowDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n A11yModule,\r\n SharedModule,\r\n DesyFormsModule\r\n ],\r\n exports: [\r\n TableComponent,\r\n TableCaptionComponent,\r\n TableCellComponent,\r\n TableHeaderComponent,\r\n TableRowComponent,\r\n TableAdvancedComponent,\r\n TableAdvancedHeaderComponent,\r\n TableAdvancedHeaderCellComponent,\r\n TableAdvancedRowComponent,\r\n TableAdvancedRowCellComponent\r\n ]\r\n})\r\nexport class DesyTablesModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { DesyNavModule } from '../desy-nav/desy-nav.module';\r\nimport { DesyButtonsModule } from '../desy-buttons/desy-buttons.module';\r\n\r\nimport { PaginationComponent } from './components/pagination/pagination.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n PaginationComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n DesyNavModule,\r\n DesyButtonsModule\r\n ],\r\n exports: [\r\n PaginationComponent\r\n ]\r\n})\r\nexport class DesyPaginationModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\n\r\nimport { DesyButtonsModule } from './desy-buttons/desy-buttons.module';\r\nimport { DesyFormsModule } from './desy-forms/desy-forms.module';\r\nimport { DesyModalsModule } from './desy-modals/desy-modals.module';\r\nimport { DesyNavModule } from './desy-nav/desy-nav.module';\r\nimport { DesyTablesModule } from './desy-tables/desy-tables.module';\r\nimport { DesyViewsModule } from './desy-views/desy-views.module';\r\nimport { DesyPaginationModule } from './desy-pagination/desy-pagination.module';\r\nimport { DesyCommonsModule } from './desy-commons/desy-commons.module';\r\n\r\n@NgModule({\r\n imports: [\r\n BrowserAnimationsModule,\r\n DesyButtonsModule,\r\n DesyCommonsModule,\r\n DesyFormsModule,\r\n DesyModalsModule,\r\n DesyNavModule,\r\n DesyTablesModule,\r\n DesyViewsModule,\r\n DesyPaginationModule,\r\n DesyCommonsModule,\r\n ],\r\n exports: [\r\n DesyButtonsModule,\r\n DesyCommonsModule,\r\n DesyFormsModule,\r\n DesyModalsModule,\r\n DesyNavModule,\r\n DesyTablesModule,\r\n DesyViewsModule,\r\n DesyPaginationModule,\r\n DesyCommonsModule,\r\n ]\r\n})\r\nexport class DesyAngularModule { }\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","../../../projects/desy-angular/src/lib/shared/components/accessibility/accessibility.component.ts","../../../projects/desy-angular/src/lib/shared/components/content-base/content-base.component.ts","../../../projects/desy-angular/src/lib/shared/components/text-or-html-required/text-or-html-required.component.ts","../../../projects/desy-angular/src/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.ts","../../../projects/desy-angular/src/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/button/button.component.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/button-loader/button-loader.component.ts","../../../projects/desy-angular/src/lib/shared/utils/focus-utils.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/dropdown/dropdown.component.ts","../../../projects/desy-angular/src/lib/shared/utils/string-utils.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.ts","../../../projects/desy-angular/src/lib/shared/decorators/desy-content-child.decorator.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/listbox/listbox.component.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/pill/pill.component.ts","../../../projects/desy-angular/src/lib/desy-commons/components/content/content.component.ts","../../../projects/desy-angular/src/lib/desy-commons/components/description/description.component.ts","../../../projects/desy-angular/src/lib/desy-commons/components/icon/icon.component.ts","../../../projects/desy-angular/src/lib/desy-commons/components/title/title.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/hint/hint.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/label/label.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/error-message/error-message.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/fieldset/legend/legend.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/fieldset/fieldset.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/form-field/form-field.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/textarea/textarea.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/character-count/character-count.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/input/input.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/select/select-item/select-item.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/select/option/option.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/select/option-group/option-group.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/select/select.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/file-upload/file-upload.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.ts","../../../projects/desy-angular/src/lib/shared/decorators/desy-on-input-change.decorator.ts","../../../projects/desy-angular/src/lib/shared/pipes/make-html-list.pipe.ts","../../../projects/desy-angular/src/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/input-group/input-group.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/radios/radio-item/radio-item.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/radios/radios.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/checkboxes/checkboxes.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/date-input/date-input.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/search-bar/search-bar.component.ts","../../../projects/desy-angular/src/lib/desy-forms/directives/condition.directive.ts","../../../projects/desy-angular/src/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.ts","../../../projects/desy-angular/src/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.ts","../../../projects/desy-angular/src/lib/desy-modals/components/modal/modal.component.ts","../../../projects/desy-angular/src/lib/desy-modals/components/dialog/dialog.component.ts","../../../projects/desy-angular/src/lib/desy-modals/services/dialog.service.ts","../../../projects/desy-angular/src/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-navigation/header-navigation.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/nav/nav-item/nav-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/nav/nav.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-subnav/header-subnav.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/skip-link/skip-link.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/header/header.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/footer/footer-meta/footer-meta.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/footer/footer.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/error-summary/error-summary.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menu-vertical/menu-vertical.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menubar/directives/menubaritem.directive.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/menubar/menubar.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/notification/notification-item/notification-item.component.ts","../../../projects/desy-angular/src/lib/desy-nav/components/notification/notification.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table/components/table-cell.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table/components/table-header.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table/components/table-caption.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table/components/table-row.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table/table.component.ts","../../../projects/desy-angular/src/lib/shared/utils/search-utils.ts","../../../projects/desy-angular/src/lib/desy-tables/interfaces/head-cell-data.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.ts","../../../projects/desy-angular/src/lib/desy-tables/directives/cell.directive.ts","../../../projects/desy-angular/src/lib/desy-tables/directives/row.directive.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table-advanced/table-advanced.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/alert/alert.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/accordion/accordion-header/accordion-header.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/accordion/accordion-item/accordion-item.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/accordion/accordion.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/spinner/spinner.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/details/details.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/description-list/term/term.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/description-list/definition/definition.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/description-list/description-item/description-item.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/description-list/description-list.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/collapsible/collapsible.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/item/item-content-right/item-content-right.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/item/item-item/item-item.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/item/item.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/media-object/media-object.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/status/status.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/status-item/status-item.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/tabs/panel/panel.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/tabs/tab-item/tab-item.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/tabs/tabs.component.ts","../../../projects/desy-angular/src/lib/desy-views/services/alert.service.ts","../../../projects/desy-angular/src/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.ts","../../../projects/desy-angular/src/lib/desy-pagination/components/pagination/pagination.component.ts","../../../projects/desy-angular/src/lib/shared/pipes/inner-html.pipe.ts","../../../projects/desy-angular/src/lib/shared/pipes/external-href.pipe.ts","../../../projects/desy-angular/src/lib/shared/directives/attribute-change.directive.ts","../../../projects/desy-angular/src/lib/shared/directives/inner-content.directive.ts","../../../projects/desy-angular/src/lib/shared/directives/click-outside.directive.ts","../../../projects/desy-angular/src/lib/shared/directives/content-change.directive.ts","../../../projects/desy-angular/src/lib/shared/directives/content-empty.directive.ts","../../../projects/desy-angular/src/lib/shared/directives/custom-inner-content.directive.ts","../../../projects/desy-angular/src/lib/shared/shared.module.ts","../../../projects/desy-angular/src/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.ts","../../../projects/desy-angular/src/lib/desy-commons/desy-commons.module.ts","../../../projects/desy-angular/src/lib/desy-forms/desy-forms.module.ts","../../../projects/desy-angular/src/lib/desy-views/components/tooltip/tooltip.component.ts","../../../projects/desy-angular/src/lib/desy-views/desy-views.module.ts","../../../projects/desy-angular/src/lib/desy-buttons/desy-buttons.module.ts","../../../projects/desy-angular/src/lib/desy-modals/desy-modals.module.ts","../../../projects/desy-angular/src/lib/desy-nav/desy-nav.module.ts","../../../projects/desy-angular/src/lib/desy-tables/directives/focus-clicked-cell.directive.ts","../../../projects/desy-angular/src/lib/desy-tables/desy-tables.module.ts","../../../projects/desy-angular/src/lib/desy-pagination/desy-pagination.module.ts","../../../projects/desy-angular/src/lib/desy-angular.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","pop","push","__values","o","s","m","__read","ar","error","__spread","concat","Component","args","selector","template","Input","ContentBaseComponent","_super","getContent","content","AccessibilityComponent","ViewChild","static","TextOrHtmlRequiredComponent","ngOnChanges","changes","textOrHtmlRequiredFunction","text","html","Error","AccessibilityAndTextOrHtmlRequiredComponent","ButtonComponent","_this","hostTabIndex","clickEvent","EventEmitter","avoidingDoubleClick","onClick","event","preventDoubleClick","preventDefault","emit","setTimeout","getElement","element","toLocaleLowerCase","href","ELEMENT_A","ELEMENT_BUTTON","getClassNames","classNames","classes","disabled","isDisabled","ELEMENT_INPUT","HostBinding","Output","ButtonLoaderComponent","getSpinnerText","spinnerText","state","STATE_LOADING","loaderText","DEFAULT_LOADER_TEXT","getSuccessText","successText","STATE_SUCCESS","DEFAULT_SUCCESS_TEXT","FocusUtils","getFirstFocusableElement","parent","focusableList","selectionableElements","querySelectorAll","document","firstFocusable","item","isFocusable","tabIndex","getAttribute","nodeName","rel","type","DropdownComponent","show","clickOutsideEnabled","ngOnInit","contentTooltip","dropdownContent","nativeElement","style","display","tippyProperties","placement","inlinePositioning","allowHTML","trigger","hideOnClick","interactive","arrow","offset","theme","plugins","name","defaultValue","fn","_a","hide","onKeyDown","KEY_CODE_ESC","onShow","addEventListener","onHide","removeEventListener","role","aria","onShown","instance","focus","closeDropdown","toggleDropdown","AccessibilityAndContentRequiredComponent","read","ElementRef","HostListener","StringUtils","escapeHtml","replace","RegExp","ListboxLabelComponent","isInit","ListboxItemComponent","itemChange","DesyContentChild","options","propertyKey","privateKeyName","privateQueryListKeyName","set","queryList","QueryList","subscribe","previousValue","first","onSetCallbackName","onDeleteCallbackName","notifyOnChanges","get","ListboxComponent","itemsChange","activeItemChange","isListVisible","listboxContent","onListShow","bind","onHidden","onListClose","id","items","itemComponentList","labelComponent","itemComponentSubscriptions","forEach","unsubscribe","itemList","subscription","checkActiveItems","_b","_c","ngDoCheck","getActiveItemsData","map","index","active","filter","activeItems","hasActiveItemChange","lastActiveItems","isMultiselectable","newItem","this_1","findIndex","activeItems_1","activeItems_1_1","doesChangeButtonText","activeItemOption","listboxOptions","find","buttonContent","innerHTML","listboxList","listboxButton","onListFocus","activeItemsData","activeElem","getElementById","getItemId","currentFocusIndex","selectItem","console","warn","moveFocus","position","onSpace","getIdPrefix","idPrefix","itemId","hasLabel","getLabelContent","isButtonContentHtml","ViewChildren","ContentChildren","PillComponent","getType","TYPE_A","TYPE_SPAN","TYPE_BUTTON","ContentComponent","DescriptionComponent","IconComponent","TitleComponent","HintComponent","changeDetectorRef","detectChanges","ChangeDetectorRef","LabelComponent","ErrorMessageComponent","LegendComponent","FieldsetComponent","FormFieldComponent","onChange","onTouch","onblur","onInput","registerOnChange","registerOnTouched","setDisabledState","writeValue","getHintId","hasHint","getErrorId","hasErrorsMessage","hasLabelComponent","labelText","labelRef","labelData","hasHintComponent","hintText","hintRef","hintData","hasErrorMessageComponent","errorMessageText","errorMessageRef","errorMessageData","hintComponent","errorMessageComponent","TextareaComponent","inputTransform","checkRequiredParams","getRows","rows","DEFAULT_ROWS","ensureText","registerInputTransform","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","CharacterCountComponent","ngAfterViewInit","textareaElement","textarea","checkRequired","maxlength","calculateLenght","displayCountMessage","threshold","substring","remaining","words","match","maxwords","lastIndexOf","countbbdd","specialChars","InputComponent","errorId","SelectItemComponent","OptionComponent","OptionGroupComponent","SelectComponent","contentInit","ngAfterContentInit","getItems","itemSelected_1","selected","itemComponents","toArray","isItemSelected","isOptionGroup","FileUploadComponent","DesyOnInputChange","callbackName","MakeHtmlListPipe","transform","valueForEmpty","filteredList","join","Pipe","InputGroupInputComponent","isSelect","valueChange","InputGroupItemComponent","InputGroupSelectComponent","InputGroupDividerComponent","divider","InputGroupComponent","controlContainer","hasItemLabel","ngAfterViewChecked","getItemName","onExternalChange","onInternalChange","itemValue","itemName","overrideFieldsetParams","fieldset","caller","innerHtml","describedBy","itemsComponents","getItemLabelRef","getItemLabelData","hasFieldset","hasFieldsetComponent","hasLegendComponent","legendRef","fieldsetData","legendData","legendText","fieldsetComponent","legendComponent","namePrefix","getItemSelectOptions","selectItemComponentList","selectItems","getItemDividerTemplate","dividerContent","getItemDividerHtml","isSelectItem","hasSelectItems","ControlContainer","Optional","RadioItemComponent","radios","checkedChange","markForUpdateCheckboxIds","ngOnDestroy","checked","lastChecked","setChecked","updateValueFromRadioItems","undefined","lastValue","radioId","getItemHintId","hintComponentList","hasChanged","isInputChecked","inputElement","updateRadioId","labelComponentList","for","hasDividers","hasError","getNameRadio","getDescribedBy","animations","opacity","transition","animate","query","animateChild","optional","RadiosComponent","Host","nextValue","updateChekboxIds","updateItems_1","updateRadioItemsChecked","checkboxItems","getRadioItems","onIdPrefixChange","propagateNewIdPrefixValue","onNameChange","overrideHintParams","overrideErrorMessageParams","itemsUpdated","checkedItem","hint","errorMessage","onDeleteHint","onDeleteErrorMessage","radioComponentItems","radioComponentItems2","CheckboxItemComponent","checkboxes","indeterminateChange","updateValueFromCheckboxItems","indeterminateChecked","lastIndeterminate","setIndeterminateChecked","checkboxId","input","isIndeterminate","readOnly","indeterminate","setIndeterminateStatus","getValue","updateCheckboxId","getNameCheckbox","CheckboxesComponent","updateCheckboxItemsChecked","getCheckboxItems","itemChecked","checkboxComponentItems","checkboxComponentItems2","DateInputDayComponent","DateInputItemComponent","DateInputMonthComponent","DateInputYearComponent","DateInputDividerComponent","DateInputComponent","initDefaultItems","newVal","assign","getItemLabel","toUpperCase","dateInputItemComponents","defaultItems","SearchBarComponent","button","hasButton","ConditionDirective","templateRef","conditionalHtml","Directive","TemplateRef","ModalButtonPrimaryComponent","ModalButtonSecondaryComponent","ModalComponent","closeModal","clickButton","hasIconContent","descriptionIsHtml","descriptionIsEmpty","closeDialog","iconComponent","icon","handleRequiredEmpty","checkDescriptionContent","childs","childNodes","hasHtml","hasContent","nodeType","Node","TEXT_NODE","textContent","ELEMENT_NODE","CDATA_SECTION_NODE","descriptionWasEmpty","clickButtonEmit","handleIconContentEmpty","isEmpty","getTitleClasses","titleComponent","title","getDescriptionClasses","descriptionComponent","description","getPrimaryItems","primaryButtonComponents","itemsPrimary","getSecondaryItems","secondaryButtonComponents","itemsSecondary","numDialogsOpened","DialogComponent","cdRef","focusTrapFactory","factoryResolver","activeChange","lastActiveState","focusTrapWrapper","handleActiveState","callerType","factory","resolveComponentFactory","component","container","createComponent","onCallerCreationCallback","children","childElem","dismiss","onKeyUp","stopPropagation","focusTrap","focusElem_1","classList","add","DIALOG_OPEN_CLASS","remove","removeAttribute","focusInitialElement","destroy","focusOnClose","handleClickOutside","dismissOnBackdrop","ConfigurableFocusTrapFactory","ComponentFactoryResolver","ViewContainerRef","DialogService","defaultInjector","appRef","openDialog","dialogOptions","dialog","createDialog","Type","initModal","ComponentRef","onCloseDialog","rootViewContainer","attachView","hostView","componentElement","rootNodes","appendChild","modalRef","modalOptions","isDismissible","subscription_1","Injectable","providedIn","Injector","ApplicationRef","BreadcrumbsItemComponent","BreadcrumbsComponent","location","getLength","itemsLength","hasBackButton","goBack","back","getItemList","handleEmptyItem","Location","HeaderOffcanvasCloseButtonComponent","HeaderOffcanvasButtonComponent","openOffcanvas","handleClick","handleEmptyContent","HeaderOffcanvasComponent","dialogService","hostClass","isOpen","close","open","offcanvasContent","setHostClass","bindButton","ariaModal","ariaLabelledBy","HeaderNavigationItemComponent","HeaderNavigationComponent","prefix","suffix","NavItemComponent","NavComponent","hasNav","itemsActiveChange","routerLink","handleContentEmpty","HeaderSubnavComponent","hasSubnavItems","nav","overrideNavParams","ariaLabel","HeaderDropdownComponent","SkipLinkComponent","handleNoContent","HeaderComponent","overrideSkipLinkParams","skiplinkComponent","overrideNavigationParams","navigationComponent","FooterNavigationItemComponent","FooterMetaItemComponent","FooterMetaComponent","FooterComponent","getNavigationItems","navItems","navigation","getNavigationItemItems","FooterNavigationComponent","getMetaItems","meta","getMetaContent","contentComponent","ErrorSummaryItemComponent","ErrorSummaryComponent","handleContentRequired","getErrorItemList","errorItemList","errorComponentList","errorList","lastLength","lastErrorItemCount","MenuHorizontalItemComponent","MenuHorizontalComponent","MenuVerticalItemSubItemComponent","MenuVerticalItemSubComponent","MenuVerticalItemComponent","MenuVerticalComponent","handleItemContentEmpty","isRoot","getItemHtml","getId","getSubItemId","itemIndex","subItemIndex","subItemId","sub","getItemSub","subItem","getSubItems","subComponent","subItems","MenubaritemDirective","elementRef","contentChanged","contentHasBeenChecked","ngAfterContentChecked","popupMenu","lastPopupMenu","popupMenuItems","lastPopupMenuItems","link","lastLink","itemContentWrapper","lastItemContentWrapper","ContentChild","descendants","MenubarSubsubitemComponent","MenubarSubitemComponent","MenubarItemComponent","MenubarLabelComponent","MenubarComponent","activeSubItemChange","viewInit","currentFocusItemIndex","checkChanges","menuItems","menuData","itemData","currentFocusSubItemIndex","currentFocusSubSubItemIndex","menuItem","lastCurrentFocusItemIndex","isItemFocusable","handleMenuFocusIn","isFocused","handleMenuFocusOut","menubar","contains","relatedTarget","closeMenu","handleMenuItemClick","hasPopupMenu","openMenu","activateMenuItem","handleMenuItemKeydown","focusFirstSubItem","focusNextAvailableItem","focusLastSubItem","focusFirstItem","focusLastItem","isPrintableChar","focusItemByFirstChar","handleMenuItemMouseOver","focusItem","handlePopupMenuItemClick","subSubItemIndex","activatePopupMenuItem","handlePopupMenuItemKeydown","currentSubIndex","currentSubSubIndex","mustCloseAfterSelectPopupItem","focusNextAvailableSubItem","focusSubItemByFirstChar","handlePopupMenuItemMouseOver","focusSubItem","getItemSubitems","subSubItems","getSubItemSubitems","wasOpened","str","getMenuDataIndex","menuDataIndex","hover","hasFocus","activeElement","fromItemIndex","nextItem","char","itemContents","foundIndex","trim","substr","toLowerCase","elem","fromItemSubIndex","fromItemSubSubIndex","allSubItemsChecked","nextSubIndex","nextSubSubIndex","nextIndexes","getNextSubItemIndexes","subIndex","subSubIndex","isSubItemFocusable","firstSubSubItem","lastItemIndex","lastItem","lastSubSubItem","foundSubIndex","foundSubSubIndex","checkNextSubItem","nextSubItemItems","getLabelRef","getPopupStyle","rect","getBoundingClientRect","top","height","left","zIndex","parentId","getSubSubItemAriaChecked","subsubitem","ariaChecked","NotificationItemComponent","NotificationComponent","isOpenChange","isDismissing","displayDefaultIcon","itemCompontents","handleIconEmpty","empty","TableCellComponent","TableCaptionComponent","TableComponent","getCaptionClass","captionComponent","captionClasses","getHeaderCells","headerCells","headerComponent","cells","head","rowList","rowComponentList","getRowCells","row","TableRowComponent","handleEmptyCell","cell","cellIndex","TableHeaderComponent","OrderBy","SearchUtils","containsAnyWordFrom","fullWord","includes","simplifiedTarget","getSimplifiedString","split","word","res","toLocaleUpperCase","TableAdvancedHeaderCellComponent","TableAdvancedRowCellComponent","CellDirective","RowDirective","getCell","column","contentCells","columnIndex","TableAdvancedComponent","el","changeDetector","rowsChange","rowsChecked","recalculateTable","orderByType","elemntsFocus","querySelector","setAttribute","recalculateVisibleElements","recalculateParams","buildRecalculateParams","observers","markForCheck","visibleRows","rowData","filterRows","sortRows","desyRow","params","filters","sort","headerCell","headerCellIndex","hasFilter","activeFilter","filterText","valueFilter","orderByColumnIndex","orderBy","none","order","hasFilters","getVisibleRows","getIdHeader","getIdRowCheckbox","getIdHeaderFilter","getStringOrderBy","asc","handleTableCellContentEmpty","handleCheckboxChange","TableAdvancedRowComponent","notifyCheckedChange","uncheckAll","mustEmit","rowChecks","handleInputSearch","filteredRows","handleSortByColumn","getNextDirection","sortedRows","columnIndex_1","isAsc_1","a","compareCellContent","isAsc","aComparable","cleanCurrency","bComparable","isNaN","localeCompare","sensitivity","ignorePunctuation","numeric","txt","test","TableAdvancedHeaderComponent","AlertComponent","hasViewinit","createdCallerFromType","_active","focusFirst","focusElem","alertWrapper","AccordionHeaderComponent","AccordionItemComponent","openChange","AccordionComponent","showAll","changeAll","isChange","toggleItem","allowToggle","newOpenValue","allowMultiple","it","wasOpen","itemSelectors","focusNextItem","focusedItem","selectors","focusPreviousItem","currentItem","headingComponent","heading","getItemHeader","getItemContent","SpinnerComponent","DetailsComponent","summaryTextOrSummaryHtmlRequiredFunction","summaryText","summaryHtml","TermComponent","DefinitionComponent","DescriptionListComponent","DescriptionItemComponent","CollapsibleComponent","toggleOpen","headerTextOrheaderHtmlRequiredFunction","ItemContentRightComponent","ItemContentBottomComponent","ItemItemComponent","ItemComponent","getTitle","MediaObjectComponent","figureHtml","StatusComponent","StatusItemComponent","PanelComponent","TabItemComponent","TabsComponent","currentTab","tablistAriaLabel","selectTab","getItemPanel","tab","panel","panelComponent","currentPanel","tabSrOnly","tabSelectorContentWrapper","focusFirstTab","tabSelectors","focusLastTab","enabledTabs","focusNextTab","focusedTab","nextTab","focusPreviousTab","previousTab","getPanelContent","AlertService","openAlert","alertOptions","alert","createAlert","initNotification","closeAlert","onCloseAlert","place","notificationRef","TooltipContentComponent","PaginationComponent","currentPage","currentPageChange","previousIcon","nextIcon","totalItems","itemsPerPage","nPages","Math","ceil","previousText","nextText","buildPages","getSuffix","page","getLastItemNumber","pageIndex","min","getButtonId","changePage","current","previous","getActiveItemText","InnerHtmlPipe","sanitizer","sanitize","SecurityContext","HTML","DomSanitizer","ExternalHrefPipe","AttributeChangeDirective","desyAttributeChange","desyAttributeChangeMutation","MutationObserver","mutations","mutation","attributesToCheck","attributeName","observe","attributes","childList","characterData","subtree","disconnect","InnerContentDirective","deleteContentIfEmpty","isHtml","innerText","ClickOutsideDirective","hostElementRef","clickOutside","desyClickOutsideElem","ContentChangeDirective","observeProperties","desyContentChange","desyContentChangeMutation","ContentEmptyDirective","desyContentEmpty","desyContentNotEmpty","lastWasEmpty","checkContent","isContentNode","contentNode","contentsToIgnore","ignoreElem","CustomInnerContentDirective","viewContainerRef","resolver","injector","clear","desyCustomInnerContent","createEmbeddedView","tmpWrapper","createElement","nodeList_1","node","componentRef","textNode","createTextNode","NgModule","declarations","imports","CommonModule","exports","RouterModule","NgForm","SharedModule","NgxTippyModule","TemplateDrivenWrapperComponent","FormsModule","ReactiveFormsModule","DesyCommonsModule","TooltipComponent","hasIconComponentContent","tooltipContent","complex","getIdButton","getIdTooltip","handleEmptyIconContent","handleEmptyTooltipContent","getMainContent","getIconContent","DesyFormsModule","DesyViewsModule","A11yModule","DesyButtonsModule","FocusClickedCellDirective","offsetParent","elemntsFocus_1","elemntsFocus_1_1","activeTabindex","manageArrows","code","tr","parentNode","nextElementSibling","previousElementSibling","inactiveTabindex","mynode","otherNode","isEqualNode","DesyNavModule","DesyModalsModule","DesyTablesModule","DesyPaginationModule"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { AccesibilityData } from '../../interfaces/accesibility-data';\r\n\r\n/**\r\n * componente para heredar los atributos de accesibilidad\r\n */\r\n@Component({\r\n selector: 'desy-accessibility',\r\n template: '<div></div>'\r\n})\r\nexport class AccessibilityComponent implements AccesibilityData {\r\n @Input() role: string;\r\n @Input() ariaLabel: string;\r\n @Input() ariaDescribedBy: string;\r\n @Input() ariaLabelledBy: string;\r\n @Input() ariaHidden: string;\r\n @Input() ariaDisabled: string;\r\n @Input() ariaControls: string;\r\n @Input() ariaCurrent: string;\r\n @Input() ariaLive: string;\r\n @Input() ariaExpanded: string;\r\n @Input() ariaErrorMessage: string;\r\n @Input() ariaHasPopup: string;\r\n @Input() ariaModal: string;\r\n @Input() tabindex: string;\r\n\r\n /*\r\n Copiar para facilitar el uso por defecto\r\n [attr.role]=\"role ? role : null\"\r\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\r\n [attr.aria-describedby]=\"ariaDescribedBy ? ariaDescribedBy : null\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy ? ariaLabelledBy : null\"\r\n [attr.aria-hidden]=\"ariaHidden ? ariaHidden : null\"\r\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\r\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\r\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : null\"\r\n [attr.aria-live]=\"ariaLive ? ariaLive : null\"\r\n [attr.aria-expanded]=\"ariaExpanded ? ariaExpanded : null\"\r\n [attr.aria-errormessage]=\"ariaErrorMessage ? ariaErrorMessage : null\"\r\n [attr.aria-haspopup]=\"ariaHasPopup ? ariaHasPopup : null\"\r\n [attr.aria-modal]=\"ariaModal ? ariaModal : null\"\r\n [attr.tabindex]=\"tabindex ? tabindex : null\"\r\n */\r\n}\r\n","import {Component, TemplateRef, ViewChild} from '@angular/core';\r\nimport {AccessibilityComponent} from '../accessibility/accessibility.component';\r\n/**\r\n * Componente base para proyectar contenido\r\n */\r\n@Component({\r\n selector: 'desy-content-base',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ContentBaseComponent extends AccessibilityComponent {\r\n\r\n @ViewChild('contentTemplate', { static: true }) private content: TemplateRef<any>;\r\n\r\n public getContent(): TemplateRef<any> {\r\n return this.content;\r\n }\r\n}\r\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'desy-text-or-html-required',\r\n template: '<div></div>'\r\n})\r\nexport class TextOrHtmlRequiredComponent implements OnChanges {\r\n\r\n /***\r\n * componente base para el comportamiento de texto o html required\r\n * si en el componente que extiende de este, se implementa el onInit o Onchanges,\r\n * habra que incluir la llamada al a funcion textOrHtmlRequiredFunction\r\n **/\r\n\r\n @Input() text: string;\r\n @Input() html: string;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n textOrHtmlRequiredFunction(this.text, this.html);\r\n }\r\n\r\n}\r\n\r\n/**\r\n * funcion que comprueba si existe text o html\r\n * salta error si no es así\r\n */\r\nexport function textOrHtmlRequiredFunction(text: any, html: any): void {\r\n if (!html && !text) {\r\n throw new Error(`html or text are required`);\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { AccesibilityData } from '../../interfaces/accesibility-data';\r\nimport { TextOrHtmlRequiredComponent } from '../text-or-html-required/text-or-html-required.component';\r\n\r\n@Component({\r\n selector: 'desy-accessibility-and-text-or-html-required',\r\n template: '<div></div>'\r\n})\r\nexport class AccessibilityAndTextOrHtmlRequiredComponent extends TextOrHtmlRequiredComponent implements AccesibilityData {\r\n\r\n /**\r\n * componente para heredar los atributos de accesibilidad y\r\n * el texto o html required\r\n * \r\n * si en el componente que extiende de este, se implementa el onInit o Onchanges,\r\n * habra que incluir la llamada al a funcion textOrHtmlRequiredFunction\r\n * \r\n */\r\n\r\n // Atributos de accesibilidad\r\n @Input() role: string;\r\n @Input() ariaLabel: string;\r\n @Input() ariaDescribedBy: string;\r\n @Input() ariaLabelledBy: string;\r\n @Input() ariaHidden: string;\r\n @Input() ariaDisabled: string;\r\n @Input() ariaControls: string;\r\n @Input() ariaCurrent: string;\r\n @Input() ariaLive: string;\r\n @Input() ariaExpanded: string;\r\n @Input() ariaErrorMessage: string;\r\n @Input() ariaHasPopup: string;\r\n @Input() tabindex: string;\r\n\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { AccesibilityData } from '../../interfaces/accesibility-data';\r\n\r\n@Component({\r\n selector: 'desy-accessibility-and-content-required',\r\n template: '<div></div>'\r\n})\r\nexport class AccessibilityAndContentRequiredComponent implements AccesibilityData {\r\n\r\n /**\r\n * componente para heredar los atributos de accesibilidad y\r\n * el content required\r\n *\r\n * si en el componente que extiende de este, se implementa el onInit o Onchanges,\r\n * habra que incluir la llamada al a funcion contentRequiredFunction\r\n *\r\n */\r\n @Input() html: string;\r\n @Input() text: string;\r\n\r\n // Atributos de accesibilidad\r\n @Input() role: string;\r\n @Input() ariaLabel: string;\r\n @Input() ariaDescribedBy: string;\r\n @Input() ariaLabelledBy: string;\r\n @Input() ariaHidden: string;\r\n @Input() ariaDisabled: string;\r\n @Input() ariaControls: string;\r\n @Input() ariaCurrent: string;\r\n @Input() ariaLive: string;\r\n @Input() ariaExpanded: string;\r\n @Input() ariaErrorMessage: string;\r\n @Input() ariaHasPopup: string;\r\n @Input() tabindex: string;\r\n\r\n}\r\n","import {Component, EventEmitter, HostBinding, Input, Output} from '@angular/core';\r\nimport { AccessibilityComponent} from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-button',\r\n templateUrl: './button.component.html'\r\n})\r\nexport class ButtonComponent extends AccessibilityComponent {\r\n\r\n public static readonly ELEMENT_A: string = 'a';\r\n public static readonly ELEMENT_BUTTON: string = 'button';\r\n public static readonly ELEMENT_INPUT: string = 'input';\r\n\r\n\r\n @HostBinding('attr.tabindex') readonly hostTabIndex = null; // Fix para evitar el tab-index agregado por routerLink en el host\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() html: string;\r\n @Input() text: string;\r\n\r\n @Input() element: string; // 'a', 'button' o 'input'\r\n @Input() name: string;\r\n @Input() type: string;\r\n @Input() value: any;\r\n @Input() disabled: boolean;\r\n @Input() href: string;\r\n @Input() target: string;\r\n @Input() preventDoubleClick: boolean;\r\n\r\n @Input() routerLink: string|any[];\r\n @Input() routerLinkActiveClasses: string|string[];\r\n\r\n @Output() clickEvent = new EventEmitter();\r\n\r\n avoidingDoubleClick = false;\r\n\r\n onClick(event: any): void {\r\n if (this.preventDoubleClick) {\r\n if (!this.avoidingDoubleClick){\r\n this.avoidingDoubleClick = true;\r\n this.clickEvent.emit(event);\r\n setTimeout(() => {\r\n this.avoidingDoubleClick = false;\r\n }, 1000);\r\n } else {\r\n event.preventDefault(); // evitamos propagar el evento por ejemplo un submit en un formulario\r\n }\r\n } else {\r\n this.clickEvent.emit(event);\r\n }\r\n }\r\n\r\n getElement(): string {\r\n let element: string;\r\n if (this.element) {\r\n element = this.element.toLocaleLowerCase();\r\n } else {\r\n if (this.href) {\r\n element = ButtonComponent.ELEMENT_A;\r\n } else {\r\n element = ButtonComponent.ELEMENT_BUTTON;\r\n }\r\n }\r\n return element;\r\n }\r\n\r\n getClassNames(): string {\r\n let classNames = 'c-button';\r\n if (this.classes) {\r\n classNames += ' ' + this.classes;\r\n }\r\n if (this.disabled) {\r\n classNames += ' c-button--disabled';\r\n }\r\n return classNames;\r\n }\r\n\r\n isDisabled(): boolean {\r\n return this.disabled ? true : null;\r\n }\r\n\r\n get staticElementTypeA(): string {\r\n return ButtonComponent.ELEMENT_A;\r\n }\r\n\r\n get staticElementTypeButton(): string {\r\n return ButtonComponent.ELEMENT_BUTTON;\r\n }\r\n\r\n get staticElementTypeInput(): string {\r\n return ButtonComponent.ELEMENT_INPUT;\r\n }\r\n}\r\n","import {Component, HostBinding, Input} from '@angular/core';\r\nimport { ButtonComponent } from '../button/button.component';\r\n\r\n@Component({\r\n selector: 'desy-button-loader',\r\n templateUrl: './button-loader.component.html'\r\n})\r\nexport class ButtonLoaderComponent extends ButtonComponent {\r\n\r\n public static readonly STATE_LOADING: string = 'is-loading';\r\n public static readonly STATE_SUCCESS: string = 'is-success';\r\n\r\n private static readonly DEFAULT_LOADER_TEXT: string = 'Acción en curso';\r\n private static readonly DEFAULT_SUCCESS_TEXT: string = 'Acción realizada con éxito';\r\n\r\n @HostBinding('attr.tabindex') readonly hostTabIndex = null; // Fix para evitar el tab-index agregado por routerLink en el host\r\n\r\n @Input() loaderText: string;\r\n @Input() loaderClasses: string;\r\n @Input() state: string;\r\n @Input() successText: string;\r\n\r\n getClassNames(): string {\r\n let classNames = 'c-button-loader relative';\r\n if (this.classes) {\r\n classNames += ' ' + this.classes;\r\n }\r\n if (this.disabled) {\r\n classNames += ' c-button-loader--disabled';\r\n }\r\n return classNames;\r\n }\r\n\r\n getSpinnerText(): string {\r\n let spinnerText: string = null;\r\n\r\n if (this.state === ButtonLoaderComponent.STATE_LOADING) {\r\n spinnerText = this.loaderText ? this.loaderText : ButtonLoaderComponent.DEFAULT_LOADER_TEXT;\r\n }\r\n\r\n return spinnerText;\r\n }\r\n\r\n\r\n getSuccessText(): string {\r\n let successText: string = null;\r\n\r\n if (this.state === ButtonLoaderComponent.STATE_SUCCESS) {\r\n successText = this.successText ? this.successText : ButtonLoaderComponent.DEFAULT_SUCCESS_TEXT;\r\n }\r\n\r\n return successText;\r\n }\r\n}\r\n","export class FocusUtils {\r\n\r\n public static getFirstFocusableElement(parent?: HTMLElement): HTMLElement {\r\n const selectionableElements = 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\r\n let focusableList;\r\n if (parent) {\r\n focusableList = parent.querySelectorAll(selectionableElements);\r\n } else {\r\n focusableList = document.querySelectorAll(selectionableElements);\r\n }\r\n\r\n if (!focusableList || focusableList.length === 0) {\r\n return null;\r\n }\r\n\r\n let firstFocusable = null;\r\n let i = 0;\r\n while (i < focusableList.length) {\r\n try {\r\n const element = focusableList.item(i) as HTMLInputElement;\r\n if (FocusUtils.isFocusable(element)) {\r\n firstFocusable = element;\r\n break;\r\n }\r\n } catch (e) {\r\n\r\n }\r\n i++;\r\n }\r\n\r\n return firstFocusable;\r\n }\r\n\r\n public static isFocusable(element: any): boolean {\r\n if (element.tabIndex > 0 || (element.tabIndex === 0 && element.getAttribute('tabIndex') !== null)) {\r\n return true;\r\n }\r\n\r\n if (element.disabled) {\r\n return false;\r\n }\r\n\r\n switch (element.nodeName) {\r\n case 'A':\r\n return !!element.href && element.rel !== 'ignore';\r\n case 'INPUT':\r\n return element.type !== 'hidden' && element.type !== 'file';\r\n case 'BUTTON':\r\n case 'SELECT':\r\n case 'TEXTAREA':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n TemplateRef,\r\n OnChanges,\r\n SimpleChanges,\r\n ViewChild,\r\n ElementRef,\r\n OnInit, HostListener,\r\n} from '@angular/core';\r\nimport { AccessibilityAndContentRequiredComponent } from '../../../shared/components';\r\nimport { FocusUtils } from '../../../shared/utils/focus-utils';\r\n\r\n@Component({\r\n selector: 'desy-dropdown',\r\n templateUrl: './dropdown.component.html'\r\n})\r\nexport class DropdownComponent extends AccessibilityAndContentRequiredComponent implements OnChanges, OnInit {\r\n\r\n static readonly KEY_CODE_ESC = 'Escape';\r\n\r\n @ViewChild('dropdownContent', { read: ElementRef }) dropdownContent: ElementRef;\r\n\r\n @Input() id: string;\r\n @Input() disabled: boolean;\r\n @Input() hiddenText: string;\r\n @Input() classesContainer: string;\r\n @Input() classesTooltip: string;\r\n @Input() classes: string;\r\n @Input() caller: TemplateRef<any>;\r\n\r\n @Output() clickEvent = new EventEmitter();\r\n\r\n show = false;\r\n clickOutsideEnabled = false;\r\n\r\n tippyProperties: any;\r\n\r\n public ngOnInit(): any {\r\n setTimeout(() => {\r\n let contentTooltip: HTMLElement;\r\n\r\n if (this.dropdownContent && this.dropdownContent.nativeElement) {\r\n contentTooltip = this.dropdownContent.nativeElement as HTMLElement;\r\n contentTooltip.style.display = 'block';\r\n this.tippyProperties = {\r\n placement: 'bottom-start',\r\n inlinePositioning: true,\r\n content: contentTooltip,\r\n allowHTML: true, // Make sure you are sanitizing any user data if rendering HTML to prevent XSS attacks.\r\n trigger: 'click',\r\n hideOnClick: true,\r\n interactive: true,\r\n arrow: false,\r\n offset: [0, -10],\r\n theme: '',\r\n plugins: [{\r\n name: 'hideOnEsc',\r\n defaultValue: true,\r\n fn({hide}): any {\r\n\r\n function onKeyDown(event: KeyboardEvent): void {\r\n if (event.key === DropdownComponent.KEY_CODE_ESC) {\r\n hide();\r\n }\r\n }\r\n\r\n return {\r\n onShow(): void {\r\n document.addEventListener('keydown', onKeyDown);\r\n },\r\n onHide(): void {\r\n document.removeEventListener('keydown', onKeyDown);\r\n },\r\n };\r\n },\r\n }],\r\n role: false,\r\n aria: {\r\n content: 'auto',\r\n },\r\n onShown(instance): void {\r\n const firstFocusable = FocusUtils.getFirstFocusableElement(contentTooltip);\r\n if (firstFocusable) {\r\n setTimeout(() => firstFocusable.focus());\r\n }\r\n }\r\n };\r\n }\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n\r\n if (this.isDisabled()){ // se pone disable se cierra el dropdown\r\n this.closeDropdown();\r\n }\r\n }\r\n\r\n onClick(event: any): void {\r\n if (!this.isDisabled()){\r\n this.toggleDropdown();\r\n this.clickEvent.emit(event);\r\n }\r\n }\r\n\r\n toggleDropdown(): void {\r\n this.show = !this.show;\r\n setTimeout(() => this.clickOutsideEnabled = this.show);\r\n }\r\n\r\n closeDropdown(): void {\r\n this.show = false;\r\n this.clickOutsideEnabled = false;\r\n }\r\n\r\n isDisabled(): boolean {\r\n return this.disabled ? true : null;\r\n }\r\n\r\n @HostListener('window:keydown', ['$event'])\r\n onKeyDown(event: KeyboardEvent): void {\r\n if (event.key === DropdownComponent.KEY_CODE_ESC) {\r\n this.closeDropdown();\r\n }\r\n }\r\n}\r\n","/**\r\n * Facilita funciones de utilidad para trabajar con strings\r\n */\r\nexport class StringUtils {\r\n\r\n /**\r\n * Escapa los caracteres propios de HTML para mostrarlos como contenido\r\n * @param value texto en formato html\r\n */\r\n public static escapeHtml(value: string): string {\r\n return value ? value\r\n .replace(new RegExp(`&`, 'g'), '&')\r\n .replace(new RegExp(`<`, 'g'), '<')\r\n .replace(new RegExp(`>`, 'g'), '>')\r\n .replace(new RegExp(`\"`, 'g'), '"')\r\n .replace(new RegExp(`'`, 'g'), ''') : '';\r\n }\r\n}\r\n","import {Component, Input, OnInit, TemplateRef, ViewChild} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'desy-listbox-label',\r\n templateUrl: './listbox-label.component.html'\r\n})\r\nexport class ListboxLabelComponent implements OnInit {\r\n\r\n @Input() classes: string;\r\n\r\n @ViewChild('childComponentTemplate') content: TemplateRef<any>;\r\n\r\n private isInit = false;\r\n\r\n ngOnInit(): void {\r\n setTimeout(() => this.isInit = !!this.content);\r\n }\r\n\r\n public getContent(): TemplateRef<any> {\r\n return this.isInit ? this.content : null;\r\n }\r\n\r\n}\r\n","import {Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild} from '@angular/core';\r\nimport {ListboxItemData} from '../../../interfaces/listbox-item-data';\r\nimport {AccessibilityComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-listbox-item',\r\n templateUrl: './listbox-item.component.html'\r\n})\r\nexport class ListboxItemComponent extends AccessibilityComponent implements ListboxItemData, OnChanges {\r\n\r\n @ViewChild('childComponentTemplate') content;\r\n\r\n @Input() id?: string;\r\n @Input() active?: boolean;\r\n @Input() classes?: string;\r\n @Input() title?: string;\r\n\r\n @Output() itemChange = new EventEmitter();\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.itemChange.emit(changes);\r\n }\r\n\r\n}\r\n","import {QueryList} from '@angular/core';\r\n\r\n/**\r\n * Decorador para convertir una queryList de componentes obtenidos con ContentChildren a un único componente, de forma que sea similar a un\r\n * ContentChild pero admitiendo únicamente los compontentes insertados en el primer nivel.\r\n * Debe utilizarse siempre junto a un ContentChildren\r\n * Si en el constructor de la clase en la que se utiliza se inyecta el Change detector con nombre 'changeDetectorRef', se indicará que hay\r\n * cambios cuando se detecten.\r\n * @param options opciones adicionales:\r\n * - onSetCallbackName: nombre del método al que llamar tras asociarse el valor. Esto puede utilizarse, por ejemplo, para sobreescribir\r\n * parámetros definidos externamente en el componente.\r\n * - onDeleteCallbackName: nombre del método al que llamar tras desasociarse el valor.\r\n */\r\nexport function DesyContentChild(options?: { onSetCallbackName?: string, onDeleteCallbackName?: string }): PropertyDecorator {\r\n return (target: any, propertyKey: string) => {\r\n const privateKeyName = `_${propertyKey}`;\r\n const privateQueryListKeyName = `_${propertyKey}Querylist`;\r\n\r\n Object.defineProperty(target, propertyKey, {\r\n set(value): void {\r\n const queryList = value instanceof QueryList ? value as QueryList<any> : null;\r\n if (queryList && !this[privateQueryListKeyName]) {\r\n this[privateQueryListKeyName] = queryList;\r\n queryList.changes.subscribe(() => {\r\n const previousValue = this[privateKeyName];\r\n this[privateKeyName] = queryList && queryList.length > 0 ? queryList.first : null;\r\n\r\n if (options && options.onSetCallbackName && this[options.onSetCallbackName] && this[privateKeyName] ) {\r\n this[options.onSetCallbackName](this[privateKeyName]);\r\n }\r\n\r\n if (options && options.onDeleteCallbackName && this[options.onDeleteCallbackName] && previousValue && !this[privateKeyName] ) {\r\n this[options.onDeleteCallbackName]();\r\n }\r\n });\r\n queryList.notifyOnChanges();\r\n }\r\n },\r\n get(): any {\r\n return this[privateKeyName];\r\n }\r\n });\r\n };\r\n}\r\n","import {\r\n Component,\r\n ContentChildren, DoCheck,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport {AccessibilityAndTextOrHtmlRequiredComponent, textOrHtmlRequiredFunction} from '../../../shared/components';\r\nimport {ListboxLabelData} from '../../interfaces/listbox-label-data';\r\nimport {ListboxItemData} from '../../interfaces/listbox-item-data';\r\nimport {StringUtils} from '../../../shared/utils/string-utils';\r\nimport {ListboxLabelComponent} from './listbox-label/listbox-label.component';\r\nimport {ListboxItemComponent} from './listbox-item/listbox-item.component';\r\nimport {Subscription} from 'rxjs';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-listbox',\r\n templateUrl: './listbox.component.html'\r\n})\r\nexport class ListboxComponent extends AccessibilityAndTextOrHtmlRequiredComponent implements OnInit, OnChanges, DoCheck {\r\n\r\n static readonly KEY_CODE_ESC = 'Escape';\r\n\r\n @ViewChild('button', { read: ElementRef }) listboxButton: ElementRef;\r\n @ViewChild('list', { read: ElementRef }) listboxList: ElementRef;\r\n @ViewChild('tooltip', { read: ElementRef }) listboxContent: ElementRef;\r\n @ViewChildren('option', { read: ElementRef }) listboxOptions: QueryList<ElementRef>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ListboxLabelComponent) labelComponent: ListboxLabelComponent;\r\n @ContentChildren(ListboxItemComponent) itemComponentList: QueryList<ListboxItemComponent>;\r\n @Input() id: string; // required\r\n @Input() isMultiselectable: boolean;\r\n @Input() doesChangeButtonText: boolean;\r\n @Input() label: ListboxLabelData;\r\n @Input() classes: string;\r\n @Input() classesContainer: string;\r\n @Input() classesTooltip: string;\r\n @Input() idPrefix: string;\r\n @Input() disabled: boolean;\r\n @Input() items: ListboxItemData[];\r\n @Output() itemsChange = new EventEmitter();\r\n @Output() activeItemChange = new EventEmitter();\r\n\r\n tippyProperties: any;\r\n currentFocusIndex: number;\r\n buttonContent: string;\r\n isListVisible = false;\r\n\r\n // conditionalId y conditionalItem representan en desy-html el item activo. Aquí es mejor obtenerlo cuando se necesita\r\n lastActiveItems: { item: ListboxItemData, index: number }[];\r\n itemComponentSubscriptions: Subscription[];\r\n\r\n itemList: ListboxItemData[];\r\n\r\n\r\n ngOnInit(): void {\r\n setTimeout(() => {\r\n if (this.listboxContent && this.listboxContent.nativeElement) {\r\n const contentTooltip = this.listboxContent.nativeElement as HTMLElement;\r\n this.tippyProperties = {\r\n placement: 'bottom-start',\r\n inlinePositioning: true,\r\n content: contentTooltip,\r\n allowHTML: true, // Make sure you are sanitizing any user data if rendering HTML to prevent XSS attacks.\r\n trigger: 'click',\r\n hideOnClick: true,\r\n interactive: true,\r\n arrow: false,\r\n offset: [0, -10],\r\n theme: '',\r\n plugins: [{\r\n name: 'hideOnEsc',\r\n defaultValue: true,\r\n fn({hide}): any {\r\n\r\n function onKeyDown(event: KeyboardEvent): void {\r\n if (event.key === ListboxComponent.KEY_CODE_ESC) {\r\n hide();\r\n }\r\n }\r\n\r\n return {\r\n onShow(): void {\r\n document.addEventListener('keydown', onKeyDown);\r\n },\r\n onHide(): void {\r\n document.removeEventListener('keydown', onKeyDown);\r\n },\r\n };\r\n },\r\n }],\r\n role: false,\r\n aria: {\r\n content: 'auto',\r\n },\r\n onShow: this.onListShow.bind(this),\r\n onHidden: this.onListClose.bind(this)\r\n };\r\n }\r\n });\r\n }\r\n\r\n ngOnChanges(): void {\r\n setTimeout(() => {\r\n /*\r\n * Parámetros obligatorios\r\n */\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.items && !this.itemComponentList) {\r\n throw Error('items are required');\r\n }\r\n if (!this.label && !this.labelComponent) {\r\n throw Error('label is required');\r\n }\r\n\r\n if (this.itemComponentList && this.itemComponentList.length > 0) {\r\n if (this.itemComponentSubscriptions) {\r\n this.itemComponentSubscriptions.forEach(s => s.unsubscribe());\r\n }\r\n this.itemComponentSubscriptions = [];\r\n this.itemList = [];\r\n this.itemComponentList.forEach(item => {\r\n const subscription = item.itemChange.subscribe(() => this.checkActiveItems());\r\n this.itemComponentSubscriptions.push(subscription);\r\n this.itemList.push(item);\r\n });\r\n } else {\r\n this.itemList = this.items;\r\n }\r\n\r\n if (this.items) {\r\n for (const item of this.items) {\r\n if (item) {\r\n textOrHtmlRequiredFunction(item.text, item.html);\r\n } else {\r\n throw Error('item is ' + item);\r\n }\r\n }\r\n }\r\n\r\n this.checkActiveItems();\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n if (!this.items || !this.itemList) {\r\n return;\r\n }\r\n\r\n this.checkActiveItems();\r\n }\r\n\r\n private getActiveItemsData(): { item: ListboxItemData, index: number }[] {\r\n return this.itemList\r\n .map((item, index) => item.active ? {item, index} : null)\r\n .filter(item => item !== null);\r\n }\r\n\r\n private checkActiveItems(): void {\r\n let activeItems: { item: ListboxItemData, index: number }[] = this.itemList\r\n .map((item, index) => item.active ? {item, index} : null)\r\n .filter(item => item !== null);\r\n\r\n let hasActiveItemChange = false;\r\n if (this.lastActiveItems && activeItems.length === this.lastActiveItems.length) {\r\n for (let i = 0; i < activeItems.length; i++) {\r\n if (activeItems[i].index !== this.lastActiveItems[i].index) {\r\n hasActiveItemChange = true;\r\n break;\r\n }\r\n }\r\n } else {\r\n hasActiveItemChange = true;\r\n }\r\n\r\n // Si hay cambios externos y es selección única, anulamos la selección anterior\r\n if (this.lastActiveItems && !this.isMultiselectable && hasActiveItemChange) {\r\n if (activeItems.length !== this.lastActiveItems.length) {\r\n for (const newItem of activeItems) {\r\n if (this.lastActiveItems.findIndex(i => i.index === newItem.index) >= 0) {\r\n newItem.item.active = false;\r\n }\r\n\r\n activeItems = activeItems.filter(item => item.item.active);\r\n }\r\n }\r\n }\r\n\r\n this.lastActiveItems = activeItems;\r\n\r\n // Se cambia el contenido del botón\r\n if (this.doesChangeButtonText && !this.isMultiselectable && activeItems.length > 0) {\r\n const activeItemOption = this.listboxOptions.find((item, index) => index === activeItems[0].index);\r\n if (activeItemOption) {\r\n this.buttonContent = activeItemOption.nativeElement.innerHTML;\r\n }\r\n } else {\r\n this.buttonContent = this.html ? this.html : this.text;\r\n }\r\n\r\n // Si hay cambios, se emiten\r\n if (hasActiveItemChange) {\r\n this.itemsChange.emit(this.itemList);\r\n this.activeItemChange.emit(activeItems.length > 0 ? activeItems[0].item : null);\r\n }\r\n }\r\n\r\n onListShow(): void {\r\n this.isListVisible = true;\r\n if (this.listboxList) {\r\n setTimeout(() => this.listboxList.nativeElement.focus());\r\n }\r\n }\r\n\r\n onListClose(): void {\r\n this.isListVisible = false;\r\n if (this.listboxButton) {\r\n this.listboxButton.nativeElement.focus();\r\n }\r\n }\r\n\r\n onListFocus(): void {\r\n const activeItemsData = this.getActiveItemsData();\r\n if (activeItemsData.length > 0) {\r\n const activeElem = document.getElementById(this.getItemId(activeItemsData[0].item, activeItemsData[0].index));\r\n if (activeElem) {\r\n activeElem.focus();\r\n this.currentFocusIndex = activeItemsData[0].index;\r\n }\r\n } else if (this.itemList && this.itemList.length > 0) {\r\n this.currentFocusIndex = 0;\r\n if (!this.isMultiselectable) {\r\n this.selectItem(0);\r\n }\r\n } else {\r\n console.warn('No element to focus');\r\n }\r\n }\r\n\r\n moveFocus(position: number, event: KeyboardEvent): void {\r\n event.preventDefault();\r\n if (position >= 0 && position < this.itemList.length) {\r\n if (this.isMultiselectable) {\r\n this.currentFocusIndex = position;\r\n } else {\r\n this.selectItem(position);\r\n }\r\n }\r\n }\r\n\r\n onSpace(event: KeyboardEvent): void {\r\n event.preventDefault();\r\n if (this.isMultiselectable) {\r\n this.selectItem(this.currentFocusIndex);\r\n }\r\n }\r\n\r\n selectItem(index: number): void {\r\n if (!this.isMultiselectable) {\r\n this.itemList.forEach(item => item.active = false);\r\n this.itemList[index].active = true;\r\n } else {\r\n this.itemList[index].active = !this.itemList[index].active;\r\n }\r\n this.currentFocusIndex = index;\r\n\r\n this.checkActiveItems();\r\n }\r\n\r\n /*\r\n * Métodos para facilitar contenido al template\r\n */\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : this.id + '-listbox-item';\r\n }\r\n\r\n getItemId(item: ListboxItemData, index: number): string {\r\n let itemId: string;\r\n if (item.id) {\r\n itemId = item.id;\r\n } else {\r\n itemId = this.getIdPrefix();\r\n if (index > 0) {\r\n itemId += `-${index}`;\r\n }\r\n }\r\n return itemId;\r\n }\r\n\r\n hasLabel(): boolean {\r\n return !!(this.label || this.labelComponent);\r\n }\r\n\r\n getLabelContent(label: ListboxLabelData): string {\r\n return label.html ? label.html : `<p>${ StringUtils.escapeHtml(label.text) }</p>`;\r\n }\r\n\r\n isButtonContentHtml(): boolean {\r\n const activeItemsData = this.getActiveItemsData();\r\n return !!(this.doesChangeButtonText && !this.isMultiselectable && activeItemsData.length > 0 ? true : this.html);\r\n }\r\n}\r\n","import {Component, EventEmitter, HostBinding, Input, Output, SimpleChanges} from '@angular/core';\r\nimport { AccessibilityAndContentRequiredComponent } from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-pill',\r\n templateUrl: './pill.component.html'\r\n})\r\nexport class PillComponent extends AccessibilityAndContentRequiredComponent {\r\n\r\n public static readonly TYPE_A: string = 'a';\r\n public static readonly TYPE_BUTTON: string = 'button';\r\n public static readonly TYPE_SPAN: string = 'span';\r\n\r\n @Input() type: string; // 'a', 'button' o 'span'\r\n @Input() href: string;\r\n @Input() target: string;\r\n @Input() routerLink: string|any[];\r\n @Input() routerLinkActiveClasses: string|string[];\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n @Output() clickEvent = new EventEmitter();\r\n\r\n @HostBinding('attr.tabindex') readonly hostTabIndex = null; // Fix para evitar el tab-index agregado por routerLink en el host\r\n\r\n onClick(event: any): void {\r\n this.clickEvent.emit(event);\r\n }\r\n\r\n getType(): string {\r\n let type: string;\r\n if (this.type){\r\n type = this.type.toLocaleLowerCase();\r\n } else {\r\n if (this.href) {\r\n type = PillComponent.TYPE_A;\r\n } else {\r\n type = PillComponent.TYPE_SPAN;\r\n }\r\n }\r\n return type;\r\n }\r\n\r\n getClassNames(): string {\r\n let classNames = 'c-pill';\r\n if (this.classes) {\r\n classNames += ' ' + this.classes;\r\n }\r\n return classNames;\r\n }\r\n\r\n get staticElementTypeA(): string {\r\n return PillComponent.TYPE_A;\r\n }\r\n\r\n get staticElementTypeButton(): string {\r\n return PillComponent.TYPE_BUTTON;\r\n }\r\n\r\n get staticElementTypeSpan(): string {\r\n return PillComponent.TYPE_SPAN;\r\n }\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../shared/components';\r\nimport {ContentData} from '../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-content',\r\n templateUrl: './content.component.html'\r\n})\r\nexport class ContentComponent extends ContentBaseComponent implements ContentData {\r\n @Input() classes: string;\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../shared/components';\r\nimport {DescriptionData} from '../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-description',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class DescriptionComponent extends ContentBaseComponent implements DescriptionData {\r\n @Input() classes: string;\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {IconData} from '../../interfaces';\r\nimport {ContentBaseComponent} from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-icon',\r\n templateUrl: './icon.component.html'\r\n})\r\nexport class IconComponent extends ContentBaseComponent implements IconData {\r\n\r\n @Input() type: string;\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../shared/components';\r\nimport {TitleData} from '../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-title',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class TitleComponent extends ContentBaseComponent implements TitleData {\r\n @Input() classes: string;\r\n}\r\n","import {ChangeDetectorRef, Component, Input} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-hint',\r\n templateUrl: './hint.component.html',\r\n})\r\nexport class HintComponent extends AccessibilityComponent {\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() html: string;\r\n @Input() text: string;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n public detectChanges(): void {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n}\r\n","import {ChangeDetectorRef, Component, Input} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\n\r\n\r\n@Component({\r\n selector: 'desy-label',\r\n templateUrl: './label.component.html'\r\n})\r\nexport class LabelComponent extends AccessibilityComponent {\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() html: string;\r\n @Input() text: string;\r\n @Input() isPageHeading: boolean;\r\n @Input() headingLevel: number;\r\n @Input() for: string;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n public detectChanges(): void {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n}\r\n","import {ChangeDetectorRef, Component, Input} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-error-message',\r\n templateUrl: './error-message.component.html'\r\n})\r\nexport class ErrorMessageComponent extends AccessibilityComponent {\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() html: string;\r\n @Input() text: string;\r\n @Input() visuallyHiddenText: string;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n public detectChanges(): void {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n}\r\n","import { Component, Input, SimpleChanges } from '@angular/core';\r\nimport { AccessibilityAndContentRequiredComponent } from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-legend',\r\n templateUrl: './legend.component.html'\r\n})\r\nexport class LegendComponent extends AccessibilityAndContentRequiredComponent {\r\n\r\n @Input() classes: string;\r\n @Input() isPageHeading: boolean;\r\n @Input() headingLevel: number;\r\n \r\n}\r\n","import {ChangeDetectorRef, Component, ContentChildren, Input, TemplateRef} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { LegendComponent } from './legend/legend.component';\r\nimport { LegendData } from '../../interfaces';\r\nimport {ContentComponent} from '../../../desy-commons/components/content/content.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-fieldset',\r\n templateUrl: './fieldset.component.html'\r\n})\r\nexport class FieldsetComponent extends AccessibilityComponent {\r\n\r\n @Input() describedBy: string;\r\n @Input() errorId: string;\r\n\r\n /**\r\n * legenda, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir legendComponent\r\n * 2) incluir template\r\n * 3) incluir objeto legend (interfaz expuesta)\r\n * 4) incluir legendText - incluir un label con solo un texto\r\n */\r\n @Input() legendRef: TemplateRef<LegendComponent>;\r\n @Input() legendData: LegendData;\r\n @Input() legendText: string;\r\n\r\n @Input() classes: string;\r\n @Input() caller: TemplateRef<any>;\r\n\r\n @Input() id: string;\r\n @Input() headingLevel: number;\r\n\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LegendComponent) legendComponent: LegendComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n public detectChanges(): void {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n ContentChildren,\r\n HostListener,\r\n Input,\r\n TemplateRef\r\n} from '@angular/core';\r\nimport { ControlValueAccessor } from '@angular/forms';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { LabelComponent } from '../label/label.component';\r\nimport { HintComponent } from '../hint/hint.component';\r\nimport { ErrorMessageComponent } from '../error-message/error-message.component';\r\nimport { LabelData, HintData, ErrorMessageData } from '../../interfaces';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n\r\n@Component({\r\n selector: 'desy-form-field',\r\n template: ''\r\n})\r\nexport class FormFieldComponent<T> extends AccessibilityComponent implements ControlValueAccessor {\r\n\r\n @Input() id: string;\r\n @Input() disabled: boolean;\r\n value: T;\r\n\r\n /*\r\n * label, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir componente\r\n * 2) incluir template\r\n * 3) incluir objeto label (interfaz expuesta)\r\n * 4) incluir legendText - incluir un label con solo un texto\r\n */\r\n @DesyContentChild({ onSetCallbackName: 'overrideLabelParams', onDeleteCallbackName: 'onDeleteLabel'})\r\n @ContentChildren(LabelComponent) labelComponent: LabelComponent;\r\n @Input() labelRef: TemplateRef<LabelComponent>;\r\n @Input() labelData: LabelData;\r\n @Input() labelText: string;\r\n\r\n /*\r\n * hint, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir componente\r\n * 2) incluir template\r\n * 3) incluir objeto label (interfaz expuesta)\r\n * 4) incluir hintText - incluir un hint con solo un texto\r\n */\r\n @DesyContentChild({ onSetCallbackName: 'overrideHintParams', onDeleteCallbackName: 'onDeleteHint'})\r\n @ContentChildren(HintComponent) hintComponent: HintComponent;\r\n @Input() hintRef: TemplateRef<HintComponent>;\r\n @Input() hintData: HintData;\r\n @Input() hintText: string;\r\n\r\n /*\r\n * errorMessage, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir componente\r\n * 2) incluir template\r\n * 3) incluir objeto label (interfaz expuesta)\r\n * 4) incluir errorText - incluir un errorText con solo un texto\r\n */\r\n @DesyContentChild({ onSetCallbackName: 'overrideErrorMessageParams', onDeleteCallbackName: 'onDeleteErrorMessage'})\r\n @ContentChildren(ErrorMessageComponent) errorMessageComponent: ErrorMessageComponent;\r\n @Input() errorMessageRef: TemplateRef<ErrorMessageComponent>;\r\n @Input() errorMessageData: ErrorMessageData;\r\n @Input() errorMessageText: string;\r\n\r\n\r\n @HostListener('focusout')\r\n onblur(): void {\r\n // DESY-77 SI TOCAN EL COMPONENTE Y SALEN SIN MODIFICAR EL VALOR, QUE SE ACTUALICE TOUCHED\r\n this.onTouch();\r\n }\r\n\r\n\r\n /*\r\n * Implementación de los métodos del ControlValueAccessor\r\n */\r\n\r\n onChange = (_: any) => {};\r\n onTouch = () => { };\r\n\r\n onInput(value: T): void{\r\n this.value = value;\r\n this.onTouch();\r\n this.onChange(this.value);\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.onTouch = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n writeValue(value: T): void {\r\n if (value){\r\n this.value = value;\r\n }\r\n this.onChange(value);\r\n }\r\n\r\n\r\n /*\r\n * Funciones para recuperar valores comunes\r\n */\r\n\r\n getHintId(): string {\r\n return this.hasHint() ? this.id + '-hint' : null;\r\n }\r\n\r\n getErrorId(): string {\r\n return this.hasErrorsMessage() ? this.id + '-error' : null;\r\n }\r\n\r\n hasLabel(): boolean {\r\n return !!(this.hasLabelComponent() || this.labelText || this.labelRef ||\r\n (this.labelData && (this.labelData.text || this.labelData.html)));\r\n }\r\n\r\n hasHint(): boolean {\r\n return !!(this.hasHintComponent() || this.hintText || this.hintRef || (this.hintData && (this.hintData.text || this.hintData.html)));\r\n }\r\n\r\n hasErrorsMessage(): boolean {\r\n return !!(this.hasErrorMessageComponent() || this.errorMessageText || this.errorMessageRef ||\r\n (this.errorMessageData && (this.errorMessageData.text || this.errorMessageData.html)));\r\n }\r\n\r\n hasLabelComponent(): boolean {\r\n return !!this.labelComponent;\r\n }\r\n\r\n hasHintComponent(): boolean {\r\n return !!this.hintComponent;\r\n }\r\n\r\n hasErrorMessageComponent(): boolean {\r\n return !!this.errorMessageComponent;\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n SimpleChanges,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\n\r\n@Component({\r\n selector: 'desy-textarea',\r\n templateUrl: './textarea.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TextareaComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class TextareaComponent extends FormFieldComponent<string> implements OnChanges {\r\n\r\n protected static readonly DEFAULT_ROWS = 5;\r\n\r\n @ViewChild('textarea') textareaElement: ElementRef;\r\n\r\n @Input() name: string;\r\n @Input() rows: number;\r\n @Input() placeholder: string;\r\n @Input() describedBy: string;\r\n\r\n @Input() formGroupClasses: string;\r\n @Input() classes: string;\r\n @Input() autocomplete: string;\r\n @Input() maxlength: number;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n inputTransform = (value: string): string => value;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequiredParams();\r\n this.writeValue(this.value);\r\n }\r\n\r\n checkRequiredParams(): void{\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n if (!this.labelRef && !this.labelData && !this.labelText) {\r\n throw Error('label is required');\r\n }\r\n }\r\n\r\n getRows(): number {\r\n return this.rows ? this.rows : TextareaComponent.DEFAULT_ROWS;\r\n }\r\n\r\n onInput(value: any): void{\r\n super.onInput(this.inputTransform(this.ensureText(value)));\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = this.inputTransform(this.ensureText(value));\r\n this.onChange(this.value);\r\n }\r\n\r\n registerInputTransform(fn: (value: string) => string): void {\r\n this.inputTransform = fn;\r\n }\r\n\r\n private ensureText(value: any): string {\r\n return value ? value || '' : '';\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n SimpleChanges,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\nimport { TextareaComponent } from '../textarea/textarea.component';\r\n\r\n@Component({\r\n selector: 'desy-character-count',\r\n templateUrl: './character-count.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CharacterCountComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class CharacterCountComponent extends FormFieldComponent<string> implements AfterViewInit, OnChanges {\r\n\r\n @ViewChild(TextareaComponent) textarea;\r\n\r\n @Input() name: string;\r\n @Input() type: string;\r\n @Input() rows: number;\r\n @Input() placeholder: string;\r\n @Input() maxlength: number;\r\n @Input() countbbdd: boolean;\r\n @Input() maxwords: number;\r\n @Input() threshold: number;\r\n @Input() formGroupClasses: string;\r\n @Input() countMessageClasses: string;\r\n @Input() classes: string;\r\n\r\n textareaElement: HTMLTextAreaElement;\r\n displayCountMessage: boolean;\r\n remaining: number;\r\n\r\n ngAfterViewInit(): void {\r\n this.textareaElement = (this.textarea.textareaElement.nativeElement as HTMLTextAreaElement);\r\n this.textarea.registerInputTransform(this.inputTransform.bind(this));\r\n this.registerOnChange(this.onChange);\r\n this.registerOnTouched(this.onTouch);\r\n this.textarea.setDisabledState(this.disabled);\r\n setTimeout(() => this.textarea.writeValue(this.value), 50);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequired();\r\n if (this.textarea) {\r\n setTimeout(() => this.textarea.ngOnChanges(changes), 50);\r\n }\r\n }\r\n\r\n inputTransform(value: string): string {\r\n if (value) {\r\n if (this.maxlength) {\r\n let length = this.calculateLenght(value);\r\n this.displayCountMessage = !this.threshold || length > (this.maxlength * this.threshold / 100);\r\n while (length > this.maxlength) {\r\n value = value.substring(0, value.length - 1);\r\n length = this.calculateLenght(value);\r\n }\r\n this.remaining = this.maxlength - length;\r\n } else {\r\n const words = value.match(/[\\wáéíóúÁÉÍÓÚüÜñÑ]+/g) || [];\r\n this.displayCountMessage = !this.threshold || (words.length > this.maxwords * this.threshold / 100);\r\n while ( words.length > this.maxwords) {\r\n value = value.substring(0, value.lastIndexOf(words.pop()));\r\n }\r\n this.remaining = this.maxwords - words.length;\r\n }\r\n } else {\r\n value = '';\r\n this.displayCountMessage = !this.threshold;\r\n this.remaining = this.maxlength ? this.maxlength : this.maxwords;\r\n }\r\n\r\n this.textareaElement.value = value;\r\n return value;\r\n }\r\n\r\n calculateLenght(value: string): number {\r\n let length = value.length;\r\n if (this.countbbdd && value) {\r\n const specialChars = value.match(/[^A-z0-9_\\s.,:;]/g);\r\n length += specialChars ? specialChars.length : 0;\r\n }\r\n return length;\r\n }\r\n\r\n checkRequired(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n if (!this.maxlength && !this.maxwords) {\r\n throw Error('maxlength or maxwords are required');\r\n }\r\n if (!this.hasLabel()) {\r\n throw Error('label is required');\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n if (this.textarea) {\r\n this.textarea.registerOnChange(fn);\r\n this.onChange = (_: any) => {};\r\n }\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n if (this.textarea) {\r\n this.textarea.registerOnTouched(fn);\r\n this.onTouch = () => { };\r\n }\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n if (this.textarea) {\r\n this.textarea.setDisabledState(isDisabled);\r\n }\r\n }\r\n\r\n writeValue(value: string): void {\r\n this.value = value;\r\n if (this.textarea) {\r\n this.textarea.writeValue(value);\r\n }\r\n }\r\n\r\n}\r\n","import { Component, forwardRef, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\n\r\n@Component({\r\n selector: 'desy-input',\r\n templateUrl: './input.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class InputComponent extends FormFieldComponent<any> implements OnChanges {\r\n\r\n @Input() name: string;\r\n @Input() type: string;\r\n @Input() describedBy: string;\r\n @Input() pattern: string;\r\n @Input() inputmode: string;\r\n @Input() placeholder: string;\r\n @Input() formGroupClasses: string;\r\n @Input() classes: string;\r\n @Input() autocomplete: string;\r\n @Input() maxlength: number;\r\n @Input() errorId: string;\r\n\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequired();\r\n }\r\n\r\n getErrorId(): string {\r\n return this.errorId ? this.errorId : super.getErrorId();\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value) {\r\n this.value = value || '';\r\n } else {\r\n this.value = '';\r\n }\r\n this.onChange(this.value);\r\n }\r\n\r\n checkRequired(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n if (!this.hasLabel()) {\r\n throw Error('label is required');\r\n }\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-select-item',\r\n templateUrl: './select-item.component.html'\r\n})\r\nexport class SelectItemComponent extends ContentBaseComponent {\r\n\r\n @Input() disabled: boolean;\r\n}\r\n","import {Component, forwardRef, Input} from '@angular/core';\r\nimport {SelectItemData} from '../../../interfaces';\r\nimport {SelectItemComponent} from '../select-item/select-item.component';\r\n\r\n@Component({\r\n selector: 'desy-option',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>',\r\n providers: [{provide: SelectItemComponent, useExisting: forwardRef(() => OptionComponent)}],\r\n})\r\nexport class OptionComponent extends SelectItemComponent implements SelectItemData {\r\n\r\n @Input() value: string;\r\n @Input() selected: boolean;\r\n @Input() hidden: boolean;\r\n\r\n}\r\n","import {Component, ContentChildren, forwardRef, Input, QueryList} from '@angular/core';\r\nimport {SelectItemComponent} from '../select-item/select-item.component';\r\nimport {OptionComponent} from '../option/option.component';\r\n\r\n@Component({\r\n selector: 'desy-option-group',\r\n templateUrl: './option-group.component.html',\r\n providers: [{provide: SelectItemComponent, useExisting: forwardRef(() => OptionGroupComponent)}],\r\n})\r\nexport class OptionGroupComponent extends SelectItemComponent {\r\n\r\n @Input() label: string;\r\n\r\n @ContentChildren(OptionComponent) items: QueryList<OptionComponent>;\r\n}\r\n","import {Component, forwardRef, Input, OnInit, OnChanges, SimpleChanges, ContentChildren, QueryList, AfterContentInit} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport { SelectItemData } from '../../interfaces';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\nimport {OptionGroupComponent} from './option-group/option-group.component';\r\nimport {SelectItemComponent} from './select-item/select-item.component';\r\n\r\n@Component({\r\n selector: 'desy-select',\r\n templateUrl: './select.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class SelectComponent extends FormFieldComponent<any> implements OnInit, OnChanges, AfterContentInit {\r\n\r\n @Input() name: string;\r\n @Input() items: SelectItemData[];\r\n @Input() describedBy?: string;\r\n\r\n @Input() formGroupClasses: string;\r\n @Input() classes: string;\r\n\r\n @ContentChildren(SelectItemComponent) itemComponents: QueryList<SelectItemComponent>;\r\n contentInit = false;\r\n\r\n ngOnInit(): void {\r\n this.checkRequiredParams();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequiredParams();\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.contentInit = true;\r\n if (!this.value) {\r\n const items = this.getItems();\r\n const itemSelected = items?.find(item => item.selected);\r\n if (itemSelected) {\r\n setTimeout(() => this.writeValue(itemSelected.value));\r\n }\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n this.onChange(value);\r\n }\r\n\r\n getItems(): SelectItemData[] {\r\n const items = (this.itemComponents.length > 0) ? this.itemComponents.toArray() : this.items;\r\n if (this.contentInit && (!items || items.length === 0)) {\r\n throw new Error(`items are required`);\r\n }\r\n return items;\r\n }\r\n\r\n checkRequiredParams(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n }\r\n\r\n isItemSelected(item: SelectItemData): boolean {\r\n return this.value ? this.value === item.value : item.selected;\r\n }\r\n\r\n isOptionGroup(item: SelectItemData): boolean {\r\n return item instanceof OptionGroupComponent;\r\n }\r\n\r\n}\r\n","import { Component, forwardRef, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\n\r\n@Component({\r\n selector: 'desy-file-upload',\r\n templateUrl: './file-upload.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n multi: true,\r\n useExisting: forwardRef(() => FileUploadComponent),\r\n }\r\n ]\r\n})\r\nexport class FileUploadComponent extends FormFieldComponent<File> implements ControlValueAccessor, OnChanges {\r\n\r\n @Input() name: string;\r\n @Input() describedBy: string;\r\n @Input() formGroupClasses: string;\r\n @Input() classes: string;\r\n @Input() accept: string;\r\n\r\n constructor() {\r\n super();\r\n }\r\n/***\r\n * nos devuelve un array de file : File[]\r\n * pero solo nos guardamos el primero\r\n * solo dejamos seleccionar uno\r\n */\r\n onInput(value: any): void{\r\n if (value && value.length > 0 && value[0]){\r\n this.value = value[0];\r\n }else {\r\n this.value = null;\r\n }\r\n this.onTouch();\r\n this.onChange(this.value);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequiredParams();\r\n }\r\n\r\n checkRequiredParams(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n if (!this.labelRef && !this.labelData && !this.labelText) {\r\n throw Error('label is required');\r\n }\r\n }\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ItemInputGroupData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-input-group-item',\r\n template: ''\r\n})\r\nexport class InputGroupItemComponent implements ItemInputGroupData {\r\n @Input() classes?: string;\r\n\r\n}\r\n","/**\r\n * Decorador para controlar los cambios de un input\r\n * @param callbackName nombre de la función a la que se llamará tras aplicar el cambio\r\n */\r\nexport function DesyOnInputChange(callbackName: string): PropertyDecorator {\r\n return (target: any, propertyKey: string) => {\r\n const privateKeyName = `_${propertyKey}`;\r\n\r\n Object.defineProperty(target, propertyKey, {\r\n set(value): void {\r\n this[privateKeyName] = value;\r\n this[callbackName]();\r\n },\r\n get(): any {\r\n return this[privateKeyName];\r\n }\r\n });\r\n };\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'makeHtmlList'\r\n})\r\nexport class MakeHtmlListPipe implements PipeTransform {\r\n\r\n transform(classes: string[], valueForEmpty?: string): string|null {\r\n let filteredList = classes.filter(c => c).join(' ');\r\n if (filteredList.length === 0 && valueForEmpty) {\r\n filteredList = valueForEmpty;\r\n }\r\n return filteredList;\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {InputGroupItemComponent} from '../input-group-item/input-group-item.component';\r\nimport {LabelComponent} from '../../label/label.component';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-input-group-input',\r\n templateUrl: './input-group-input.component.html',\r\n providers: [{provide: InputGroupItemComponent, useExisting: forwardRef(() => InputGroupInputComponent)}],\r\n})\r\nexport class InputGroupInputComponent extends InputGroupItemComponent implements AfterContentInit {\r\n\r\n isSelect = false;\r\n\r\n @Input() id?: string;\r\n @Input() name: string;\r\n @Input() value?: any;\r\n @Output() valueChange = new EventEmitter<any>();\r\n @Input() formGroupClasses?: string;\r\n\r\n @Input() type?: string;\r\n @Input() inputmode?: string;\r\n @Input() autocomplete?: string;\r\n @Input() placeholder?: string;\r\n @Input() pattern?: string;\r\n @Input() maxlength?: number;\r\n\r\n @ViewChild('label', { static: true }) labelRef: TemplateRef<any>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LabelComponent) labelComponent: LabelComponent;\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('item name is required');\r\n }\r\n if (!this.labelComponent) {\r\n throw Error('item label is required');\r\n }\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n QueryList,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {InputGroupItemComponent} from '../input-group-item/input-group-item.component';\r\nimport {OptionComponent} from '../../select/option/option.component';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {LabelComponent} from '../../label/label.component';\r\n\r\n@Component({\r\n selector: 'desy-input-group-select',\r\n templateUrl: './input-group-select.component.html',\r\n providers: [{provide: InputGroupItemComponent, useExisting: forwardRef(() => InputGroupSelectComponent)}],\r\n})\r\nexport class InputGroupSelectComponent extends InputGroupItemComponent implements AfterContentInit {\r\n\r\n isSelect = true;\r\n\r\n @Input() id?: string;\r\n @Input() name: string;\r\n @Input() value?: any;\r\n @Output() valueChange = new EventEmitter<any>();\r\n @Input() formGroupClasses?: string;\r\n\r\n @ViewChild('label', { static: true }) labelRef: TemplateRef<any>;\r\n @ContentChildren(OptionComponent) selectItemComponentList: QueryList<OptionComponent>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LabelComponent) labelComponent: LabelComponent;\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('item name is required');\r\n }\r\n if (!this.labelComponent) {\r\n throw Error('item label is required');\r\n }\r\n }\r\n}\r\n","import {Component, forwardRef, TemplateRef, ViewChild} from '@angular/core';\r\nimport {InputGroupItemComponent} from '../input-group-item/input-group-item.component';\r\nimport {ItemDividerInputGroupData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-input-group-divider',\r\n templateUrl: './input-group-divider.component.html',\r\n providers: [{provide: InputGroupItemComponent, useExisting: forwardRef(() => InputGroupDividerComponent)}],\r\n})\r\nexport class InputGroupDividerComponent extends InputGroupItemComponent implements ItemDividerInputGroupData {\r\n\r\n isSelect = false;\r\n divider = this;\r\n\r\n @ViewChild('dividerContent', { static: true }) dividerContent: TemplateRef<any>;\r\n\r\n}\r\n","import {\r\n AfterContentInit, AfterViewChecked,\r\n Component,\r\n ContentChildren, EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n Optional, Output,\r\n QueryList,\r\n TemplateRef, ViewChild\r\n} from '@angular/core';\r\nimport {FieldsetData, LegendData, ItemInputGroupData, LabelData, SelectItemData} from '../../interfaces';\r\nimport { ControlContainer, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { LegendComponent } from '../fieldset/legend/legend.component';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\nimport {InputGroupItemComponent} from './input-group-item/input-group-item.component';\r\nimport {DesyOnInputChange} from '../../../shared/decorators/desy-on-input-change.decorator';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\nimport {FieldsetComponent} from '../fieldset/fieldset.component';\r\nimport {MakeHtmlListPipe} from '../../../shared/pipes/make-html-list.pipe';\r\nimport {InputGroupInputComponent} from './input-group-input/input-group-input.component';\r\nimport {InputGroupSelectComponent} from './input-group-select/input-group-select.component';\r\nimport {InputGroupDividerComponent} from './input-group-divider/input-group-divider.component';\r\nimport {StringUtils} from '../../../shared/utils/string-utils';\r\n\r\n@Component({\r\n selector: 'desy-input-group',\r\n templateUrl: './input-group.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputGroupComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class InputGroupComponent extends FormFieldComponent<any> implements OnChanges, AfterContentInit, AfterViewChecked {\r\n\r\n @Input() ngModelGroup: string;\r\n\r\n @DesyOnInputChange('onExternalChange')\r\n @Input() items: ItemInputGroupData[];\r\n @Output() itemsChange: EventEmitter<ItemInputGroupData[]> = new EventEmitter<ItemInputGroupData[]>();\r\n\r\n @DesyOnInputChange('onExternalChange')\r\n @Input() namePrefix: string;\r\n @Input() classes: string;\r\n @Input() formGroupClasses: any;\r\n @Input() errorMessage: string;\r\n @Input() id: string;\r\n\r\n /**\r\n * fieldset, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir objeto FieldsetData (interfaz expuesta)\r\n * 2) incluir template legend\r\n * 3) incluir legendData - incluir un fieldset con una legenda con los parametros pasados (interfaz expuesta)\r\n * 4) incluir legendText - incluir un fieldset con un texto en la legenda\r\n */\r\n @Input() fieldsetData: FieldsetData;\r\n @Input() legendRef: TemplateRef<LegendComponent>;\r\n @Input() legendData: LegendData;\r\n @Input() legendText: string;\r\n\r\n @ContentChildren(InputGroupItemComponent) itemsComponents: QueryList<InputGroupItemComponent>;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideFieldsetParams'})\r\n @ContentChildren(FieldsetComponent) fieldsetComponent: FieldsetComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LegendComponent) legendComponent: LegendComponent;\r\n\r\n @ViewChild('innerHtml', { static: true }) innerHtml: TemplateRef<any>;\r\n\r\n private contentInit = false;\r\n\r\n constructor(@Optional() public controlContainer: ControlContainer) {\r\n super();\r\n }\r\n\r\n ngOnChanges(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (this.items) {\r\n for (const item of this.items) {\r\n if (!item.divider && !item.name) {\r\n throw Error('item name is required');\r\n }\r\n if (!item.divider && !this.hasItemLabel(item)) {\r\n throw Error('item label is required');\r\n }\r\n }\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.contentInit = true;\r\n }\r\n\r\n ngAfterViewChecked(): void {\r\n const items = this.getItems();\r\n if (!items || items.length === 0) {\r\n throw Error('items are required');\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value) {\r\n this.value = value;\r\n const items = this.getItems();\r\n items.forEach(item => {\r\n const v = this.value[this.getItemName(item)];\r\n item.value = v ? v : null;\r\n });\r\n\r\n if (this.items) {\r\n this.itemsChange.emit(this.items);\r\n }\r\n }\r\n this.onChange(value);\r\n }\r\n\r\n onExternalChange(): void {\r\n if (!this.contentInit) {\r\n return;\r\n }\r\n\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n\r\n const items = this.getItems();\r\n items.forEach(item => this.value[this.getItemName(item)] = item.value);\r\n this.onChange(this.value);\r\n }\r\n\r\n onInternalChange(item: ItemInputGroupData, itemValue: any): void {\r\n const itemName = this.getItemName(item);\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n\r\n if (this.value[itemName] !== itemValue) {\r\n this.value[itemName] = itemValue;\r\n this.onChange(this.value);\r\n\r\n if (item instanceof InputGroupInputComponent || item instanceof InputGroupSelectComponent) {\r\n item.valueChange.emit(itemValue);\r\n }\r\n\r\n if (this.items) {\r\n item.value = itemValue;\r\n this.itemsChange.emit(this.items);\r\n }\r\n }\r\n }\r\n\r\n overrideFieldsetParams(fieldset: FieldsetComponent): void {\r\n fieldset.caller = this.innerHtml;\r\n fieldset.errorId = this.getErrorId();\r\n fieldset.describedBy = new MakeHtmlListPipe().transform([this.getHintId(), this.getErrorId()], null);\r\n fieldset.role = 'group';\r\n fieldset.detectChanges();\r\n }\r\n\r\n /*\r\n * Métodos para proporcionar datos\r\n */\r\n getItems(): ItemInputGroupData[] {\r\n return this.itemsComponents && this.itemsComponents.length ? this.itemsComponents.toArray() : this.items;\r\n }\r\n\r\n getItemLabelRef(item: ItemInputGroupData): TemplateRef<any> {\r\n return item instanceof InputGroupInputComponent || item instanceof InputGroupSelectComponent ? item.labelRef : null;\r\n }\r\n\r\n getItemLabelData(item: ItemInputGroupData): LabelData {\r\n return item.labelData ? item.labelData : { text: item.labelText };\r\n }\r\n\r\n hasFieldset(): boolean {\r\n return !!(this.hasFieldsetComponent() || this.hasLegendComponent() || this.legendRef || this.fieldsetData\r\n || (this.legendData && (this.legendData.text || this.legendData.html)) || this.legendText);\r\n }\r\n\r\n hasFieldsetComponent(): boolean {\r\n return !!this.fieldsetComponent;\r\n }\r\n\r\n hasLegendComponent(): boolean {\r\n return !!this.legendComponent;\r\n }\r\n\r\n getItemName(item: ItemInputGroupData): string {\r\n return this.namePrefix ? this.namePrefix + '-' + item.name : item.name;\r\n }\r\n\r\n getItemSelectOptions(item: ItemInputGroupData): SelectItemData[] {\r\n return item instanceof InputGroupSelectComponent ?\r\n item.selectItemComponentList.toArray() : item.selectItems;\r\n }\r\n\r\n getItemDividerTemplate(item: ItemInputGroupData): TemplateRef<any> {\r\n return item.divider instanceof InputGroupDividerComponent ? item.divider.dividerContent : null;\r\n }\r\n\r\n getItemDividerHtml(item: ItemInputGroupData): string {\r\n return item.divider.html ? item.divider.html : `<p>${ StringUtils.escapeHtml(item.divider.text) }</p>`;\r\n }\r\n\r\n isSelectItem(item: ItemInputGroupData): boolean {\r\n let hasSelectItems;\r\n if (item instanceof InputGroupSelectComponent) {\r\n hasSelectItems = item.selectItemComponentList && item.selectItemComponentList.length > 0;\r\n } else {\r\n hasSelectItems = item.selectItems;\r\n }\r\n return item.isSelect && hasSelectItems;\r\n }\r\n\r\n hasItemLabel(item: ItemInputGroupData): boolean {\r\n return !!((item.labelData && (item.labelData.text || item.labelData.html)) || item.labelText);\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n ElementRef,\r\n EventEmitter,\r\n Host,\r\n Input,\r\n OnChanges, OnDestroy, OnInit,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {ItemRadioData} from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {LabelComponent} from '../../label/label.component';\r\nimport {ContentComponent} from '../../../../desy-commons/components/content/content.component';\r\nimport {RadiosComponent} from '../radios.component';\r\nimport {animate, animateChild, query, state, style, transition, trigger} from '@angular/animations';\r\nimport {HintComponent} from '../../hint/hint.component';\r\n\r\n\r\n@Component({\r\n selector: 'desy-radio-item',\r\n templateUrl: './radio-item.component.html',\r\n animations: [\r\n trigger('displayConditional', [\r\n state('void', style({\r\n opacity: '0.0',\r\n transform: 'scale(0.95)'\r\n })),\r\n state('*', style({\r\n opacity: '1.0',\r\n transform: 'scale(1.0)'\r\n })),\r\n transition(':enter', [\r\n animate('100ms ease-out')\r\n ]),\r\n transition('* => *', [\r\n query('@*', animateChild(), {optional: true})\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class RadioItemComponent extends ContentBaseComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit, ItemRadioData {\r\n\r\n @ViewChild('input') inputElement: ElementRef;\r\n\r\n @Input() id: string;\r\n @Input() name: string;\r\n @Input() value: any;\r\n @Input() conditional: boolean;\r\n @Input() disabled: boolean;\r\n @Input() classes: string;\r\n @Input() divider: string;\r\n\r\n @ContentChildren(LabelComponent) labelComponentList: QueryList<LabelComponent>;\r\n @ContentChildren(HintComponent) hintComponentList: QueryList<HintComponent>;\r\n @ContentChildren(ContentComponent) conditionalContentList: QueryList<ContentComponent>;\r\n\r\n @Input() checked: boolean;\r\n @Output() checkedChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n index = 0;\r\n lastChecked;\r\n lastValue;\r\n radioId;\r\n\r\n constructor(@Host() private radios: RadiosComponent, private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n if (!this.radios) {\r\n throw Error('Radios items must be inside of RadiosComponent');\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.radios.markForUpdateCheckboxIds();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.radios.markForUpdateCheckboxIds();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.value && !this.divider) {\r\n throw Error('value or divider are required for checkbox item');\r\n }\r\n\r\n if (this.checked !== this.lastChecked && this.isInit()) {\r\n this.setChecked(this.checked);\r\n this.radios.updateValueFromRadioItems();\r\n } else if (this.lastValue !== undefined && this.lastValue !== this.value) {\r\n this.radios.updateValueFromRadioItems();\r\n }\r\n this.lastValue = this.value;\r\n\r\n if (this.id !== this.radioId) {\r\n this.radios.markForUpdateCheckboxIds();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.setChecked(this.checked);\r\n this.radios.updateValueFromRadioItems();\r\n }\r\n\r\n setChecked(checked: boolean): void {\r\n this.checked = checked;\r\n this.lastChecked = checked;\r\n this.checkedChange.emit(checked);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n /*\r\n * Funciones para aportar información desde el componente checkboxes que lo contiene\r\n */\r\n\r\n getItemHintId(): string {\r\n return this.hintComponentList && this.hintComponentList.length > 0 && this.radioId ? this.radioId + '-item-hint' : null;\r\n }\r\n\r\n hasChanged(): void {\r\n this.setChecked(this.isInputChecked());\r\n this.radios.updateValueFromRadioItems();\r\n }\r\n\r\n isInit(): boolean {\r\n return !!this.inputElement;\r\n }\r\n\r\n isInputChecked(): boolean {\r\n return this.inputElement ? this.inputElement.nativeElement.checked : null;\r\n }\r\n\r\n updateRadioId(index?: number): void {\r\n if (this.id) {\r\n this.radioId = this.id;\r\n } else {\r\n const idPrefix = this.radios.idPrefix ? this.radios.idPrefix : this.radios.name;\r\n if (index === 0) {\r\n this.radioId = idPrefix;\r\n } else {\r\n this.radioId = `${idPrefix}-${index}`;\r\n }\r\n }\r\n\r\n if (this.labelComponentList && this.labelComponentList.length > 0) {\r\n this.labelComponentList.first.for = this.radioId;\r\n }\r\n\r\n if (this.hintComponentList && this.hintComponentList.length > 0) {\r\n this.hintComponentList.first.id = this.getItemHintId();\r\n }\r\n\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n /*\r\n * Funciones para aportar información desde el componente checkboxes que lo contiene\r\n */\r\n\r\n hasDividers(): boolean {\r\n return this.radios.hasDividers;\r\n }\r\n\r\n hasError(): boolean {\r\n return this.radios.hasErrorsMessage();\r\n }\r\n\r\n getNameRadio(): string {\r\n return this.radios.name;\r\n }\r\n\r\n getDescribedBy(): string {\r\n return !this.radios.hasFieldset() ? this.radios.describedBy : null;\r\n }\r\n\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren,\r\n DoCheck,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n QueryList,\r\n TemplateRef, ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {FieldsetData, ItemRadioData, LegendData} from '../../interfaces';\r\nimport {LegendComponent} from '../fieldset/legend/legend.component';\r\nimport {FormFieldComponent} from '../form-field/form-field.component';\r\nimport {RadioItemComponent} from './radio-item/radio-item.component';\r\nimport {FieldsetComponent} from '../fieldset/fieldset.component';\r\nimport {MakeHtmlListPipe} from '../../../shared/pipes/make-html-list.pipe';\r\nimport {HintComponent} from '../hint/hint.component';\r\nimport {ErrorMessageComponent} from '../error-message/error-message.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\nimport {DesyOnInputChange} from '../../../shared/decorators/desy-on-input-change.decorator';\r\n\r\n@Component({\r\n selector: 'desy-radios',\r\n templateUrl: './radios.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RadiosComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class RadiosComponent extends FormFieldComponent<any> implements DoCheck, AfterContentInit {\r\n\r\n\r\n /**\r\n * fieldset, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir componente FieldsetComponent\r\n * 2) incluir objeto FieldsetData (interfaz expuesta)\r\n * 3) incluir componente LegendComponent\r\n * 4) incluir template legend\r\n * 5) incluir legendData - incluir un fieldset con una legenda con los parametros pasados (interfaz expuesta)\r\n * 6) incluir legendText - incluir un fieldset con un texto en la legenda\r\n */\r\n @Input() fieldsetData: FieldsetData;\r\n @Input() legendRef: TemplateRef<LegendComponent>;\r\n @Input() legendData: LegendData;\r\n @Input() legendText: string;\r\n\r\n @DesyOnInputChange('onIdPrefixChange')\r\n @Input() idPrefix: string;\r\n\r\n @DesyOnInputChange('onNameChange')\r\n @Input() name: string;\r\n\r\n @Input() items: ItemRadioData[];\r\n @Output() itemsChange = new EventEmitter<ItemRadioData[]>();\r\n\r\n @Input() formGroupClasses: string;\r\n @Input() hasDividers: boolean;\r\n @Input() hasError: boolean;\r\n @Input() classes: string;\r\n @Input() describedBy: string;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideFieldsetParams'})\r\n @ContentChildren(FieldsetComponent) fieldsetComponent: FieldsetComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LegendComponent) legendComponent: LegendComponent;\r\n\r\n @ContentChildren(RadioItemComponent) radioComponentItems: QueryList<RadioItemComponent>;\r\n\r\n @ViewChild('innerHtml', { static: true }) innerHtml: TemplateRef<any>;\r\n @ViewChildren(RadioItemComponent) radioComponentItems2: QueryList<RadioItemComponent>;\r\n\r\n private nextValue = null;\r\n private updateChekboxIds = false;\r\n private contentInit = false;\r\n\r\n ngDoCheck(): void {\r\n if (this.nextValue !== null && (this.nextValue !== '' || (this.value && this.value !== ''))) {\r\n this.value = this.nextValue;\r\n this.nextValue = null;\r\n const updateItems = this.updateRadioItemsChecked();\r\n setTimeout(() => {\r\n this.onChange(this.value);\r\n if (updateItems && this.items && this.items.length > 0) {\r\n this.itemsChange.emit(this.items);\r\n }\r\n });\r\n }\r\n\r\n if (this.updateChekboxIds) {\r\n const checkboxItems = this.getRadioItems();\r\n if (checkboxItems.length > 0) {\r\n checkboxItems.forEach((item, index) => item.updateRadioId(index));\r\n } else {\r\n throw Error('items are required');\r\n }\r\n this.updateChekboxIds = false;\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n\r\n this.contentInit = true;\r\n }\r\n\r\n /**\r\n * Se sobrescribe el writeValue de FormField para gestionar en un único punto el valor de value\r\n * @param value nuevo valor a establecer\r\n */\r\n writeValue(value: any[]): void {\r\n if (value) {\r\n this.nextValue = value;\r\n }\r\n }\r\n\r\n onIdPrefixChange(): void {\r\n if (this.contentInit) {\r\n this.markForUpdateCheckboxIds();\r\n }\r\n this.propagateNewIdPrefixValue();\r\n }\r\n\r\n\r\n onNameChange(): void {\r\n if (this.contentInit && !this.name) {\r\n throw Error('name is required');\r\n }\r\n\r\n if (this.contentInit) {\r\n this.markForUpdateCheckboxIds();\r\n }\r\n\r\n this.propagateNewIdPrefixValue();\r\n }\r\n\r\n /**\r\n * Actualiza los componentes externos que tienen valores dependientes de idPrefix\r\n * @private\r\n */\r\n private propagateNewIdPrefixValue(): void {\r\n if (this.hintComponent) {\r\n this.overrideHintParams(this.hintComponent);\r\n }\r\n\r\n if (this.errorMessageComponent) {\r\n this.overrideErrorMessageParams(this.errorMessageComponent);\r\n }\r\n\r\n // Al hacer el override de hint o error ya se aplica sobre el fieldset, por lo que sólo es necesario aplicarlo directamente\r\n // sobre el fieldset cuando ninguno de estos existe\r\n if (!this.hintComponent && !this.errorMessageComponent && this.fieldsetComponent) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n markForUpdateCheckboxIds(): void {\r\n this.updateChekboxIds = true;\r\n }\r\n\r\n /**\r\n * Actualiza el estado de los items según el valor asignado al componente\r\n */\r\n private updateRadioItemsChecked(): boolean {\r\n let itemsUpdated = false;\r\n const checkboxItems = this.getRadioItems();\r\n if (checkboxItems.length > 0) {\r\n checkboxItems.forEach(item => {\r\n if (item.value === this.value && !item.lastChecked) {\r\n item.setChecked(true);\r\n itemsUpdated = true;\r\n } else if (item.value !== this.value && item.lastChecked) {\r\n item.setChecked(false);\r\n itemsUpdated = true;\r\n }\r\n });\r\n }\r\n return itemsUpdated;\r\n }\r\n\r\n /**\r\n * Actualiza el valor cuando se produce un cambio en los items, tanto interno como externo\r\n */\r\n updateValueFromRadioItems(): void {\r\n\r\n /*\r\n * Se realiza dentro de un timeout porque, aunque los componentes items se hayan inicializado, en este componente puede ser que todavía\r\n * no se detecten, y por tanto el getCheckboxItems no devuelva la lista correcta.\r\n */\r\n setTimeout( () => {\r\n const items = this.getRadioItems();\r\n if (items && items.length > 0 && items.findIndex(item => !item.isInit() && !item.divider) < 0) {\r\n const checkedItem = items.find(item => item.isInputChecked() && !item.divider);\r\n this.nextValue = checkedItem ? checkedItem.value : null;\r\n }\r\n });\r\n\r\n if (this.items && this.items.length > 0) {\r\n this.itemsChange.emit(this.items);\r\n }\r\n }\r\n\r\n /*\r\n * Funciones para reemplazar el contenido del fieldset, label, hint o errormessage\r\n */\r\n\r\n overrideFieldsetParams(fieldset: FieldsetComponent): void {\r\n fieldset.caller = this.innerHtml;\r\n fieldset.errorId = this.getErrorId();\r\n fieldset.describedBy = new MakeHtmlListPipe().transform([this.getHintId(), this.getErrorId()], null);\r\n fieldset.detectChanges();\r\n }\r\n\r\n overrideHintParams(hint: HintComponent): void {\r\n hint.id = this.getHintId();\r\n hint.detectChanges();\r\n\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n overrideErrorMessageParams(errorMessage: ErrorMessageComponent): void {\r\n errorMessage.id = this.getErrorId();\r\n errorMessage.detectChanges();\r\n\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n onDeleteHint(): void {\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n onDeleteErrorMessage(): void {\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Funciones para recuperar valores comunes\r\n */\r\n\r\n hasFieldset(): boolean {\r\n return !!(this.hasFieldsetComponent() || this.hasLegendComponent() || this.legendRef || this.fieldsetData ||\r\n (this.legendData && (this.legendData.text || this.legendData.html)) || this.legendText);\r\n }\r\n\r\n hasFieldsetComponent(): boolean {\r\n return !!this.fieldsetComponent;\r\n }\r\n\r\n hasLegendComponent(): boolean {\r\n return !!this.legendComponent;\r\n }\r\n\r\n getErrorId(): string {\r\n return this.hasErrorsMessage() ? this.getIdPrefix() + '-error' : null;\r\n }\r\n\r\n getHintId(): string {\r\n return this.hasHint() ? this.getIdPrefix() + '-hint' : null;\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : this.name;\r\n }\r\n\r\n getRadioItems(): RadioItemComponent[] {\r\n let checkboxItems = [];\r\n if (this.radioComponentItems && this.radioComponentItems.length > 0) {\r\n checkboxItems = this.radioComponentItems.toArray();\r\n } else if (this.radioComponentItems2 && this.radioComponentItems2.length > 0) {\r\n checkboxItems = this.radioComponentItems2.toArray();\r\n }\r\n return checkboxItems;\r\n }\r\n}\r\n","import {\r\n AfterViewInit, ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n ElementRef,\r\n EventEmitter,\r\n Host,\r\n Input, OnChanges, OnDestroy, OnInit,\r\n Output, QueryList, SimpleChanges,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {ItemCheckboxData} from '../../../interfaces';\r\nimport {ContentComponent} from '../../../../desy-commons/components/content/content.component';\r\nimport {animate, animateChild, query, state, style, transition, trigger} from '@angular/animations';\r\nimport {LabelComponent} from '../../label/label.component';\r\nimport {HintComponent} from '../../hint/hint.component';\r\nimport {CheckboxesComponent} from '../checkboxes.component';\r\nimport {AccessibilityComponent} from '../../../../shared/components';\r\nimport {DesyOnInputChange} from \"../../../../shared/decorators/desy-on-input-change.decorator\";\r\n\r\n@Component({\r\n selector: 'desy-checkbox-item',\r\n templateUrl: './checkbox-item.component.html',\r\n animations: [\r\n trigger('displayConditional', [\r\n state('void', style({\r\n opacity: '0.0',\r\n transform: 'scale(0.95)'\r\n })),\r\n state('*', style({\r\n opacity: '1.0',\r\n transform: 'scale(1.0)'\r\n })),\r\n transition(':enter', [\r\n animate('100ms ease-out')\r\n ]),\r\n transition('* => *', [\r\n query('@*', animateChild(), {optional: true})\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class CheckboxItemComponent extends AccessibilityComponent implements OnInit, OnDestroy, OnChanges, AfterViewInit, ItemCheckboxData {\r\n\r\n @ViewChild('input') inputElement: ElementRef;\r\n\r\n @Input() id: string;\r\n @Input() value: any;\r\n @Input() name: string;\r\n @Input() conditional: boolean;\r\n @Input() disabled: boolean;\r\n @Input() isIndeterminate: boolean;\r\n\r\n @DesyOnInputChange('setIndeterminateStatus')\r\n @Input() indeterminateChecked: boolean;\r\n @Input() classes: string;\r\n\r\n @ContentChildren(LabelComponent) labelComponentList: QueryList<LabelComponent>;\r\n @ContentChildren(HintComponent) hintComponentList: QueryList<HintComponent>;\r\n @ContentChildren(ContentComponent) conditionalContentList: QueryList<ContentComponent>;\r\n\r\n @Input() checked: boolean;\r\n\r\n @Output() checkedChange: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() indeterminateChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n lastChecked;\r\n lastIndeterminate;\r\n lastValue;\r\n checkboxId;\r\n\r\n constructor(@Host() private checkboxes: CheckboxesComponent, private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n if (!this.checkboxes) {\r\n throw Error('Checkbox items must be inside of CheckboxesComponent');\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.checkboxes.markForUpdateCheckboxIds();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.checkboxes.markForUpdateCheckboxIds();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.value) {\r\n throw Error('value is required for checkbox item');\r\n }\r\n\r\n if (this.checked !== this.lastChecked && this.isInit()) {\r\n this.setChecked(this.checked);\r\n this.checkboxes.updateValueFromCheckboxItems();\r\n } else if (this.lastValue !== undefined && this.lastValue !== this.value) {\r\n this.checkboxes.updateValueFromCheckboxItems();\r\n }\r\n\r\n if(this.indeterminateChecked !== this.lastIndeterminate && this.isInit()){\r\n this.setIndeterminateChecked(this.indeterminateChecked);\r\n this.checkboxes.updateValueFromCheckboxItems();\r\n }\r\n\r\n\r\n this.lastValue = this.value;\r\n\r\n if (this.id !== this.checkboxId) {\r\n this.checkboxes.markForUpdateCheckboxIds();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.setChecked(this.checked);\r\n this.setIndeterminateChecked(this.indeterminateChecked);\r\n this.checkboxes.updateValueFromCheckboxItems();\r\n }\r\n\r\n getItemHintId(): string {\r\n return this.hintComponentList && this.hintComponentList.length > 0 && this.checkboxId ? this.checkboxId + '-item-hint' : null;\r\n }\r\n\r\n hasChanged(): void {\r\n // Se establece el cambio a visualizar en el input\r\n const input = this.inputElement.nativeElement;\r\n if (this.isIndeterminate) {\r\n if (input.readOnly) {\r\n input.checked = false;\r\n input.readOnly = false;\r\n } else if (!input.checked) {\r\n input.readOnly = true;\r\n input.indeterminate = true;\r\n }\r\n }\r\n this.setChecked(input.checked);\r\n this.setIndeterminateChecked(input.indeterminate);\r\n this.checkboxes.updateValueFromCheckboxItems();\r\n }\r\n\r\n setChecked(checked: boolean): void {\r\n this.checked = checked;\r\n this.lastChecked = checked;\r\n this.checkedChange.emit(checked);\r\n this.changeDetectorRef.detectChanges(); // Avisa al elemento input para que actualice su estado\r\n }\r\n\r\n setIndeterminateChecked(indeterminateChecked: boolean): void {\r\n this.indeterminateChecked = indeterminateChecked;\r\n this.lastIndeterminate = indeterminateChecked;\r\n this.indeterminateChange.emit(indeterminateChecked);\r\n this.changeDetectorRef.detectChanges(); // Avisa al elemento input para que actualice su estado\r\n }\r\n\r\n setIndeterminateStatus(): void {\r\n const input = this.inputElement?.nativeElement;\r\n if (input) {\r\n if (this.indeterminateChecked) {\r\n input.readOnly = true;\r\n input.indeterminate = true;\r\n } else if (input.readOnly) {\r\n input.readOnly = false;\r\n input.indeterminate = false;\r\n }\r\n }\r\n }\r\n\r\n isInit(): boolean {\r\n return !!this.inputElement;\r\n }\r\n\r\n getValue(): any {\r\n const input = this.inputElement.nativeElement;\r\n return input.checked || input.indeterminate ? this.value : null;\r\n }\r\n\r\n updateCheckboxId(index?: number): void {\r\n if (this.id) {\r\n this.checkboxId = this.id;\r\n } else {\r\n const idPrefix = this.checkboxes.idPrefix ? this.checkboxes.idPrefix : this.checkboxes.name;\r\n if (index === 0) {\r\n this.checkboxId = idPrefix;\r\n } else {\r\n this.checkboxId = `${idPrefix}-${index}`;\r\n }\r\n }\r\n\r\n if (this.labelComponentList && this.labelComponentList.length > 0) {\r\n this.labelComponentList.first.for = this.checkboxId;\r\n }\r\n\r\n if (this.hintComponentList && this.hintComponentList.length > 0) {\r\n this.hintComponentList.first.id = this.getItemHintId();\r\n }\r\n\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n /*\r\n * Funciones para aportar información desde el componente checkboxes que lo contiene\r\n */\r\n\r\n hasDividers(): boolean {\r\n return this.checkboxes.hasDividers;\r\n }\r\n\r\n hasError(): boolean {\r\n return this.checkboxes.hasErrorsMessage();\r\n }\r\n\r\n getNameCheckbox(): string {\r\n return this.checkboxes.name;\r\n }\r\n\r\n getDescribedBy(): string {\r\n return !this.checkboxes.hasFieldset() ? this.checkboxes.describedBy : null;\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren, DoCheck, EventEmitter,\r\n forwardRef,\r\n Input, Output,\r\n QueryList,\r\n TemplateRef, ViewChild, ViewChildren\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\nimport { FieldsetData, LegendData, ItemCheckboxData } from '../../interfaces';\r\nimport { LegendComponent } from '../fieldset/legend/legend.component';\r\nimport {CheckboxItemComponent} from './checkbox-item/checkbox-item.component';\r\nimport {HintComponent} from '../hint/hint.component';\r\nimport {ErrorMessageComponent} from '../error-message/error-message.component';\r\nimport {FieldsetComponent} from '../fieldset/fieldset.component';\r\nimport {MakeHtmlListPipe} from '../../../shared/pipes/make-html-list.pipe';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\nimport {DesyOnInputChange} from '../../../shared/decorators/desy-on-input-change.decorator';\r\n\r\n\r\n@Component({\r\n selector: 'desy-checkboxes',\r\n templateUrl: './checkboxes.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CheckboxesComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class CheckboxesComponent extends FormFieldComponent<any[]> implements AfterContentInit, DoCheck {\r\n\r\n /**\r\n * fieldset, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir componente FieldsetComponent\r\n * 2) incluir objeto FieldsetData (interfaz expuesta)\r\n * 3) incluir componente LegendComponent\r\n * 4) incluir template legend\r\n * 5) incluir legendData - incluir un fieldset con una legenda con los parametros pasados (interfaz expuesta)\r\n * 6) incluir legendText - incluir un fieldset con un texto en la legenda\r\n */\r\n @Input() fieldsetData: FieldsetData;\r\n @Input() legendRef: TemplateRef<LegendComponent>;\r\n @Input() legendData: LegendData;\r\n @Input() legendText: string;\r\n\r\n @DesyOnInputChange('onIdPrefixChange')\r\n @Input() idPrefix: string;\r\n\r\n @DesyOnInputChange('onNameChange')\r\n @Input() name: string;\r\n\r\n @Input() items: ItemCheckboxData[];\r\n @Output() itemsChange = new EventEmitter<ItemCheckboxData[]>();\r\n\r\n @Input() formGroupClasses: string;\r\n @Input() hasDividers: boolean;\r\n @Input() hasError: boolean;\r\n @Input() classes: string;\r\n @Input() describedBy: string;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideFieldsetParams'})\r\n @ContentChildren(FieldsetComponent) fieldsetComponent: FieldsetComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LegendComponent) legendComponent: LegendComponent;\r\n\r\n @ContentChildren(CheckboxItemComponent) checkboxComponentItems: QueryList<CheckboxItemComponent>;\r\n\r\n @ViewChild('innerHtml', { static: true }) innerHtml: TemplateRef<any>;\r\n @ViewChildren(CheckboxItemComponent) checkboxComponentItems2: QueryList<CheckboxItemComponent>;\r\n\r\n private nextValue = null;\r\n private updateChekboxIds = false;\r\n private contentInit = false;\r\n\r\n ngDoCheck(): void {\r\n if (this.nextValue !== null && (this.nextValue.length > 0 || (this.value && this.value.length > 0))) {\r\n this.value = this.nextValue;\r\n this.nextValue = null;\r\n this.updateCheckboxItemsChecked();\r\n setTimeout(() => {\r\n this.onChange(this.value);\r\n if (this.items && this.items.length > 0) {\r\n this.itemsChange.emit(this.items);\r\n }\r\n });\r\n }\r\n\r\n if (this.updateChekboxIds) {\r\n const checkboxItems = this.getCheckboxItems();\r\n if (checkboxItems.length > 0) {\r\n checkboxItems.forEach((item, index) => item.updateCheckboxId(index));\r\n } else {\r\n throw Error('items are required');\r\n }\r\n this.updateChekboxIds = false;\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('name is required');\r\n }\r\n\r\n this.contentInit = true;\r\n }\r\n\r\n /**\r\n * Se sobrescribe el writeValue de FormField para gestionar en un único punto el valor de value\r\n * @param value nuevo valor a establecer\r\n */\r\n writeValue(value: any[]): void {\r\n if (value) {\r\n this.nextValue = value;\r\n }\r\n }\r\n\r\n onIdPrefixChange(): void {\r\n if (this.contentInit) {\r\n this.markForUpdateCheckboxIds();\r\n }\r\n this.propagateNewIdPrefixValue();\r\n }\r\n\r\n\r\n onNameChange(): void {\r\n if (this.contentInit && !this.name) {\r\n throw Error('name is required');\r\n }\r\n\r\n if (this.contentInit) {\r\n this.markForUpdateCheckboxIds();\r\n }\r\n\r\n this.propagateNewIdPrefixValue();\r\n }\r\n\r\n /**\r\n * Actualiza los componentes externos que tienen valores dependientes de idPrefix\r\n * @private\r\n */\r\n private propagateNewIdPrefixValue(): void {\r\n if (this.hintComponent) {\r\n this.overrideHintParams(this.hintComponent);\r\n }\r\n\r\n if (this.errorMessageComponent) {\r\n this.overrideErrorMessageParams(this.errorMessageComponent);\r\n }\r\n\r\n // Al hacer el override de hint o error ya se aplica sobre el fieldset, por lo que sólo es necesario aplicarlo directamente\r\n // sobre el fieldset cuando ninguno de estos existe\r\n if (!this.hintComponent && !this.errorMessageComponent && this.fieldsetComponent) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n markForUpdateCheckboxIds(): void {\r\n this.updateChekboxIds = true;\r\n }\r\n\r\n\r\n /**\r\n * Actualiza el estado de los items según el valor asignado al componente\r\n */\r\n private updateCheckboxItemsChecked(): void {\r\n const checkboxItems = this.getCheckboxItems();\r\n if (checkboxItems.length > 0) {\r\n checkboxItems.forEach(item => {\r\n const itemChecked = this.value.findIndex(v => v === item.value) > -1;\r\n if (itemChecked !== item.lastChecked) {\r\n item.setChecked(itemChecked);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Actualiza el valor cuando se produce un cambio en los items, tanto interno como externo\r\n */\r\n updateValueFromCheckboxItems(): void {\r\n\r\n /*\r\n * Se realiza dentro de un timeout porque, aunque los componentes items se hayan inicializado, en este componente puede ser que todavía\r\n * no se detecten, y por tanto el getCheckboxItems no devuelva la lista correcta.\r\n */\r\n setTimeout( () => {\r\n const items = this.getCheckboxItems();\r\n if (items && items.length > 0 && items.findIndex(item => !item.isInit()) < 0) {\r\n this.nextValue = items.filter(item => item.checked).map(item => item.getValue());\r\n }\r\n });\r\n\r\n if (this.items && this.items.length > 0) {\r\n this.itemsChange.emit(this.items);\r\n }\r\n }\r\n\r\n /*\r\n * Funciones para reemplazar el contenido del fieldset, label, hint o errormessage\r\n */\r\n\r\n overrideFieldsetParams(fieldset: FieldsetComponent): void {\r\n fieldset.caller = this.innerHtml;\r\n fieldset.errorId = this.getErrorId();\r\n fieldset.describedBy = new MakeHtmlListPipe().transform([this.getHintId(), this.getErrorId()], null);\r\n fieldset.detectChanges();\r\n }\r\n\r\n overrideHintParams(hint: HintComponent): void {\r\n hint.id = this.getHintId();\r\n hint.detectChanges();\r\n\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n overrideErrorMessageParams(errorMessage: ErrorMessageComponent): void {\r\n errorMessage.id = this.getErrorId();\r\n errorMessage.detectChanges();\r\n\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n onDeleteHint(): void {\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n onDeleteErrorMessage(): void {\r\n if (this.hasFieldsetComponent()) {\r\n this.overrideFieldsetParams(this.fieldsetComponent);\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Funciones para recuperar valores comunes\r\n */\r\n\r\n\r\n hasFieldset(): boolean {\r\n return !!(this.hasFieldsetComponent() || this.hasLegendComponent() || this.legendRef || this.fieldsetData ||\r\n (this.legendData && (this.legendData.text || this.legendData.html)) || this.legendText);\r\n }\r\n\r\n hasFieldsetComponent(): boolean {\r\n return !!this.fieldsetComponent;\r\n }\r\n\r\n hasLegendComponent(): boolean {\r\n return !!this.legendComponent;\r\n }\r\n\r\n getErrorId(): string {\r\n return this.hasErrorsMessage() ? this.getIdPrefix() + '-error' : undefined;\r\n }\r\n\r\n getHintId(): string {\r\n return this.hasHint() ? this.getIdPrefix() + '-hint' : undefined;\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : this.name;\r\n }\r\n\r\n getCheckboxItems(): CheckboxItemComponent[] {\r\n let checkboxItems = [];\r\n if (this.checkboxComponentItems && this.checkboxComponentItems.length > 0) {\r\n checkboxItems = this.checkboxComponentItems.toArray();\r\n } else if (this.checkboxComponentItems2 && this.checkboxComponentItems2.length > 0) {\r\n checkboxItems = this.checkboxComponentItems2.toArray();\r\n }\r\n return checkboxItems;\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ItemDateInputData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-date-input-item',\r\n template: ''\r\n})\r\nexport class DateInputItemComponent implements ItemDateInputData {\r\n @Input() classes?: string;\r\n\r\n}\r\n","import {AfterContentInit, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, TemplateRef, ViewChild} from '@angular/core';\r\nimport { ItemDateInputData } from '../../../interfaces';\r\nimport { LabelData } from '../../../interfaces';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {LabelComponent} from '../../label/label.component';\r\nimport { DateInputItemComponent } from '../date-input-item/date-input-item.component';\r\n\r\n@Component({\r\n selector: 'desy-input-day',\r\n templateUrl: './date-input-day.component.html',\r\n providers: [{provide: DateInputItemComponent, useExisting: forwardRef(() => DateInputDayComponent)}],\r\n})\r\nexport class DateInputDayComponent extends DateInputItemComponent implements ItemDateInputData, AfterContentInit {\r\n @Input() id: string;\r\n @Input() name: string;\r\n @Input() labelText: string;\r\n @Input() labelData: LabelData;\r\n @Input() disabled: boolean;\r\n @Input() hasErrors: boolean;\r\n @Input() value: any;\r\n @Input() autocomplete: string;\r\n @Input() pattern: string;\r\n @Input() classes: string;\r\n @Input() maxlength: number;\r\n\r\n @Output() valueChange: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LabelComponent) labelComponent: LabelComponent;\r\n\r\n @ViewChild('label', { static: true }) labelRef: TemplateRef<any>;\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('day name is required');\r\n }\r\n if (!this.labelComponent) {\r\n throw Error('day label is required');\r\n }\r\n }\r\n}\r\n","import {AfterContentInit, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, TemplateRef, ViewChild} from '@angular/core';\r\nimport { ItemDateInputData } from '../../../interfaces';\r\nimport { LabelData } from '../../../interfaces';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {LabelComponent} from '../../label/label.component';\r\nimport { DateInputItemComponent } from '../date-input-item/date-input-item.component';\r\n\r\n@Component({\r\n selector: 'desy-input-month',\r\n templateUrl: './date-input-month.component.html',\r\n providers: [{provide: DateInputItemComponent, useExisting: forwardRef(() => DateInputMonthComponent)}],\r\n})\r\nexport class DateInputMonthComponent extends DateInputItemComponent implements ItemDateInputData, AfterContentInit {\r\n @Input() id: string;\r\n @Input() name: string;\r\n @Input() labelText: string;\r\n @Input() labelData: LabelData;\r\n @Input() disabled: boolean;\r\n @Input() hasErrors: boolean;\r\n @Input() value: any;\r\n @Input() autocomplete: string;\r\n @Input() pattern: string;\r\n @Input() classes: string;\r\n @Input() maxlength: number;\r\n\r\n @Output() valueChange: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LabelComponent) labelComponent: LabelComponent;\r\n\r\n @ViewChild('label', { static: true }) labelRef: TemplateRef<any>;\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('month name is required');\r\n }\r\n if (!this.labelComponent) {\r\n throw Error('month label is required');\r\n }\r\n }\r\n}\r\n","import {AfterContentInit, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, TemplateRef, ViewChild} from '@angular/core';\r\nimport { ItemDateInputData } from '../../../interfaces';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {LabelComponent} from '../../label/label.component';\r\nimport { DateInputItemComponent } from '../date-input-item/date-input-item.component';\r\n\r\n@Component({\r\n selector: 'desy-input-year',\r\n templateUrl: './date-input-year.component.html',\r\n providers: [{provide: DateInputItemComponent, useExisting: forwardRef(() => DateInputYearComponent)}],\r\n})\r\nexport class DateInputYearComponent extends DateInputItemComponent implements ItemDateInputData, AfterContentInit {\r\n @Input() id: string;\r\n @Input() name: string;\r\n @Input() disabled: boolean;\r\n @Input() hasErrors: boolean;\r\n @Input() value: any;\r\n @Input() autocomplete: string;\r\n @Input() pattern: string;\r\n @Input() classes: string;\r\n @Input() maxlength: number;\r\n\r\n @Output() valueChange: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LabelComponent) labelComponent: LabelComponent;\r\n\r\n @ViewChild('label', { static: true }) labelRef: TemplateRef<any>;\r\n\r\n ngAfterContentInit(): void {\r\n if (!this.name) {\r\n throw Error('year name is required');\r\n }\r\n if (!this.labelComponent) {\r\n throw Error('year label is required');\r\n }\r\n }\r\n}\r\n","import {Component, forwardRef, TemplateRef, ViewChild} from '@angular/core';\r\nimport { ItemDividerDateInputData } from '../../../interfaces/item-divider-date-input-data';\r\nimport { DateInputItemComponent } from '../date-input-item/date-input-item.component';\r\n\r\n@Component({\r\n selector: 'desy-date-input-divider',\r\n templateUrl: './date-input-divider.component.html',\r\n providers: [{provide: DateInputItemComponent, useExisting: forwardRef(() => DateInputDividerComponent)}],\r\n})\r\nexport class DateInputDividerComponent extends DateInputItemComponent implements ItemDividerDateInputData {\r\n\r\n divider = this;\r\n\r\n @ViewChild('dividerContent', { static: true }) dividerContent: TemplateRef<any>;\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren, EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n Optional, Output,\r\n QueryList,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { ControlContainer, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\nimport { FieldsetData, LegendData, ItemDateInputData, LabelData } from '../../interfaces';\r\nimport { LegendComponent } from '../fieldset/legend/legend.component';\r\nimport { FieldsetComponent } from '../fieldset/fieldset.component';\r\nimport { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';\r\nimport { DateInputDayComponent } from './date-input-day/date-input-day.component';\r\nimport { DateInputMonthComponent } from './date-input-month/date-input-month.component';\r\nimport { DateInputYearComponent } from './date-input-year/date-input-year.component';\r\nimport {MakeHtmlListPipe} from '../../../shared/pipes/make-html-list.pipe';\r\nimport {DesyOnInputChange} from '../../../shared/decorators/desy-on-input-change.decorator';\r\nimport { DateInputDividerComponent } from './date-input-divider/date-input-divider.component';\r\nimport { StringUtils } from '../../../shared/utils/string-utils';\r\nimport { DateInputItemComponent } from './date-input-item/date-input-item.component';\r\n\r\n@Component({\r\n selector: 'desy-date-input',\r\n templateUrl: './date-input.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DateInputComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class DateInputComponent extends FormFieldComponent<any> implements OnChanges, AfterContentInit {\r\n\r\n private static defaultItems = [\r\n {\r\n name: 'day',\r\n classes: 'w-14',\r\n maxlength: 2\r\n },\r\n {\r\n name: 'month',\r\n classes: 'w-14',\r\n maxlength: 2\r\n },\r\n {\r\n name: 'year',\r\n classes: 'w-20',\r\n maxlength: 4\r\n }\r\n ];\r\n\r\n @Input() ngModelGroup: string;\r\n\r\n @DesyOnInputChange('onExternalChange')\r\n @Input() items: ItemDateInputData[];\r\n @Output() itemsChange: EventEmitter<ItemDateInputData[]> = new EventEmitter<ItemDateInputData[]>();\r\n\r\n @DesyOnInputChange('onExternalChange')\r\n @Input() namePrefix: string;\r\n @Input() classes: string;\r\n @Input() formGroupClasses: any;\r\n @Input() errorMessage: string;\r\n @Input() id: string;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideFieldsetParams'})\r\n @ContentChildren(FieldsetComponent) fieldsetComponent: FieldsetComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LegendComponent) legendComponent: LegendComponent;\r\n\r\n @ContentChildren(DateInputItemComponent) dateInputItemComponents: QueryList<DateInputItemComponent>;\r\n\r\n /**\r\n * fieldset, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir objeto FieldsetData (interfaz expuesta)\r\n * 2) incluir template legend\r\n * 3) incluir legendData - incluir un fieldset con una legenda con los parametros pasados (interfaz expuesta)\r\n * 4) incluir legendText - incluir un fieldset con un texto en la legenda\r\n */\r\n @Input() fieldsetData: FieldsetData;\r\n @Input() legendRef: TemplateRef<LegendComponent>;\r\n @Input() legendData: LegendData;\r\n @Input() legendText: string;\r\n\r\n @ViewChild('innerHtml', { static: true }) innerHtml: TemplateRef<any>;\r\n\r\n private contentInit = false;\r\n\r\n constructor(@Optional() public controlContainer: ControlContainer) {\r\n super();\r\n }\r\n\r\n ngOnChanges(): void {\r\n this.checkRequired();\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.contentInit = true;\r\n }\r\n\r\n initDefaultItems(): void {\r\n if (!this.items) {\r\n this.items = [\r\n {\r\n name: 'día',\r\n classes: 'w-14',\r\n maxlength: 2\r\n },\r\n {\r\n name: 'mes',\r\n classes: 'w-14',\r\n maxlength: 2\r\n },\r\n {\r\n name: 'año',\r\n classes: 'w-20',\r\n maxlength: 4\r\n }\r\n ];\r\n }\r\n }\r\n\r\n checkRequired(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n if (this.value) {\r\n const items = this.getItems();\r\n items.forEach(item => item.value = this.value[this.getItemName(item)]);\r\n\r\n if (this.items) {\r\n this.itemsChange.emit(this.items);\r\n }\r\n }\r\n this.onChange(value);\r\n }\r\n\r\n overrideFieldsetParams(fieldset: FieldsetComponent): void {\r\n fieldset.caller = this.innerHtml;\r\n fieldset.errorId = this.getErrorId();\r\n fieldset.describedBy = new MakeHtmlListPipe().transform([this.getHintId(), this.getErrorId()], null);\r\n fieldset.role = 'group';\r\n fieldset.detectChanges();\r\n }\r\n\r\n onExternalChange(): void {\r\n if (!this.contentInit) {\r\n return;\r\n }\r\n\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n\r\n const items = this.getItems();\r\n items.forEach(item => this.value[this.getItemName(item)] = item.value);\r\n const newVal = {};\r\n Object.assign(newVal, this.value);\r\n this.onChange(newVal);\r\n }\r\n\r\n onInternalChange(item: ItemDateInputData, itemValue: number): void {\r\n const itemName = this.getItemName(item);\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n\r\n if (this.value[itemName] !== itemValue) {\r\n this.value[itemName] = itemValue ? +itemValue : undefined;\r\n const newVal = {};\r\n Object.assign(newVal, this.value);\r\n this.onChange(newVal);\r\n if (item instanceof DateInputDayComponent || item instanceof DateInputMonthComponent || item instanceof DateInputYearComponent) {\r\n item.valueChange.emit(itemValue);\r\n }\r\n\r\n if (this.items) {\r\n item.value = itemValue;\r\n this.itemsChange.emit(this.items);\r\n }\r\n }\r\n }\r\n\r\n hasFieldset(): boolean {\r\n return !!(this.hasFieldsetComponent() || this.hasLegendComponent() || this.legendRef || this.fieldsetData\r\n || (this.legendData && (this.legendData.text || this.legendData.html)) || this.legendText);\r\n }\r\n\r\n hasFieldsetComponent(): boolean {\r\n return !!this.fieldsetComponent;\r\n }\r\n\r\n hasLegendComponent(): boolean {\r\n return !!this.legendComponent;\r\n }\r\n\r\n hasErrorMessageComponent(): boolean {\r\n return !!this.errorMessageComponent;\r\n }\r\n\r\n getItemName(item: ItemDateInputData): string {\r\n return this.namePrefix ? this.namePrefix + '-' + item.name : item.name;\r\n }\r\n\r\n getItemLabel(item: ItemDateInputData): LabelData {\r\n let labelData: LabelData;\r\n if (item.labelData && (item.labelData.text || item.labelData.html)) {\r\n labelData = item.labelData;\r\n } else {\r\n labelData = {\r\n text: item.labelText ? item.labelText : item.name.toUpperCase()\r\n };\r\n }\r\n return labelData;\r\n }\r\n\r\n getItemLabelRef(item: ItemDateInputData): TemplateRef<any> {\r\n return item instanceof DateInputDayComponent || item instanceof DateInputMonthComponent || item instanceof DateInputYearComponent ?\r\n item.labelRef : null;\r\n }\r\n\r\n getItems(): ItemDateInputData[] {\r\n let items;\r\n if (this.dateInputItemComponents && this.dateInputItemComponents.length > 0) {\r\n items = this.dateInputItemComponents.toArray();\r\n } else if (this.items) {\r\n items = this.items;\r\n } else if (this.contentInit) {\r\n items = DateInputComponent.defaultItems;\r\n } else {\r\n items = [];\r\n }\r\n\r\n items.forEach(item => {\r\n if (!item.name && !(item instanceof DateInputDividerComponent)) {\r\n throw new Error('Item name is required');\r\n }\r\n });\r\n\r\n return items;\r\n }\r\n\r\n getItemDividerTemplate(item: ItemDateInputData): TemplateRef<any> {\r\n return item.divider instanceof DateInputDividerComponent ? item.divider.dividerContent : null;\r\n }\r\n getItemDividerHtml(item: ItemDateInputData): string {\r\n return item.divider.html ? item.divider.html : `<p>${ StringUtils.escapeHtml(item.divider.text) }</p>`;\r\n }\r\n\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n Output, QueryList,\r\n SimpleChanges\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormFieldComponent } from '../form-field/form-field.component';\r\nimport { ButtonComponent } from '../../../desy-buttons/components/button/button.component';\r\n\r\n@Component({\r\n selector: 'desy-search-bar',\r\n templateUrl: './search-bar.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SearchBarComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class SearchBarComponent extends FormFieldComponent<string> implements OnChanges, AfterViewInit {\r\n\r\n @ContentChildren(ButtonComponent) button: QueryList<ButtonComponent>;\r\n\r\n @Input() describedBy: string;\r\n @Input() classes: string;\r\n @Input() buttonClasses: string;\r\n @Input() placeholder: string;\r\n @Output() clickEvent = new EventEmitter();\r\n\r\n value = '';\r\n\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequiredParams();\r\n }\r\n\r\n checkRequiredParams(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n if (!this.hasLabel()) {\r\n throw Error('label is required');\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.button && this.button.length > 1) {\r\n throw Error('only 1 button in content is allowed');\r\n }\r\n }\r\n\r\n onClick(event: any): void {\r\n if (!this.disabled) {\r\n this.clickEvent.emit(event);\r\n }\r\n }\r\n\r\n hasButton(): boolean {\r\n return this.button && this.button.length > 0;\r\n }\r\n\r\n}\r\n","import { Directive, Input, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { ItemCheckboxData, ItemRadioWithTemplateData } from '../interfaces';\r\n\r\n@Directive({\r\n selector: '[desyCondition]'\r\n})\r\nexport class ConditionDirective implements OnChanges {\r\n\r\n /**\r\n * Condition, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir objeto ItemCheckboxData o ItemRadioWithTemplateData (interfaces expuesta)\r\n * 2) incluir value y el listado de ItemCheckboxData[] o ItemRadioWithTemplateData[]\r\n */\r\n @Input() item: ItemCheckboxData|ItemRadioWithTemplateData;\r\n\r\n @Input() value: any;\r\n @Input() items: ItemCheckboxData[]|ItemRadioWithTemplateData[];\r\n\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.item) {\r\n this.item.conditionalHtml = this.templateRef;\r\n } else if (this.value && this.items) {\r\n for (const item of this.items) {\r\n if (item.value === this.value) {\r\n item.conditionalHtml = this.templateRef;\r\n }\r\n }\r\n } else {\r\n throw Error('item or value + items are required');\r\n }\r\n }\r\n\r\n}\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {ModalButtonData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-modal-button-primary',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ModalButtonPrimaryComponent extends ContentBaseComponent implements ModalButtonData {\r\n @Input() classes?: string;\r\n\r\n @Output() clickEvent = new EventEmitter();\r\n}\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {ModalButtonData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-modal-button-secondary',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ModalButtonSecondaryComponent extends ContentBaseComponent implements ModalButtonData {\r\n @Input() classes?: string;\r\n\r\n @Output() clickEvent = new EventEmitter();\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren, ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n TemplateRef\r\n} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport { ModalButtonData, ModalData, ModalIconData } from '../../interfaces';\r\nimport {TitleComponent} from '../../../desy-commons/components/title/title.component';\r\nimport {DescriptionComponent} from '../../../desy-commons/components/description/description.component';\r\nimport {IconComponent} from '../../../desy-commons/components/icon/icon.component';\r\nimport {ContentComponent} from '../../../desy-commons/components/content/content.component';\r\nimport {ModalButtonPrimaryComponent} from './modal-button-primary/modal-button-primary.component';\r\nimport {ModalButtonSecondaryComponent} from './modal-button-secondary/modal-button-secondary.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-modal',\r\n templateUrl: './modal.component.html'\r\n})\r\nexport class ModalComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() title: ModalData;\r\n @Input() description: ModalData;\r\n @Input() itemsPrimary: ModalButtonData[];\r\n @Input() itemsSecondary: ModalButtonData[];\r\n @Input() icon: ModalIconData;\r\n @Input() headingLevel: number;\r\n\r\n @Input() isDismissible: boolean;\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() caller: TemplateRef<any>;\r\n\r\n @Output() closeModal: EventEmitter<void> = new EventEmitter();\r\n @Output() clickButton: EventEmitter<any> = new EventEmitter();\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TitleComponent) titleComponent: TitleComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(DescriptionComponent) descriptionComponent: DescriptionComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n @ContentChildren(ModalButtonPrimaryComponent) primaryButtonComponents: QueryList<ModalButtonPrimaryComponent>;\r\n @ContentChildren(ModalButtonSecondaryComponent) secondaryButtonComponents: QueryList<ModalButtonSecondaryComponent>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(IconComponent) iconComponent: IconComponent;\r\n\r\n hasIconContent = true;\r\n descriptionIsHtml = true;\r\n descriptionIsEmpty = false;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n closeDialog(): void {\r\n this.closeModal.emit();\r\n }\r\n\r\n getType(): string {\r\n let type: string;\r\n if (this.iconComponent) {\r\n type = this.iconComponent.type ? this.iconComponent.type.toLocaleLowerCase() : null;\r\n } else if (this.icon.type) {\r\n type = this.icon.type ? this.icon.type.toLocaleLowerCase() : null;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.id){\r\n throw new Error(`id are required`);\r\n }\r\n }\r\n\r\n handleRequiredEmpty(element: string): void {\r\n throw new Error(`${element} is required`);\r\n }\r\n\r\n checkDescriptionContent(element: ElementRef): void {\r\n const childs: NodeListOf<ChildNode> = element.nativeElement.childNodes;\r\n let hasHtml = false;\r\n let hasContent = false;\r\n for (let i = 0; i < childs.length && !hasHtml; i++) {\r\n const item = childs.item(i);\r\n if (item.nodeType === Node.TEXT_NODE && item.textContent.length > 0) {\r\n hasContent = true;\r\n } else if (item.nodeType === Node.ELEMENT_NODE || item.nodeType === Node.CDATA_SECTION_NODE) {\r\n hasHtml = true;\r\n hasContent = true;\r\n }\r\n }\r\n\r\n const descriptionWasEmpty = this.descriptionIsEmpty;\r\n this.descriptionIsEmpty = !hasContent;\r\n this.descriptionIsHtml = hasHtml;\r\n this.changeDetectorRef.detectChanges();\r\n\r\n if (!hasContent && !descriptionWasEmpty) {\r\n this.handleRequiredEmpty('description');\r\n }\r\n }\r\n\r\n clickButtonEmit(item: ModalButtonData, event): void{\r\n this.clickButton.emit(event);\r\n\r\n if (item instanceof ModalButtonPrimaryComponent || item instanceof ModalButtonSecondaryComponent) {\r\n item.clickEvent.emit(event);\r\n }\r\n }\r\n\r\n handleIconContentEmpty(isEmpty: boolean): void {\r\n this.hasIconContent = !isEmpty;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n getTitleClasses(): string {\r\n let classes = 'c-h2 px-base text-center focus:outline-none focus:underline';\r\n if (this.titleComponent && this.titleComponent.classes) {\r\n classes = this.titleComponent.classes;\r\n } else if (this.title && this.title.classes) {\r\n classes = this.title.classes;\r\n }\r\n return classes;\r\n }\r\n\r\n getDescriptionClasses(): string {\r\n let classes = 'c-paragraph-base my-base text-center';\r\n if (this.descriptionComponent && this.descriptionComponent.classes) {\r\n classes = this.descriptionComponent.classes;\r\n } else if (this.description && this.description.classes) {\r\n classes = this.description.classes;\r\n }\r\n return classes;\r\n }\r\n\r\n getPrimaryItems(): ModalButtonData[]|ModalButtonPrimaryComponent[] {\r\n return this.primaryButtonComponents && this.primaryButtonComponents.length > 0 ? this.primaryButtonComponents.toArray()\r\n : this.itemsPrimary;\r\n }\r\n\r\n getSecondaryItems(): ModalButtonData[]|ModalButtonPrimaryComponent[] {\r\n return this.secondaryButtonComponents && this.secondaryButtonComponents.length > 0 ? this.secondaryButtonComponents.toArray()\r\n : this.itemsSecondary;\r\n }\r\n}\r\n","import {\r\n Component,\r\n HostListener,\r\n OnChanges,\r\n OnDestroy,\r\n Input,\r\n ViewChild,\r\n ViewContainerRef,\r\n TemplateRef,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Output,\r\n EventEmitter, ComponentRef, ElementRef, Type, ComponentFactoryResolver\r\n} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';\r\nimport { FocusUtils } from '../../../shared/utils/focus-utils';\r\n\r\nlet numDialogsOpened = 0;\r\ntype DialogCreationCallback = ((dialog: DialogComponent, caller: ComponentRef<any>) => void);\r\n\r\n@Component({\r\n selector: 'desy-dialog',\r\n templateUrl: './dialog.component.html'\r\n})\r\nexport class DialogComponent extends AccessibilityComponent implements OnChanges, OnDestroy, AfterViewInit {\r\n\r\n static readonly DIALOG_OPEN_CLASS = 'has-dialog';\r\n static readonly KEY_CODE_ESC = 'Escape';\r\n\r\n @ViewChild('container', {read: ViewContainerRef}) container: ViewContainerRef;\r\n @ViewChild('focusTrapWrapper') focusTrapWrapper: ElementRef;\r\n\r\n @Input() active: boolean;\r\n @Output() activeChange = new EventEmitter<boolean>();\r\n\r\n @Input() id: any;\r\n @Input() caller: TemplateRef<any>;\r\n @Input() classes: string;\r\n @Input() focusOnClose: string|HTMLElement;\r\n @Input() dismissOnBackdrop: boolean;\r\n\r\n public callerType: Type<any>;\r\n public onCallerCreationCallback: DialogCreationCallback;\r\n\r\n lastActiveState = false;\r\n focusTrap: ConfigurableFocusTrap;\r\n clickOutsideEnabled = false;\r\n childElem: ElementRef;\r\n\r\n constructor(private cdRef: ChangeDetectorRef,\r\n private focusTrapFactory: ConfigurableFocusTrapFactory,\r\n private factoryResolver: ComponentFactoryResolver) {\r\n super();\r\n }\r\n\r\n ngOnChanges(): void {\r\n if (this.focusTrapWrapper) {\r\n this.handleActiveState();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n\r\n if (!this.caller && !this.callerType) {\r\n throw Error('caller is required');\r\n }\r\n\r\n if (this.callerType) {\r\n const factory = this.factoryResolver.resolveComponentFactory(this.callerType);\r\n const component = this.container.createComponent(factory);\r\n if (this.onCallerCreationCallback) {\r\n this.onCallerCreationCallback(this, component);\r\n }\r\n }\r\n\r\n if (this.focusTrapWrapper.nativeElement.children && this.focusTrapWrapper.nativeElement.children.length === 1) {\r\n this.childElem = this.focusTrapWrapper.nativeElement.children[0];\r\n }\r\n\r\n this.handleActiveState();\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.active = false;\r\n this.handleActiveState();\r\n }\r\n\r\n\r\n public dismiss(): void {\r\n this.activeChange.emit(false);\r\n }\r\n\r\n\r\n @HostListener('document:keyup', ['$event'])\r\n onKeyUp(event: KeyboardEvent): void {\r\n if (event.key === DialogComponent.KEY_CODE_ESC) {\r\n event.stopPropagation();\r\n this.dismiss();\r\n }\r\n }\r\n\r\n handleActiveState(): void {\r\n if (!this.focusTrap) {\r\n this.focusTrap = this.focusTrapFactory.create(this.focusTrapWrapper.nativeElement);\r\n }\r\n\r\n if (this.active !== this.lastActiveState) {\r\n this.lastActiveState = this.active;\r\n\r\n // Habilitar/deshabilitar scroll\r\n if (this.active && numDialogsOpened === 0) {\r\n document.body.classList.add(DialogComponent.DIALOG_OPEN_CLASS);\r\n } else if (!this.active && numDialogsOpened === 1) {\r\n document.body.classList.remove(DialogComponent.DIALOG_OPEN_CLASS);\r\n if (document.body.classList.length === 0) {\r\n document.body.removeAttribute('class');\r\n }\r\n }\r\n\r\n if (this.active) {\r\n setTimeout(() => this.focusTrap.focusInitialElement());\r\n numDialogsOpened++;\r\n } else {\r\n let focusElem: HTMLElement;\r\n this.focusTrap.destroy();\r\n if (this.focusOnClose) {\r\n if (typeof this.focusOnClose === 'string') {\r\n focusElem = document.getElementById(this.focusOnClose);\r\n } else {\r\n focusElem = this.focusOnClose;\r\n }\r\n } else {\r\n focusElem = FocusUtils.getFirstFocusableElement();\r\n }\r\n if (focusElem) {\r\n setTimeout(() => focusElem.focus());\r\n }\r\n numDialogsOpened--;\r\n }\r\n\r\n setTimeout(() => this.clickOutsideEnabled = this.active);\r\n }\r\n }\r\n\r\n handleClickOutside(): void {\r\n if (this.dismissOnBackdrop) {\r\n this.dismiss();\r\n }\r\n }\r\n}\r\n","import {\r\n ApplicationRef,\r\n ComponentFactoryResolver,\r\n ComponentRef, EmbeddedViewRef,\r\n Injectable,\r\n Injector,\r\n TemplateRef,\r\n Type\r\n} from '@angular/core';\r\nimport { DialogOptions, ModalOptions, OpenDialogResult } from '../interfaces';\r\nimport { DialogComponent } from '../components/dialog/dialog.component';\r\nimport { ModalComponent } from '../components/modal/modal.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n\r\n constructor(private factoryResolver: ComponentFactoryResolver,\r\n private defaultInjector: Injector,\r\n private appRef: ApplicationRef) { }\r\n\r\n openDialog(caller: Type<any>|ModalOptions|TemplateRef<any>,\r\n dialogOptions: DialogOptions): Promise<OpenDialogResult> {\r\n return new Promise<OpenDialogResult>((resolve, reject) => {\r\n\r\n if (!caller) {\r\n reject('caller is required');\r\n }\r\n\r\n if (!dialogOptions) {\r\n reject('dialogOptions is required');\r\n }\r\n\r\n const dialog = this.createDialog(dialogOptions);\r\n const result: OpenDialogResult = {\r\n dialog\r\n };\r\n\r\n if (caller instanceof Type) {\r\n dialog.instance.callerType = caller;\r\n dialog.instance.onCallerCreationCallback = (d, c) => {\r\n result.component = c;\r\n resolve(result);\r\n };\r\n } else if (caller instanceof TemplateRef) {\r\n dialog.instance.caller = caller;\r\n resolve(result);\r\n } else {\r\n dialog.instance.callerType = ModalComponent;\r\n dialog.instance.onCallerCreationCallback = (d, c) => {\r\n this.initModal(d, c, caller);\r\n result.component = c;\r\n resolve(result);\r\n };\r\n }\r\n });\r\n }\r\n\r\n closeDialog(dialog: ComponentRef<DialogComponent>|DialogComponent): void {\r\n\r\n if (!dialog) {\r\n throw Error('dialog is required');\r\n }\r\n\r\n if (dialog instanceof ComponentRef) {\r\n dialog.instance.dismiss();\r\n } else {\r\n dialog.dismiss();\r\n }\r\n }\r\n\r\n onCloseDialog(dialog: ComponentRef<DialogComponent>|DialogComponent): Promise<void> {\r\n return new Promise<void>((resolve => {\r\n let d;\r\n if (dialog instanceof ComponentRef) {\r\n d = dialog.instance;\r\n } else {\r\n d = dialog;\r\n }\r\n\r\n const subscription = d.activeChange.subscribe(() => {\r\n resolve();\r\n subscription.unsubscribe();\r\n });\r\n }));\r\n }\r\n\r\n private createDialog(dialogOptions: DialogOptions): ComponentRef<DialogComponent> {\r\n const factory = this.factoryResolver.resolveComponentFactory(DialogComponent);\r\n let dialog;\r\n if (dialogOptions.rootViewContainer) {\r\n dialog = dialogOptions.rootViewContainer.createComponent<DialogComponent>(factory);\r\n } else {\r\n dialog = factory.create(this.defaultInjector);\r\n this.appRef.attachView(dialog.hostView);\r\n const componentElement = (dialog.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\r\n document.body.appendChild(componentElement);\r\n }\r\n\r\n dialog.instance.active = true;\r\n if (dialogOptions) {\r\n Object.assign(dialog.instance, dialogOptions);\r\n }\r\n\r\n this.onCloseDialog(dialog).then(() => dialog.destroy());\r\n\r\n return dialog;\r\n }\r\n\r\n private initModal(dialog: DialogComponent, modalRef: ComponentRef<ModalComponent>, modalOptions: ModalOptions): void {\r\n modalRef.instance.title = modalOptions.title;\r\n modalRef.instance.description = modalOptions.description;\r\n modalRef.instance.itemsPrimary = modalOptions.itemsPrimary;\r\n modalRef.instance.itemsSecondary = modalOptions.itemsSecondary;\r\n modalRef.instance.icon = modalOptions.icon;\r\n\r\n modalRef.instance.isDismissible = modalOptions.isDismissible;\r\n modalRef.instance.id = modalOptions.id;\r\n modalRef.instance.classes = modalOptions.classes;\r\n modalRef.instance.caller = modalOptions.caller;\r\n\r\n if (modalOptions.isDismissible) {\r\n const subscription = modalRef.instance.closeModal.subscribe(() => {\r\n this.closeDialog(dialog);\r\n subscription.unsubscribe();\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport { BreadcrumbsData } from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-breadcrumbs-item',\r\n templateUrl: './breadcrumbs-item.component.html'\r\n})\r\nexport class BreadcrumbsItemComponent extends ContentBaseComponent implements BreadcrumbsData {\r\n\r\n @Input() id?: string;\r\n @Input() routerLink?: string;\r\n\r\n}\r\n","import {Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { BreadcrumbsData } from '../../interfaces';\r\nimport { BreadcrumbsItemComponent } from './breadcrumbs-item/breadcrumbs-item.component';\r\n\r\n@Component({\r\n selector: 'desy-breadcrumbs',\r\n templateUrl: './breadcrumbs.component.html'\r\n})\r\nexport class BreadcrumbsComponent extends AccessibilityComponent {\r\n\r\n @Input() items: Array<BreadcrumbsData>;\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n @Input() collapseOnMobile: boolean;\r\n @Input() hasBackButton: boolean;\r\n @ContentChildren(BreadcrumbsItemComponent) itemComponentList: QueryList<BreadcrumbsItemComponent>;\r\n\r\n constructor(private location: Location){\r\n super();\r\n }\r\n\r\n getLength(): number {\r\n let itemsLength: number = this.items ? this.items.length : this.itemComponentList.length;\r\n\r\n if (this.hasBackButton) {\r\n itemsLength += 1;\r\n }\r\n return itemsLength;\r\n }\r\n\r\n goBack(): void {\r\n this.location.back();\r\n }\r\n\r\n getItemList(): BreadcrumbsData[] {\r\n const itemList = this.itemComponentList && this.itemComponentList.length > 0 ? this.itemComponentList.toArray() : this.items;\r\n if (!itemList || itemList.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n\r\n return itemList;\r\n }\r\n\r\n handleEmptyItem(position: number): void {\r\n throw new Error(`item content, html or text are required at position ${position}`);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-header-offcanvas-close-button',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class HeaderOffcanvasCloseButtonComponent extends ContentBaseComponent {\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-header-offcanvas-button',\r\n templateUrl: './header-offcanvas-button.component.html'\r\n})\r\nexport class HeaderOffcanvasButtonComponent extends ContentBaseComponent {\r\n\r\n openOffcanvas = async () => {};\r\n\r\n async handleClick(event: Event): Promise<void> {\r\n event.stopPropagation();\r\n await this.openOffcanvas();\r\n }\r\n\r\n handleEmptyContent(element: string): void {\r\n throw new Error(`${element} content is required`);\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n ComponentRef,\r\n ContentChildren,\r\n HostBinding,\r\n Input,\r\n OnDestroy,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {ContentComponent} from '../../../../desy-commons/components/content/content.component';\r\nimport {HeaderOffcanvasCloseButtonComponent} from './header-offcanvas-close-button/header-offcanvas-close-button.component';\r\nimport {DialogComponent} from '../../../../desy-modals/components/dialog/dialog.component';\r\nimport {DialogService} from '../../../../desy-modals/services/dialog.service';\r\nimport {DialogOptions} from '../../../../desy-modals/interfaces';\r\nimport {HeaderOffcanvasButtonComponent} from './header-offcanvas-button/header-offcanvas-button.component';\r\nimport {DesyOnInputChange} from '../../../../shared/decorators/desy-on-input-change.decorator';\r\n\r\n@Component({\r\n selector: 'desy-header-offcanvas',\r\n templateUrl: './header-offcanvas.component.html'\r\n})\r\nexport class HeaderOffcanvasComponent implements OnDestroy {\r\n\r\n private static dialogOptions: DialogOptions = {\r\n id: 'header-offcanvas-dialog',\r\n focusOnClose: 'header-offcanvas',\r\n ariaModal: 'true',\r\n ariaLabelledBy: 'header-offcanvas-button-text'\r\n };\r\n\r\n @DesyOnInputChange('setHostClass')\r\n @Input() classes: string;\r\n\r\n @HostBinding('class') hostClass = '-mr-2 flex lg:hidden';\r\n\r\n @ViewChild('offcanvasContent') offcanvasContent: TemplateRef<any>;\r\n\r\n @DesyContentChild({onSetCallbackName: 'bindButton'})\r\n @ContentChildren(HeaderOffcanvasButtonComponent) button: HeaderOffcanvasButtonComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) content: ContentComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(HeaderOffcanvasCloseButtonComponent) closeButton: HeaderOffcanvasCloseButtonComponent;\r\n\r\n private dialog: ComponentRef<DialogComponent>;\r\n\r\n constructor(private dialogService: DialogService) {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.isOpen()) {\r\n this.close();\r\n }\r\n }\r\n\r\n async open(): Promise<void> {\r\n if (!this.isOpen()) {\r\n this.dialog = (await this.dialogService.openDialog(this.offcanvasContent, HeaderOffcanvasComponent.dialogOptions)).dialog;\r\n this.dialogService.onCloseDialog(this.dialog).then(() => this.dialog = null);\r\n }\r\n }\r\n\r\n close(): void {\r\n if (this.isOpen()) {\r\n this.dialogService.closeDialog(this.dialog);\r\n this.dialog = null;\r\n }\r\n }\r\n\r\n isOpen(): boolean {\r\n return !!this.dialog;\r\n }\r\n\r\n /**\r\n * Estable las clases del elemento html del componente\r\n */\r\n setHostClass(): void {\r\n this.hostClass = this.classes ? this.classes : '-mr-2 flex lg:hidden';\r\n }\r\n\r\n /**\r\n * Enlaza el botón del componente hijo con la acción de abrir de este componente\r\n * @param button componente botón pasado como contenido\r\n */\r\n bindButton(button: HeaderOffcanvasButtonComponent): void {\r\n button.openOffcanvas = this.open.bind(this);\r\n }\r\n\r\n handleEmptyContent(element: string): void {\r\n throw new Error(`${element} content is required`);\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {HeaderNavigationItemData} from '../../../../interfaces/header-navigation-item-data';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-header-navigation-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class HeaderNavigationItemComponent extends ContentBaseComponent implements HeaderNavigationItemData {\r\n @Input() href: string;\r\n @Input() routerLink: string;\r\n @Input() fragment: string;\r\n @Input() id: string;\r\n @Input() active: boolean;\r\n @Input() disabled: boolean;\r\n}\r\n","import {AfterContentInit, Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport { HeaderNavigationItemData } from '../../../interfaces/header-navigation-item-data';\r\nimport { AccessibilityComponent } from '../../../../shared/components';\r\nimport {HeaderNavigationItemComponent} from './header-navigation-item/header-navigation-item.component';\r\n\r\n@Component({\r\n selector: 'desy-header-navigation',\r\n templateUrl: './header-navigation.component.html'\r\n})\r\nexport class HeaderNavigationComponent extends AccessibilityComponent implements AfterContentInit {\r\n\r\n @Input() idPrefix: string;\r\n @Input() classes: string;\r\n @Input() items: HeaderNavigationItemData[];\r\n\r\n @ContentChildren(HeaderNavigationItemComponent) itemComponents: QueryList<HeaderNavigationItemComponent>;\r\n\r\n ngAfterContentInit(): void {\r\n const items = this.getItems();\r\n if (!items || items.length === 0) {\r\n throw new Error('Header-navigation items are required');\r\n }\r\n }\r\n\r\n getItemId(item: HeaderNavigationItemData, index: number): string {\r\n const prefix = this.idPrefix ? this.idPrefix : 'header-nav-item';\r\n const suffix = index > 0 ? '-' + index : '';\r\n return item.id ? item.id : prefix + suffix;\r\n }\r\n\r\n getItems(): HeaderNavigationItemData[] {\r\n return this.itemComponents && this.itemComponents.length > 0 ? this.itemComponents.toArray() : this.items;\r\n }\r\n}\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {NavItemData, NavItemEventData} from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-nav-item',\r\n templateUrl: './nav-item.component.html'\r\n})\r\nexport class NavItemComponent extends ContentBaseComponent implements NavItemData {\r\n\r\n @Input() id?: string;\r\n @Input() active?: boolean;\r\n @Input() classes?: string;\r\n @Input() title?: string;\r\n @Input() href?: string;\r\n @Input() routerLink?: string|any[];\r\n @Input() fragment?: string;\r\n @Input() target?: string;\r\n @Input() disabled?: boolean;\r\n @Input() divider?: boolean;\r\n\r\n @Output() clickEvent = new EventEmitter<NavItemEventData>();\r\n @Output() activeChange = new EventEmitter<boolean>();\r\n}\r\n","import {\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges\r\n} from '@angular/core';\r\nimport {\r\n AccessibilityComponent\r\n} from '../../../shared/components';\r\nimport {NavItemData, NavItemEventData} from '../../interfaces';\r\nimport {NavItemComponent} from './nav-item/nav-item.component';\r\n\r\n\r\n@Component({\r\n selector: 'desy-nav',\r\n templateUrl: './nav.component.html'\r\n})\r\nexport class NavComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() hasNav = true;\r\n @Input() idPrefix: string;\r\n @Input() items: NavItemData[];\r\n @Input() classes: string;\r\n\r\n @Output() clickEvent = new EventEmitter<NavItemEventData>();\r\n @ContentChildren(NavItemComponent) itemComponentList: QueryList<NavItemComponent>;\r\n\r\n onClick(event: any, item: NavItemData): void {\r\n const itemsActiveChange = [];\r\n if (!item.active) {\r\n itemsActiveChange.push(item);\r\n }\r\n\r\n const itemList = this.getItemList();\r\n itemList.forEach(i => {\r\n if (i.active && i !== item) {\r\n itemsActiveChange.push(i);\r\n }\r\n i.active = false;\r\n });\r\n item.active = true;\r\n\r\n // Se emite el evento sólo para los items cuyo valor de active ha sido modificado\r\n itemsActiveChange.forEach(i => {\r\n if (i instanceof NavItemComponent) {\r\n i.activeChange.emit(i.active);\r\n }\r\n });\r\n\r\n this.clickEvent.emit({ item, event });\r\n if (item instanceof NavItemComponent) {\r\n item.clickEvent.emit({ item, event });\r\n }\r\n }\r\n\r\n ngOnChanges(changes?: SimpleChanges): void {\r\n if (!this.idPrefix) {\r\n throw new Error(`idPrefix is required`);\r\n }\r\n }\r\n\r\n getItemList(): NavItemData[] {\r\n const itemList = this.itemComponentList && this.itemComponentList.length > 0 ? this.itemComponentList.toArray() : this.items;\r\n if (!itemList || itemList.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n\r\n itemList.forEach(element => {\r\n if (!element.href && !element.routerLink) {\r\n throw new Error(`href or routerLink are required`);\r\n }\r\n });\r\n return itemList;\r\n }\r\n\r\n handleContentEmpty(position: number): void {\r\n throw new Error(`item content, html or text are required at position ${position}`);\r\n }\r\n\r\n getItemId(item: NavItemData, index: number): string {\r\n let id;\r\n if (item.id) {\r\n id = item.id;\r\n } else if (index === 0) {\r\n id = this.getIdPrefix();\r\n } else {\r\n id = this.getIdPrefix() + '-' + index;\r\n }\r\n return id;\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : 'nav-item';\r\n }\r\n}\r\n","import {Component, ContentChildren, Input} from '@angular/core';\r\nimport {NavComponent} from '../../nav/nav.component';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {AccessibilityComponent} from \"../../../../shared/components\";\r\n\r\n@Component({\r\n selector: 'desy-header-subnav',\r\n templateUrl: './header-subnav.component.html'\r\n})\r\nexport class HeaderSubnavComponent extends AccessibilityComponent {\r\n\r\n @Input() hiddenText: string;\r\n @Input() classesContainer: string;\r\n @Input() classesTooltip: string;\r\n @Input() classes: string;\r\n\r\n @DesyContentChild({onSetCallbackName: 'overrideNavParams'})\r\n @ContentChildren(NavComponent) nav: NavComponent;\r\n\r\n hasSubnavItems(): boolean {\r\n return this.nav && this.nav.getItemList().length > 0;\r\n }\r\n\r\n overrideNavParams(nav: NavComponent): void {\r\n nav.hasNav = true;\r\n nav.idPrefix = 'header-subnav-nav-item';\r\n nav.ariaLabel = 'Aplicaciones';\r\n nav.classes = 'w-max max-w-64';\r\n // nav.id = 'id-subnav-nav'; // No existe como param de navComponent\r\n }\r\n\r\n handleEmptyContent(element: string): void {\r\n throw new Error(`${element} content is required`);\r\n }\r\n\r\n}\r\n","import {Component, ContentChildren, Input} from '@angular/core';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {NavComponent} from '../../nav/nav.component';\r\nimport {AccessibilityComponent} from \"../../../../shared/components\";\r\n\r\n@Component({\r\n selector: 'desy-header-dropdown',\r\n templateUrl: './header-dropdown.component.html',\r\n})\r\nexport class HeaderDropdownComponent extends AccessibilityComponent {\r\n\r\n @Input() hiddenText: string;\r\n @Input() classesContainer: string;\r\n @Input() classesTooltip: string;\r\n @Input() classes: string;\r\n\r\n @DesyContentChild({onSetCallbackName: 'overrideNavParams'})\r\n @ContentChildren(NavComponent) nav: NavComponent;\r\n\r\n overrideNavParams(nav: NavComponent): void {\r\n nav.hasNav = true;\r\n nav.idPrefix = 'header-dropdown-nav-item';\r\n nav.ariaLabel = 'Menú de usuario';\r\n nav.classes = 'w-max max-w-64';\r\n // nav.id = 'id-dropdown-nav'; // No existe como param de navComponent\r\n }\r\n\r\n handleEmptyContent(element: string): void {\r\n throw new Error(`${element} content is required`);\r\n }\r\n\r\n}\r\n","import {ChangeDetectorRef, Component, Input} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-skip-link',\r\n templateUrl: './skip-link.component.html'\r\n})\r\nexport class SkipLinkComponent extends AccessibilityComponent {\r\n\r\n @Input() html: string;\r\n @Input() text: string;\r\n @Input() fragment: string;\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n hasContent = true;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n getClassNames(): string {\r\n let classNames = 'c-skip-link sr-only active:not-sr-only focus:not-sr-only focus:outline-none focus:shadow-outline-focus block p-base bg-warning-base text-center text-black underline';\r\n if (this.classes) {\r\n classNames += ' ' + this.classes;\r\n }\r\n return classNames;\r\n }\r\n\r\n handleNoContent(): void {\r\n if (!this.html && !this.text) {\r\n throw new Error('skip-link content, html or text are required');\r\n } else {\r\n this.hasContent = false;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n}\r\n","import {Component, ContentChildren, Input} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { HeaderSubnavData } from '../../interfaces';\r\nimport { HeaderNavigationData } from '../../interfaces';\r\nimport { HeaderDropdownData } from '../../interfaces';\r\nimport { HeaderOffcanvasData } from '../../interfaces';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\nimport {HeaderOffcanvasComponent} from './header-offcanvas/header-offcanvas.component';\r\nimport {HeaderNavigationComponent} from './header-navigation/header-navigation.component';\r\nimport {HeaderSubnavComponent} from './header-subnav/header-subnav.component';\r\nimport {HeaderDropdownComponent} from './header-dropdown/header-dropdown.component';\r\nimport {SkipLinkComponent} from '../skip-link/skip-link.component';\r\n\r\n@Component({\r\n selector: 'desy-header',\r\n templateUrl: './header.component.html'\r\n})\r\nexport class HeaderComponent extends AccessibilityComponent {\r\n\r\n @Input() classes: string;\r\n @Input() containerClasses: string;\r\n @Input() homepageUrl: string;\r\n @Input() homepageRouterLink: string;\r\n @Input() homepageFragment: string;\r\n @Input() expandedLogo: boolean;\r\n\r\n @Input() subnavData: HeaderSubnavData;\r\n @Input() navigationData: HeaderNavigationData;\r\n @Input() dropdownData: HeaderDropdownData;\r\n @Input() offcanvasData: HeaderOffcanvasData;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideSkipLinkParams'})\r\n @ContentChildren(SkipLinkComponent) skiplinkComponent: SkipLinkComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(HeaderSubnavComponent) subnavComponent: HeaderSubnavComponent;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideNavigationParams'})\r\n @ContentChildren(HeaderNavigationComponent) navigationComponent: HeaderNavigationComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(HeaderDropdownComponent) dropdownComponent: HeaderDropdownComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(HeaderOffcanvasComponent) offcanvasComponent: HeaderOffcanvasComponent;\r\n\r\n\r\n overrideSkipLinkParams(skiplinkComponent: SkipLinkComponent): void {\r\n skiplinkComponent.id = skiplinkComponent.id || 'skip-link';\r\n skiplinkComponent.text = 'Saltar al contenido principal';\r\n }\r\n\r\n overrideNavigationParams(navigationComponent: HeaderNavigationComponent): void {\r\n navigationComponent.idPrefix = 'header-nav-item';\r\n navigationComponent.ariaLabel = 'Menú principal';\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {NavigationItemData} from '../../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-footer-navigation-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class FooterNavigationItemComponent extends ContentBaseComponent implements NavigationItemData {\r\n @Input() href?: string;\r\n @Input() routerLink?: string;\r\n @Input() fragment?: string;\r\n}\r\n","import {Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport {NavigationData} from '../../../interfaces';\r\nimport {FooterNavigationItemComponent} from './footer-navigation-item/footer-navigation-item.component';\r\n\r\n@Component({\r\n selector: 'desy-footer-navigation',\r\n templateUrl: './footer-navigation.component.html'\r\n})\r\nexport class FooterNavigationComponent implements NavigationData {\r\n @Input() title: string;\r\n @Input() columns: number;\r\n\r\n @ContentChildren(FooterNavigationItemComponent) itemComponents: QueryList<FooterNavigationItemComponent>;\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {MetaItemData} from '../../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-footer-meta-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class FooterMetaItemComponent extends ContentBaseComponent implements MetaItemData {\r\n @Input() href?: string;\r\n @Input() routerLink?: string;\r\n @Input() fragment?: string;\r\n}\r\n","import {Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport {MetaData} from '../../../interfaces';\r\nimport {FooterMetaItemComponent} from './footer-meta-item/footer-meta-item.component';\r\nimport {ContentComponent} from '../../../../desy-commons/components/content/content.component';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-footer-meta',\r\n template: ''\r\n})\r\nexport class FooterMetaComponent extends ContentBaseComponent implements MetaData {\r\n\r\n @Input() visuallyHiddenTitle: string;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n @ContentChildren(FooterMetaItemComponent) itemComponents: QueryList<FooterMetaItemComponent>;\r\n}\r\n","import {Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {MetaData, MetaItemData, NavigationData, NavigationItemData} from '../../interfaces';\r\nimport {IconData} from '../../../desy-commons/interfaces';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\nimport {IconComponent} from '../../../desy-commons/components/icon/icon.component';\r\nimport {FooterNavigationComponent} from './footer-navigation/footer-navigation.component';\r\nimport {FooterMetaComponent} from './footer-meta/footer-meta.component';\r\nimport {ContentComponent} from '../../../desy-commons/components/content/content.component';\r\n\r\n\r\n@Component({\r\n selector: 'desy-footer',\r\n templateUrl: './footer.component.html'\r\n})\r\nexport class FooterComponent extends AccessibilityComponent {\r\n\r\n @Input() meta: MetaData;\r\n @Input() navigation: NavigationData[];\r\n @Input() icon: IconData;\r\n @Input() containerClasses: string;\r\n @Input() classes: string;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(IconComponent) iconComponent: IconComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(FooterMetaComponent) metaComponent: FooterMetaComponent;\r\n\r\n @ContentChildren(FooterNavigationComponent) navigationComponent: QueryList<FooterNavigationComponent>;\r\n\r\n\r\n getNavigationItems(): NavigationData[] {\r\n const navItems = this.navigationComponent && this.navigationComponent.length > 0 ? this.navigationComponent.toArray() : this.navigation;\r\n return navItems && navItems.length > 0 ? navItems : null;\r\n }\r\n\r\n getNavigationItemItems(navigation: NavigationData): NavigationItemData[] {\r\n return navigation instanceof FooterNavigationComponent ? navigation.itemComponents.toArray() : navigation.items;\r\n }\r\n\r\n getMetaItems(meta: MetaData): MetaItemData[] {\r\n return meta instanceof FooterMetaComponent ? meta.itemComponents.toArray() : meta.items;\r\n }\r\n\r\n getMetaContent(meta: MetaData): ContentComponent {\r\n return meta instanceof FooterMetaComponent ? meta.contentComponent : null;\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {ErrorSummaryData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-error-summary-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ErrorSummaryItemComponent extends ContentBaseComponent implements ErrorSummaryData {\r\n\r\n @Input() fragment: string;\r\n @Input() id: string;\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n ContentChildren,\r\n QueryList\r\n} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {ErrorSummaryData} from '../../interfaces';\r\nimport {ErrorSummaryItemComponent} from './error-summary-item/error-summary-item.component';\r\nimport {TitleComponent} from '../../../desy-commons/components/title/title.component';\r\nimport {DescriptionComponent} from '../../../desy-commons/components/description/description.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-error-summary',\r\n templateUrl: './error-summary.component.html'\r\n})\r\nexport class ErrorSummaryComponent extends AccessibilityComponent {\r\n\r\n @Input() titleText: string;\r\n @Input() titleHtml: string;\r\n @Input() descriptionText: string;\r\n @Input() descriptionHtml: string;\r\n @Input() classes: string;\r\n @Input() id: string;\r\n @Input() errorList: Array<ErrorSummaryData>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TitleComponent) titleComponent: TitleComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(DescriptionComponent) descriptionComponent: DescriptionComponent;\r\n\r\n @ContentChildren(ErrorSummaryItemComponent) errorComponentList: QueryList<ErrorSummaryItemComponent>;\r\n\r\n lastErrorItemCount: number;\r\n\r\n handleContentRequired(element: string): void {\r\n throw new Error(element + ' content, html or text are required');\r\n }\r\n\r\n getErrorItemList(): ErrorSummaryData[] {\r\n let errorItemList: ErrorSummaryData[];\r\n if (this.errorComponentList && this.errorComponentList.length > 0) {\r\n errorItemList = this.errorComponentList.toArray();\r\n } else {\r\n errorItemList = this.errorList;\r\n }\r\n\r\n const lastLength = this.lastErrorItemCount;\r\n this.lastErrorItemCount = errorItemList.length;\r\n if (errorItemList.length === 0 && lastLength !== 0) {\r\n throw new Error(`errorList or inner error-summary-item are required`);\r\n }\r\n\r\n return errorItemList;\r\n }\r\n}\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {MenuHorizontalItemData, MenuHorizontalItemEventData} from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-menu-horizontal-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class MenuHorizontalItemComponent extends ContentBaseComponent implements MenuHorizontalItemData {\r\n\r\n @Input() href?: string;\r\n @Input() routerLink?: string|any[];\r\n @Input() fragment?: string;\r\n @Input() target?: string;\r\n @Input() id?: string;\r\n @Input() active?: boolean;\r\n @Input() disabled?: boolean;\r\n @Input() classes?: string;\r\n\r\n @Output() clickEvent = new EventEmitter<MenuHorizontalItemEventData>();\r\n @Output() activeChange = new EventEmitter<boolean>();\r\n\r\n}\r\n","import {Component, ContentChildren, EventEmitter, Input, OnChanges, Output, QueryList, SimpleChanges} from '@angular/core';\r\nimport { MenuHorizontalItemData, MenuHorizontalItemEventData } from '../../interfaces';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport {MenuHorizontalItemComponent} from './menu-horizontal-item/menu-horizontal-item.component';\r\n\r\n@Component({\r\n selector: 'desy-menu-horizontal',\r\n templateUrl: './menu-horizontal.component.html'\r\n})\r\nexport class MenuHorizontalComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() id: string;\r\n @Input() idPrefix: string;\r\n @Input() classes: string;\r\n @Input() items: MenuHorizontalItemData[];\r\n\r\n @ContentChildren(MenuHorizontalItemComponent) itemComponents: QueryList<MenuHorizontalItemComponent>;\r\n\r\n @Output() clickEvent = new EventEmitter<MenuHorizontalItemEventData>();\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n }\r\n\r\n onClick(event: any, item: MenuHorizontalItemData): void {\r\n const itemsActiveChange = [];\r\n if (!item.active) {\r\n itemsActiveChange.push(item);\r\n }\r\n\r\n const itemList = this.getItemList();\r\n itemList.forEach(i => {\r\n if (i.active && i !== item) {\r\n itemsActiveChange.push(i);\r\n }\r\n i.active = false;\r\n });\r\n item.active = true;\r\n\r\n // Se emite el evento sólo para los items cuyo valor de active ha sido modificado\r\n itemsActiveChange.forEach(i => {\r\n if (i instanceof MenuHorizontalItemComponent) {\r\n i.activeChange.emit(i.active);\r\n }\r\n });\r\n\r\n this.clickEvent.emit({ item, event });\r\n if (item instanceof MenuHorizontalItemComponent) {\r\n item.clickEvent.emit({ item, event });\r\n }\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : 'menu-item';\r\n }\r\n\r\n getItemList(): MenuHorizontalItemData[] {\r\n const itemList = this.itemComponents && this.itemComponents.length > 0 ? this.itemComponents.toArray() : this.items;\r\n if (!itemList || itemList.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n\r\n itemList.forEach(item => {\r\n if (!item.routerLink && !item.href) {\r\n throw Error('item routerLink or href are required');\r\n }\r\n });\r\n return itemList;\r\n }\r\n\r\n handleEmptyItem(position: number): void {\r\n throw new Error(`item content, html or text are required at position ${position}`);\r\n }\r\n\r\n getItemId(item: MenuHorizontalItemData, index: number): string {\r\n let id;\r\n if (item.id) {\r\n id = item.id;\r\n } else if (index === 0) {\r\n id = this.getIdPrefix();\r\n } else {\r\n id = this.getIdPrefix() + '-' + index;\r\n }\r\n return id;\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {MenuVerticalSubItemsData} from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-menu-vertical-item-sub-item',\r\n templateUrl: './menu-vertical-item-sub-item.component.html'\r\n})\r\nexport class MenuVerticalItemSubItemComponent extends ContentBaseComponent implements MenuVerticalSubItemsData {\r\n\r\n @Input() id?: string;\r\n @Input() classes?: string;\r\n @Input() href?: string;\r\n @Input() routerLink?: string;\r\n @Input() routerLinkActiveClasses?: string;\r\n @Input() fragment?: string;\r\n @Input() target?: string;\r\n @Input() disabled?: boolean;\r\n @Input() active?: boolean;\r\n @Input() divider?: boolean;\r\n @Input() title?: string;\r\n}\r\n","import {Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport {MenuVerticalSubData} from '../../../interfaces';\r\nimport {MenuVerticalItemSubItemComponent} from '../menu-vertical-item-sub-item/menu-vertical-item-sub-item.component';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-menu-vertical-item-sub',\r\n templateUrl: './menu-vertical-item-sub.component.html'\r\n})\r\nexport class MenuVerticalItemSubComponent extends ContentBaseComponent implements MenuVerticalSubData {\r\n @Input() classes?: string;\r\n\r\n @ContentChildren(MenuVerticalItemSubItemComponent) itemComponents: QueryList<MenuVerticalItemSubItemComponent>;\r\n}\r\n","import {Component, ContentChildren, Input} from '@angular/core';\r\nimport {MenuVerticalItemsData} from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {MenuVerticalItemSubComponent} from '../menu-vertical-item-sub/menu-vertical-item-sub.component';\r\n\r\n@Component({\r\n selector: 'desy-menu-vertical-item',\r\n templateUrl: './menu-vertical-item.component.html'\r\n})\r\nexport class MenuVerticalItemComponent extends ContentBaseComponent implements MenuVerticalItemsData {\r\n\r\n @Input() id?: string;\r\n @Input() classes?: string;\r\n @Input() href?: string;\r\n @Input() routerLink?: string;\r\n @Input() routerLinkActiveClasses?: string;\r\n @Input() fragment?: string;\r\n @Input() target?: string;\r\n @Input() disabled?: boolean;\r\n @Input() active?: boolean;\r\n @Input() divider?: boolean;\r\n @Input() title?: string;\r\n @Input() expanded?: boolean; // no se utiliza\r\n\r\n @DesyContentChild()\r\n @ContentChildren(MenuVerticalItemSubComponent) subComponent: MenuVerticalItemSubComponent;\r\n\r\n}\r\n","import {Component, Input, ContentChildren, QueryList} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport {MenuVerticalItemsData, MenuVerticalSubData, MenuVerticalSubItemsData} from '../../interfaces';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { StringUtils } from '../../../shared/utils/string-utils';\r\nimport {MenuVerticalItemComponent} from './menu-vertical-item/menu-vertical-item.component';\r\nimport {MenuVerticalItemSubComponent} from './menu-vertical-item-sub/menu-vertical-item-sub.component';\r\n\r\n@Component({\r\n selector: 'desy-menu-vertical',\r\n templateUrl: './menu-vertical.component.html',\r\n animations: [\r\n trigger('displayMenuVertical', [\r\n state('void', style({\r\n opacity: '0.0',\r\n transform: 'scale(0.95)'\r\n })),\r\n state('*', style({\r\n opacity: '1.0',\r\n transform: 'scale(1.0)'\r\n })),\r\n transition(':enter', [\r\n animate('100ms ease-out')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class MenuVerticalComponent extends AccessibilityComponent {\r\n\r\n @Input() id: string;\r\n @Input() idPrefix: string;\r\n @Input() items: MenuVerticalItemsData[];\r\n @Input() hasUnderline: boolean;\r\n @Input() classes: string;\r\n\r\n @ContentChildren(MenuVerticalItemComponent) itemComponents: QueryList<MenuVerticalItemComponent>;\r\n\r\n handleItemContentEmpty(index: number, isRoot: boolean): void {\r\n throw new Error(`${isRoot ? 'Item' : 'Subitem'} content, html or text ar required at position ${index}`);\r\n }\r\n\r\n getItemHtml(item: MenuVerticalItemsData): string {\r\n let itemHtml: string;\r\n if (item.active) {\r\n itemHtml = item.html ? `<strong>${ item.html }</strong>` : `<strong>${ StringUtils.escapeHtml(item.text) }</strong>`;\r\n } else {\r\n itemHtml = item.html;\r\n }\r\n\r\n return itemHtml;\r\n }\r\n\r\n getId(item: MenuVerticalItemsData, i: number): string {\r\n if (item.id) {\r\n return item.id;\r\n } else {\r\n const idPrefix = this.idPrefix ? this.idPrefix : 'nav-item';\r\n if (i === 0) {\r\n return idPrefix;\r\n } else {\r\n return idPrefix + '-' + i;\r\n }\r\n }\r\n }\r\n\r\n getSubItemId(item: MenuVerticalItemsData, itemIndex: number, subItemIndex: number): string{\r\n let subItemId: string;\r\n const sub = this.getItemSub(item);\r\n const subItems = this.getSubItems(sub);\r\n const subItem = subItems[subItemIndex];\r\n if (subItem) {\r\n if (subItem.id) {\r\n subItemId = subItem.id;\r\n } else {\r\n const itemId = this.getId(item, itemIndex);\r\n subItemId = subItemIndex === 0 ? `sub-${itemId}` : `sub-${itemId}-${subItemIndex}`;\r\n }\r\n }\r\n\r\n return subItemId;\r\n }\r\n\r\n getItems(): MenuVerticalItemsData[] {\r\n const itemList = this.itemComponents && this.itemComponents.length > 0 ? this.itemComponents.toArray() : this.items;\r\n if (!itemList || itemList.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n return itemList;\r\n }\r\n\r\n getItemSub(item: MenuVerticalItemsData): MenuVerticalSubData {\r\n return item instanceof MenuVerticalItemComponent ? item.subComponent : item.sub;\r\n }\r\n\r\n getSubItems(sub: MenuVerticalSubData): MenuVerticalSubItemsData[] {\r\n const subItems = sub instanceof MenuVerticalItemSubComponent ? sub.itemComponents.toArray() : sub.items;\r\n return subItems && subItems.length > 0 ? subItems : null;\r\n }\r\n}\r\n","import {\r\n ContentChild,\r\n ContentChildren,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n Output,\r\n QueryList,\r\n AfterContentChecked\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[desyMenubaritem]'\r\n})\r\nexport class MenubaritemDirective implements AfterContentChecked {\r\n @ContentChild('link', { read: ElementRef }) link: ElementRef;\r\n @ContentChild('itemContentWrapper', { read: ElementRef }) itemContentWrapper: ElementRef;\r\n @ContentChild('popupMenu', { read: ElementRef }) popupMenu: ElementRef;\r\n @ContentChildren('popupMenuItem', { read: ElementRef, descendants: true}) popupMenuItems: QueryList<ElementRef>;\r\n\r\n @Output() contentChanged: EventEmitter<any> = new EventEmitter();\r\n\r\n private lastPopupMenu: ElementRef;\r\n private lastPopupMenuItems: QueryList<ElementRef>;\r\n private lastItemContentWrapper: ElementRef;\r\n private lastLink: ElementRef;\r\n\r\n contentHasBeenChecked = false;\r\n\r\n constructor(public elementRef: ElementRef) { }\r\n\r\n ngAfterContentChecked(): void {\r\n if (this.popupMenu !== this.lastPopupMenu || this.popupMenuItems !== this.lastPopupMenuItems\r\n || this.link !== this.lastLink || this.itemContentWrapper !== this.lastItemContentWrapper) {\r\n setTimeout(() => this.contentChanged.emit());\r\n this.lastPopupMenu = this.popupMenu;\r\n this.lastPopupMenuItems = this.popupMenuItems;\r\n this.lastLink = this.link;\r\n this.lastItemContentWrapper = this.itemContentWrapper;\r\n }\r\n\r\n if (!this.contentHasBeenChecked) {\r\n setTimeout(() => this.contentHasBeenChecked = true);\r\n }\r\n }\r\n\r\n}\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {MenubarItemSubItemSubItem} from '../../../../interfaces/menubar-item-sub-item-sub-item';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-menubar-subsubitem',\r\n templateUrl: './menubar-subsubitem.component.html'\r\n})\r\nexport class MenubarSubsubitemComponent extends ContentBaseComponent implements MenubarItemSubItemSubItem {\r\n\r\n @Input() html?: string;\r\n @Input() text?: string;\r\n @Input() checked?: boolean;\r\n\r\n @Output() selected = new EventEmitter<any>();\r\n @Output() checkedChange = new EventEmitter<boolean>();\r\n\r\n}\r\n","import {\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n} from '@angular/core';\r\nimport {MenubarItemSubItem} from '../../../../interfaces/menubar-item-sub-item';\r\nimport {MenubarItemSubItemSubItem} from '../../../../interfaces/menubar-item-sub-item-sub-item';\r\nimport {MenubarSubsubitemComponent} from '../menubar-subsubitem/menubar-subsubitem.component';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-menubar-subitem',\r\n templateUrl: './menubar-subitem.component.html'\r\n})\r\nexport class MenubarSubitemComponent extends ContentBaseComponent implements MenubarItemSubItem {\r\n\r\n @Input() text?: string;\r\n @Input() html?: string;\r\n @Input() checked?: boolean;\r\n @Input() items?: MenubarItemSubItemSubItem[];\r\n\r\n @Output() selected = new EventEmitter<any>();\r\n @Output() checkedChange = new EventEmitter<boolean>();\r\n\r\n @ContentChildren(MenubarSubsubitemComponent) subItems: QueryList<MenubarSubsubitemComponent>;\r\n\r\n public getSubItems(): MenubarSubsubitemComponent[] {\r\n return this.subItems.toArray();\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n} from '@angular/core';\r\nimport {MenubarItem} from '../../../../interfaces/menubar-item';\r\nimport {MenubarItemSub} from '../../../../interfaces/menubar-item-sub';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\nimport {MenubarSubitemComponent} from '../menubar-subitem/menubar-subitem.component';\r\n\r\n@Component({\r\n selector: 'desy-menubar-item',\r\n templateUrl: './menubar-item.component.html'\r\n})\r\nexport class MenubarItemComponent extends ContentBaseComponent implements MenubarItem {\r\n\r\n @Input() href?: string;\r\n @Input() target?: string;\r\n @Input() routerLink?: string|any[];\r\n @Input() routerLinkActiveClasses?: string;\r\n @Input() fragment?: string;\r\n @Input() text?: string;\r\n @Input() html?: string;\r\n @Input() id?: string;\r\n @Input() sub?: MenubarItemSub;\r\n @Input() classes?: string;\r\n\r\n @Input() title?: string;\r\n @Input() disabled?: boolean;\r\n @Input() active?: boolean;\r\n\r\n @Output() selected = new EventEmitter<any>();\r\n\r\n @ContentChildren(MenubarSubitemComponent) subItems: QueryList<MenubarSubitemComponent>;\r\n\r\n public getSubItems(): MenubarSubitemComponent[] {\r\n return this.subItems.toArray();\r\n }\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-menubar-label',\r\n templateUrl: './menubar-label.component.html'\r\n})\r\nexport class MenubarLabelComponent extends ContentBaseComponent {\r\n\r\n @Input() classes: string;\r\n\r\n}\r\n","import {\r\n AfterViewInit, ChangeDetectorRef,\r\n Component, ContentChildren,\r\n ElementRef, EventEmitter,\r\n Input,\r\n OnChanges, Output,\r\n QueryList,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {MenubarItem} from '../../interfaces/menubar-item';\r\nimport {MenubaritemDirective} from './directives/menubaritem.directive';\r\nimport {MenubarItemSubItem} from '../../interfaces/menubar-item-sub-item';\r\nimport {MenubarItemSubItemSubItem} from '../../interfaces/menubar-item-sub-item-sub-item';\r\nimport {LabelComponent} from '../../../desy-forms/components/label/label.component';\r\nimport {LabelData} from '../../../desy-forms/interfaces';\r\nimport {StringUtils} from '../../../shared/utils/string-utils';\r\nimport {MenubarItemComponent} from './components/menubar-item/menubar-item.component';\r\nimport {MenubarSubitemComponent} from './components/menubar-subitem/menubar-subitem.component';\r\nimport {MenubarSubsubitemComponent} from './components/menubar-subsubitem/menubar-subsubitem.component';\r\nimport {MenubarLabelComponent} from './components/menubar-label/menubar-label.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-menubar',\r\n templateUrl: './menubar.component.html'\r\n})\r\nexport class MenubarComponent extends AccessibilityComponent implements OnChanges, AfterViewInit {\r\n\r\n @Input() id: string;\r\n @Input() idPrefix: string;\r\n @Input() classes: string;\r\n @Input() items: MenubarItem[];\r\n @Output() itemsChange = new EventEmitter<MenubarItem[]>();\r\n @Output() activeItemChange = new EventEmitter<MenubarItem>();\r\n @Output() activeSubItemChange = new EventEmitter<MenubarItemSubItem|MenubarItemSubItemSubItem>();\r\n\r\n /**\r\n * label, diferentes formas de implementar, enumeradas por prioridad\r\n * 1) incluir componente menubar-label anidado\r\n * 2) incluir template\r\n * 3) incluir objeto label (interfaz expuesta)\r\n * 4) incluir legendText - incluir un label con solo un texto\r\n */\r\n @Input() labelRef: TemplateRef<LabelComponent>;\r\n @Input() labelData: LabelData;\r\n @Input() labelText: string;\r\n\r\n @ViewChild('menubar', { read: ElementRef }) menubar: ElementRef;\r\n @ViewChildren(MenubaritemDirective) menuItems: QueryList<MenubaritemDirective>;\r\n @DesyContentChild() @ContentChildren(MenubarLabelComponent) labelComponent: MenubarLabelComponent;\r\n @ContentChildren(MenubarItemComponent) itemComponentList: QueryList<MenubarItemComponent>;\r\n\r\n menuData: any[];\r\n viewInit = false;\r\n isFocused: boolean;\r\n currentFocusItemIndex = 0;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngOnChanges(changes?: SimpleChanges): void {\r\n if (this.viewInit) {\r\n this.checkChanges();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.viewInit = true;\r\n this.checkChanges();\r\n }\r\n\r\n checkChanges(): void {\r\n if (!this.menuItems) {\r\n return;\r\n }\r\n this.menuData = [];\r\n this.getItems().forEach((_, index) => {\r\n const itemData = {\r\n open: false,\r\n currentFocusSubItemIndex: 0,\r\n currentFocusSubSubItemIndex: 0,\r\n menuItem: this.menuItems.toArray()[index]\r\n };\r\n this.menuData.push(itemData);\r\n });\r\n\r\n if (this.viewInit) {\r\n this.checkRequired();\r\n }\r\n\r\n\r\n const lastCurrentFocusItemIndex = this.currentFocusItemIndex;\r\n const items = this.getItems();\r\n if (items) {\r\n while (!this.isItemFocusable(this.currentFocusItemIndex % items.length)) {\r\n this.currentFocusItemIndex = (this.currentFocusItemIndex + items.length + 1) % items.length;\r\n if (this.currentFocusItemIndex === lastCurrentFocusItemIndex) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Eventos\r\n */\r\n\r\n handleMenuFocusIn(): void {\r\n this.isFocused = true;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n handleMenuFocusOut(event): void {\r\n if (!this.menubar.nativeElement.contains(event.relatedTarget)) {\r\n this.closeMenu();\r\n }\r\n this.isFocused = false;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n handleMenuItemClick(event, itemIndex: number): void {\r\n if (this.hasPopupMenu(itemIndex)) {\r\n event.preventDefault();\r\n const isOpen = this.menuData[itemIndex].open;\r\n this.closeMenu();\r\n if (!isOpen) {\r\n this.openMenu(itemIndex);\r\n }\r\n } else {\r\n this.activateMenuItem(itemIndex);\r\n }\r\n }\r\n\r\n handleMenuItemKeydown(event: KeyboardEvent, itemIndex: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n case 'ArrowDown':\r\n if (this.hasPopupMenu(itemIndex)) {\r\n this.openMenu(itemIndex);\r\n setTimeout(() => this.focusFirstSubItem(itemIndex));\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n break;\r\n\r\n case 'Escape':\r\n if (this.hasPopupMenu(itemIndex)) {\r\n this.closeMenu(itemIndex);\r\n }\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowLeft':\r\n this.focusNextAvailableItem(itemIndex, -1);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowRight':\r\n this.focusNextAvailableItem(itemIndex, +1);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowUp':\r\n if (this.hasPopupMenu(itemIndex)) {\r\n this.openMenu(itemIndex);\r\n setTimeout(() => this.focusLastSubItem(itemIndex));\r\n }\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'Home':\r\n case 'PageUp':\r\n if (this.hasPopupMenu(itemIndex)) {\r\n this.closeMenu();\r\n }\r\n this.focusFirstItem();\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'End':\r\n case 'PageDown':\r\n if (this.hasPopupMenu(itemIndex)) {\r\n this.closeMenu();\r\n }\r\n this.focusLastItem();\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n default:\r\n if (this.isPrintableChar(event.key)) {\r\n this.focusItemByFirstChar(event.key);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n handleMenuItemMouseOver(itemIndex: number): void {\r\n this.focusItem(itemIndex, true);\r\n }\r\n\r\n handlePopupMenuItemClick(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): void {\r\n this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);\r\n this.focusItem(itemIndex);\r\n this.closeMenu(itemIndex);\r\n }\r\n\r\n handlePopupMenuItemKeydown(event: KeyboardEvent, itemIndex: number, subItemIndex: number, subSubItemIndex?: number): void {\r\n const currentSubIndex = this.menuData[itemIndex].currentFocusSubItemIndex;\r\n const currentSubSubIndex = this.menuData[itemIndex].currentFocusSubSubItemIndex;\r\n const items = this.getItems();\r\n switch (event.key) {\r\n case ' ':\r\n this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);\r\n if (this.mustCloseAfterSelectPopupItem(itemIndex, subItemIndex, subSubItemIndex)) {\r\n this.closeMenu(itemIndex);\r\n this.focusItem(itemIndex);\r\n }\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'Enter':\r\n this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);\r\n this.closeMenu(itemIndex);\r\n this.focusItem(itemIndex);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'Escape':\r\n this.closeMenu(itemIndex);\r\n this.focusItem(itemIndex);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowUp':\r\n this.focusNextAvailableSubItem(itemIndex, currentSubIndex, currentSubSubIndex, -1);\r\n // this.focusSubItem(itemIndex, (currentSubIndex + listLength - 1) % listLength);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowDown':\r\n this.focusNextAvailableSubItem(itemIndex, currentSubIndex, currentSubSubIndex, +1);\r\n // this.focusSubItem(itemIndex, (currentSubIndex + listLength + 1) % listLength);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowLeft':\r\n this.closeMenu(itemIndex);\r\n this.focusItem((itemIndex + items.length - 1) % items.length);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'ArrowRight':\r\n this.closeMenu(itemIndex);\r\n this.focusItem((itemIndex + items.length + 1) % items.length);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'Home':\r\n case 'PageUp':\r\n this.focusFirstSubItem(itemIndex);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'End':\r\n case 'PageDown':\r\n this.focusLastSubItem(itemIndex);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'Tab':\r\n this.closeMenu(itemIndex);\r\n this.focusItem(itemIndex);\r\n break;\r\n\r\n default:\r\n if (this.isPrintableChar(event.key)) {\r\n this.focusSubItemByFirstChar(itemIndex, event.key);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n handlePopupMenuItemMouseOver(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): void {\r\n this.focusSubItem(itemIndex, subItemIndex, subSubItemIndex);\r\n }\r\n\r\n /*\r\n * Comunes\r\n */\r\n\r\n checkRequired(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n\r\n if (!this.ariaLabel) {\r\n throw Error('ariaLabel is required');\r\n }\r\n\r\n const items = this.getItems();\r\n if (!items || items.length === 0) {\r\n throw Error('Items are required');\r\n }\r\n\r\n // No se ha puesto label required porque en algunos ejemplos de desy-html no aparece\r\n }\r\n\r\n handleEmptyItem(text: string): void {\r\n throw Error(text);\r\n }\r\n\r\n activateMenuItem(itemIndex: number): void {\r\n const items = this.getItems();\r\n this.activeItemChange.emit(items[itemIndex] as MenubarItem);\r\n if (items[itemIndex] instanceof MenubarItemComponent) {\r\n (items[itemIndex] as MenubarItemComponent).selected.emit();\r\n }\r\n }\r\n\r\n activatePopupMenuItem(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): void {\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n let item: MenubarItemSubItem|MenubarItemSubItemSubItem = subItems[subItemIndex];\r\n let subSubItems = [];\r\n if (subSubItemIndex !== null && subSubItemIndex !== undefined) {\r\n subSubItems = this.getSubItemSubitems(item);\r\n item = subSubItems[subSubItemIndex];\r\n }\r\n\r\n let checkedChange = false;\r\n if (item.role === 'menuitemcheckbox') {\r\n item.checked = !item.checked;\r\n checkedChange = true;\r\n } else if (item.role === 'menuitemradio') {\r\n checkedChange = !item.checked;\r\n subSubItems.forEach(i => i.checked = false);\r\n item.checked = true;\r\n }\r\n\r\n this.itemsChange.emit(items);\r\n this.activeSubItemChange.emit(item as MenubarItem);\r\n if (item instanceof MenubarSubitemComponent || item instanceof MenubarSubsubitemComponent) {\r\n item.selected.emit();\r\n\r\n if (checkedChange) {\r\n item.checkedChange.emit(item.checked);\r\n }\r\n }\r\n }\r\n\r\n mustCloseAfterSelectPopupItem(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): boolean {\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n let item: MenubarItemSubItem|MenubarItemSubItemSubItem = subItems[subItemIndex];\r\n if (subSubItemIndex !== null && subSubItemIndex !== undefined) {\r\n const subSubItems = this.getSubItemSubitems(item);\r\n item = subSubItems[subSubItemIndex];\r\n }\r\n\r\n return item.role !== 'menuitemcheckbox' && item.role !== 'menuitemradio';\r\n }\r\n\r\n openMenu(itemIndex: number): void {\r\n const wasOpened = this.menuData[itemIndex].open;\r\n this.menuData[itemIndex].open = true;\r\n if (wasOpened) {\r\n this.activateMenuItem(itemIndex);\r\n }\r\n }\r\n\r\n closeMenu(itemIndex?: number): void {\r\n if (itemIndex !== null && itemIndex !== undefined) {\r\n this.menuData[itemIndex].open = false;\r\n } else {\r\n this.menuData.forEach(item => item.open = false);\r\n }\r\n }\r\n\r\n hasPopupMenu(itemIndex: number): boolean {\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n return items[itemIndex].sub && subItems && subItems.length > 0;\r\n }\r\n\r\n private isPrintableChar(str: string): boolean {\r\n return str.length === 1 && !!str.match(/\\S/);\r\n }\r\n\r\n private getMenuDataIndex(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): number {\r\n let menuDataIndex = 0;\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n for (let i = 0; i < subItemIndex; i++) {\r\n const subItem = subItems[i];\r\n const subSubItems = this.getSubItemSubitems(subItem);\r\n menuDataIndex += subSubItems && subSubItems.length > 0 ? subSubItems.length : 1;\r\n }\r\n\r\n if (subSubItemIndex !== null && subSubItemIndex !== undefined) {\r\n menuDataIndex += subSubItemIndex;\r\n }\r\n\r\n return menuDataIndex;\r\n }\r\n\r\n /*\r\n * Comunes - focus\r\n */\r\n\r\n focusItem(itemIndex: number, hover?: boolean): void {\r\n const hasFocus = this.menubar.nativeElement.contains(document.activeElement);\r\n const isOpen = this.menuData[this.currentFocusItemIndex].open;\r\n\r\n if (!hover || hasFocus) {\r\n this.menuData[itemIndex].menuItem.link.nativeElement.focus();\r\n }\r\n\r\n this.closeMenu();\r\n if (isOpen && this.hasPopupMenu(itemIndex)) {\r\n this.openMenu(itemIndex);\r\n }\r\n\r\n this.currentFocusItemIndex = itemIndex;\r\n }\r\n\r\n focusNextAvailableItem(fromItemIndex: number, step: number): void {\r\n let nextItem = fromItemIndex;\r\n const items = this.getItems();\r\n do {\r\n nextItem = (nextItem + items.length + step) % items.length;\r\n } while (!this.isItemFocusable(nextItem) && nextItem !== fromItemIndex);\r\n\r\n if (nextItem !== fromItemIndex) {\r\n this.focusItem(nextItem);\r\n }\r\n }\r\n\r\n focusFirstItem(): void {\r\n if (this.isItemFocusable(0)) {\r\n this.focusItem(0);\r\n } else {\r\n this.focusNextAvailableItem(0, +1);\r\n }\r\n }\r\n\r\n focusLastItem(): void {\r\n const items = this.getItems();\r\n if (this.isItemFocusable(items.length - 1)) {\r\n this.focusItem(items.length - 1);\r\n } else {\r\n this.focusNextAvailableItem(items.length - 1, -1);\r\n }\r\n }\r\n\r\n isItemFocusable(itemIndex: number): boolean {\r\n return !this.getItems()[itemIndex].disabled;\r\n }\r\n\r\n focusItemByFirstChar(char: string): void {\r\n const itemContents: string[] = this.menuItems.map(menuItem => menuItem.itemContentWrapper.nativeElement.textContent);\r\n let index = this.currentFocusItemIndex;\r\n let foundIndex = -1;\r\n do {\r\n index = (index + itemContents.length + 1) % itemContents.length;\r\n if (itemContents[index] && itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase()\r\n && this.isItemFocusable(index)) {\r\n foundIndex = index;\r\n }\r\n } while (foundIndex === -1 && index !== this.currentFocusItemIndex);\r\n\r\n if (foundIndex >= 0) {\r\n this.focusItem(foundIndex);\r\n }\r\n }\r\n\r\n focusSubItem(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): void {\r\n if (this.menuData[itemIndex].menuItem.popupMenuItems.length > 0) {\r\n const menuDataIndex = this.getMenuDataIndex(itemIndex, subItemIndex, subSubItemIndex);\r\n\r\n this.menuData[itemIndex].currentFocusSubItemIndex = subItemIndex;\r\n this.menuData[itemIndex].currentFocusSubSubItemIndex = subSubItemIndex;\r\n const elem = this.menuData[itemIndex].menuItem.popupMenuItems.toArray()[menuDataIndex].nativeElement;\r\n if (elem) {\r\n elem.focus();\r\n } else {\r\n console.error('No subitem to focus');\r\n }\r\n } else {\r\n console.error('No subitems');\r\n }\r\n }\r\n\r\n focusNextAvailableSubItem(itemIndex: number, fromItemSubIndex: number, fromItemSubSubIndex: number, step: number): void {\r\n let nextSubIndex = fromItemSubIndex;\r\n let nextSubSubIndex = fromItemSubSubIndex;\r\n let allSubItemsChecked;\r\n const items = this.getItems();\r\n do {\r\n const nextIndexes = this.getNextSubItemIndexes(items, itemIndex, nextSubIndex, nextSubSubIndex, step);\r\n nextSubIndex = nextIndexes.subIndex;\r\n nextSubSubIndex = nextIndexes.subSubIndex;\r\n allSubItemsChecked = (fromItemSubIndex === nextSubIndex && fromItemSubSubIndex === nextSubSubIndex);\r\n } while (!this.isSubItemFocusable(itemIndex, nextSubIndex, nextSubSubIndex) && !allSubItemsChecked);\r\n\r\n if (!allSubItemsChecked) {\r\n this.focusSubItem(itemIndex, nextSubIndex, nextSubSubIndex);\r\n }\r\n }\r\n\r\n focusFirstSubItem(itemIndex: number): void {\r\n let firstSubSubItem = null;\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n const subSubItems = this.getSubItemSubitems(subItems[0]);\r\n if (subSubItems && subSubItems.length > 0) {\r\n firstSubSubItem = 0;\r\n }\r\n\r\n if (this.isSubItemFocusable(itemIndex, 0, firstSubSubItem)) {\r\n this.focusSubItem(itemIndex, 0, firstSubSubItem);\r\n } else {\r\n this.focusNextAvailableSubItem(itemIndex, 0, firstSubSubItem, +1);\r\n }\r\n }\r\n\r\n focusLastSubItem(itemIndex: number): void {\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n const lastItemIndex = subItems.length - 1;\r\n const lastItem = subItems[lastItemIndex];\r\n const subSubItems = this.getSubItemSubitems(lastItem);\r\n let lastSubSubItem = null;\r\n if (subSubItems && subSubItems.length > 0) {\r\n lastSubSubItem = subSubItems.length - 1;\r\n }\r\n\r\n if (this.isSubItemFocusable(itemIndex, lastItemIndex, lastSubSubItem)) {\r\n this.focusSubItem(itemIndex, lastItemIndex, lastSubSubItem);\r\n } else {\r\n this.focusNextAvailableSubItem(itemIndex, lastItemIndex, lastSubSubItem, -1);\r\n }\r\n }\r\n\r\n isSubItemFocusable(itemIndex: number, subItemIndex: number, subSubItemIndex?: number): boolean {\r\n const items = this.getItems();\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n let item: MenubarItemSubItem|MenubarItemSubItemSubItem = subItems[subItemIndex];\r\n if (subSubItemIndex !== null && subSubItemIndex !== undefined) {\r\n const subSubItems = this.getSubItemSubitems(item);\r\n item = subSubItems[subSubItemIndex];\r\n }\r\n\r\n let isFocusable = false;\r\n if (item.role !== 'separator' && item.role !== 'none') {\r\n isFocusable = true;\r\n }\r\n\r\n return isFocusable;\r\n }\r\n\r\n focusSubItemByFirstChar(itemIndex: number, char: string): void {\r\n const itemContents: string[] = this.menuItems.toArray()[itemIndex].popupMenuItems.map(menuItem => menuItem.nativeElement.textContent);\r\n let subItemIndex = this.menuData[itemIndex].currentFocusSubItemIndex;\r\n let subSubItemIndex = this.menuData[itemIndex].currentFocusSubSubItemIndex;\r\n let foundSubIndex = -1;\r\n let foundSubSubIndex = null;\r\n let allSubItemsChecked = false;\r\n const items = this.getItems();\r\n do {\r\n const nextIndexes = this.getNextSubItemIndexes(items, itemIndex, subItemIndex, subSubItemIndex, +1);\r\n subItemIndex = nextIndexes.subIndex;\r\n subSubItemIndex = nextIndexes.subSubIndex;\r\n const index = this.getMenuDataIndex(itemIndex, subItemIndex, subSubItemIndex);\r\n if (itemContents[index] && itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase()\r\n && this.isSubItemFocusable(itemIndex, subItemIndex, subSubItemIndex)) {\r\n foundSubIndex = subItemIndex;\r\n foundSubSubIndex = subSubItemIndex;\r\n }\r\n allSubItemsChecked = (this.menuData[itemIndex].currentFocusSubItemIndex === subItemIndex\r\n && this.menuData[itemIndex].currentFocusSubSubItemIndex === subSubItemIndex);\r\n } while (foundSubIndex === -1 && !allSubItemsChecked);\r\n\r\n if (foundSubIndex >= 0) {\r\n this.focusSubItem(itemIndex, foundSubIndex, foundSubSubIndex);\r\n }\r\n }\r\n\r\n /*\r\n * Metodos para facilitar contenido\r\n */\r\n\r\n getItems(): MenubarItem[]|MenubarItemComponent[] {\r\n let items;\r\n if (this.itemComponentList && this.itemComponentList.length > 0) {\r\n items = this.itemComponentList.toArray();\r\n } else {\r\n items = this.items;\r\n }\r\n return items;\r\n }\r\n\r\n getItemSubitems(item: MenubarItem|MenubarItemComponent): MenubarItemSubItem[]|MenubarSubitemComponent[] {\r\n let subItems = [];\r\n if (item instanceof MenubarItemComponent){\r\n subItems = item.getSubItems();\r\n }\r\n\r\n if (!subItems || subItems.length === 0) {\r\n subItems = item.sub ? item.sub.items : [];\r\n }\r\n\r\n return subItems;\r\n }\r\n\r\n getSubItemSubitems(item: MenubarItemSubItem|MenubarSubitemComponent): MenubarItemSubItemSubItem[]|MenubarSubsubitemComponent[] {\r\n let subItems = [];\r\n\r\n if (item.role === 'group') {\r\n if (item instanceof MenubarSubitemComponent) {\r\n subItems = item.getSubItems();\r\n }\r\n\r\n if (!subItems || subItems.length === 0) {\r\n subItems = item.items ? item.items : [];\r\n }\r\n }\r\n\r\n return subItems;\r\n }\r\n\r\n getNextSubItemIndexes(items, itemIndex, nextSubIndex, nextSubSubIndex, step): { subIndex: number, subSubIndex?: number} {\r\n const subItems = this.getItemSubitems(items[itemIndex]);\r\n const subSubItems = this.getSubItemSubitems(subItems[nextSubIndex]);\r\n\r\n let checkNextSubItem = true;\r\n if (subSubItems && subSubItems.length > 0) {\r\n if (nextSubSubIndex + step >= 0 && nextSubSubIndex + step < subSubItems.length) {\r\n nextSubSubIndex += step;\r\n checkNextSubItem = false;\r\n }\r\n }\r\n\r\n if (checkNextSubItem) {\r\n nextSubIndex = (nextSubIndex + step + subItems.length) % subItems.length;\r\n const nextSubItemItems = this.getSubItemSubitems(subItems[nextSubIndex]);\r\n if (nextSubItemItems && nextSubItemItems.length > 0) {\r\n nextSubSubIndex = ((step > 0 ? -1 : 0) + step + nextSubItemItems.length) % nextSubItemItems.length;\r\n } else {\r\n nextSubSubIndex = null;\r\n }\r\n }\r\n\r\n return {subIndex: nextSubIndex, subSubIndex: nextSubSubIndex};\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : this.id + 'menubar-item';\r\n }\r\n\r\n getLabelRef(): TemplateRef<any> {\r\n return this.labelComponent ? this.labelComponent.getContent() : this.labelRef;\r\n }\r\n\r\n getLabelContent(): string {\r\n let content: string;\r\n if (this.labelData) {\r\n content = this.labelData.html ? this.labelData.html : `<p>${ StringUtils.escapeHtml(this.labelData.text) }</p>`;\r\n } else if (this.labelText) {\r\n content = `<p>${ StringUtils.escapeHtml(this.labelText) }</p>`;\r\n }\r\n return content;\r\n }\r\n\r\n getItemId(item, index: number): string {\r\n let id: string;\r\n if (item) {\r\n if (item.id) {\r\n id = item.id;\r\n } else {\r\n id = index === 0 ? this.getIdPrefix() : `${this.getIdPrefix()}-${index}`;\r\n }\r\n }\r\n return id;\r\n }\r\n\r\n getPopupStyle(itemIndex: number): object {\r\n let style = {};\r\n if (this.menuData && itemIndex < this.menuData.length) {\r\n const menuItem = this.menuData[itemIndex].menuItem;\r\n const rect = menuItem.link.nativeElement.getBoundingClientRect();\r\n if (this.menuData[itemIndex].open) {\r\n style = {\r\n position: 'absolute',\r\n top: (rect.height - 1) + 'px',\r\n left: '0px',\r\n zIndex: 100,\r\n display: 'block'\r\n };\r\n } else {\r\n style = {\r\n zIndex: 0,\r\n display: 'none'\r\n };\r\n }\r\n }\r\n\r\n return style;\r\n }\r\n\r\n getSubItemId(item, index: number, parentId: string): string {\r\n let id: string;\r\n if (item) {\r\n if (item.id) {\r\n id = item.id;\r\n } else {\r\n id = index === 0 ? `sub-${parentId}` : `sub-${parentId}-${index}`;\r\n }\r\n }\r\n return id;\r\n }\r\n\r\n getSubSubItemAriaChecked(subsubitem): string {\r\n let ariaChecked = null;\r\n if (subsubitem.role === 'menuitemcheckbox' || subsubitem.role === 'menuitemradio') {\r\n ariaChecked = !!subsubitem.checked;\r\n }\r\n return ariaChecked;\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {NotificationItemsData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-notification-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class NotificationItemComponent extends ContentBaseComponent implements NotificationItemsData {\r\n @Input() href: string;\r\n @Input() target?: string;\r\n @Input() routerLink?: string;\r\n @Input() fragment?: string;\r\n @Input() id: string;\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges\r\n} from '@angular/core';\r\n\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport {NotificationItemsData} from '../../interfaces';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport {TitleComponent} from '../../../desy-commons/components/title/title.component';\r\nimport {IconComponent} from '../../../desy-commons/components/icon/icon.component';\r\nimport {DescriptionComponent} from '../../../desy-commons/components/description/description.component';\r\nimport {ContentComponent} from '../../../desy-commons/components/content/content.component';\r\nimport {NotificationItemComponent} from './notification-item/notification-item.component';\r\nimport {ContentData, DescriptionData, IconData, TitleData} from '../../../desy-commons/interfaces';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-notification',\r\n templateUrl: './notification.component.html',\r\n animations: [\r\n trigger('displayNotification', [\r\n state('void', style({\r\n opacity: '0.0',\r\n transform: 'scaleY(0.95)'\r\n })),\r\n state('*', style({\r\n opacity: '1.0',\r\n transform: 'scaleY(1.0)'\r\n })),\r\n transition(':enter', [\r\n animate('100ms ease-out')\r\n ]),\r\n transition(':leave', [\r\n animate('75ms ease-in')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class NotificationComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() isOpen = true;\r\n @Output() isOpenChange = new EventEmitter<boolean>();\r\n\r\n @Input() title: TitleData;\r\n @Input() description: DescriptionData;\r\n @Input() content: ContentData;\r\n @Input() items: NotificationItemsData[];\r\n\r\n @Input() icon: IconData;\r\n @Input() type: string;\r\n @Input() isDismissible: boolean;\r\n @Input() headingLevel: number;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TitleComponent) titleComponent: TitleComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(DescriptionComponent) descriptionComponent: DescriptionComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(IconComponent) iconComponent: IconComponent;\r\n\r\n @ContentChildren(NotificationItemComponent) itemCompontents: QueryList<NotificationItemComponent>;\r\n\r\n isDismissing = false;\r\n displayDefaultIcon = false;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n dismiss(): void {\r\n // Se emite 75ms más tarde para poder visualizar la animación en cualquier caso\r\n this.isDismissing = true;\r\n setTimeout(() => {\r\n this.isDismissing = false;\r\n this.isOpenChange.emit(false);\r\n }, 75);\r\n }\r\n\r\n getType(): string {\r\n let type: string;\r\n if (this.type){\r\n type = this.type.toLocaleLowerCase();\r\n }\r\n return type;\r\n }\r\n\r\n getItems(): NotificationItemsData[] {\r\n return this.itemCompontents && this.itemCompontents.length > 0 ? this.itemCompontents.toArray() : this.items;\r\n }\r\n\r\n handleIconEmpty(empty: boolean): void {\r\n this.displayDefaultIcon = empty;\r\n\r\n // Como que el contenido vacío se comprueba a posteriori, es necesario forzar la detección de cambios para mostrar el icono por defecto\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n handleRequiredEmpty(text: string): void {\r\n throw new Error(text);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.id){\r\n throw new Error(`id is required`);\r\n }\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {CellData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-table-cell',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class TableCellComponent extends ContentBaseComponent implements CellData {\r\n @Input() classes?: string;\r\n @Input() id?: string;\r\n @Input() colspan?: number;\r\n @Input() rowspan?: number;\r\n}\r\n","import {Component, ContentChildren, QueryList} from '@angular/core';\r\nimport {TableCellComponent} from './table-cell.component';\r\n\r\n@Component({\r\n selector: 'desy-table-header',\r\n template: ''\r\n})\r\nexport class TableHeaderComponent {\r\n @ContentChildren(TableCellComponent) cells: QueryList<TableCellComponent>;\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-table-caption',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class TableCaptionComponent extends ContentBaseComponent {\r\n @Input() classes: string;\r\n}\r\n","import {Component, ContentChildren, QueryList} from '@angular/core';\r\nimport {TableCellComponent} from './table-cell.component';\r\n\r\n@Component({\r\n selector: 'desy-table-row',\r\n template: ''\r\n})\r\nexport class TableRowComponent {\r\n @ContentChildren(TableCellComponent) cells: QueryList<TableCellComponent>;\r\n}\r\n","import {Component, Input, ContentChildren, QueryList} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport {CellData, WrapperData} from '../../interfaces';\r\nimport {TableHeaderComponent} from './components/table-header.component';\r\nimport {TableCellComponent} from './components/table-cell.component';\r\nimport {TableCaptionComponent} from './components/table-caption.component';\r\nimport {TableRowComponent} from './components/table-row.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n\r\n@Component({\r\n selector: 'desy-table',\r\n templateUrl: './table.component.html'\r\n})\r\nexport class TableComponent extends AccessibilityComponent {\r\n\r\n @Input() rows: Array<CellData[]>;\r\n @Input() head: CellData[];\r\n @Input() caption: string;\r\n @Input() captionClasses: string;\r\n @Input() firstCellIsHeader: boolean;\r\n @Input() classes: string;\r\n @Input() id: string;\r\n @Input() wrapper: WrapperData;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TableCaptionComponent) captionComponent: TableCaptionComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TableHeaderComponent) headerComponent: TableHeaderComponent;\r\n\r\n @ContentChildren(TableRowComponent) rowComponentList: QueryList<TableRowComponent>;\r\n\r\n getCaptionClass(): string {\r\n return this.captionComponent ? this.captionComponent.classes : this.captionClasses;\r\n }\r\n\r\n getHeaderCells(): TableCellComponent[]|CellData[] {\r\n let headerCells = [];\r\n if (this.headerComponent && this.headerComponent.cells) {\r\n headerCells = this.headerComponent.cells.toArray();\r\n } else if (this.head) {\r\n headerCells = this.head;\r\n }\r\n return headerCells;\r\n }\r\n\r\n getRows(): TableRowComponent[]|CellData[][] {\r\n const rowList = this.rowComponentList && this.rowComponentList.length > 0 ? this.rowComponentList.toArray() : this.rows;\r\n if (!rowList || rowList.length === 0) {\r\n throw new Error(`rows are required`);\r\n }\r\n return rowList;\r\n }\r\n\r\n getRowCells(row: TableRowComponent|CellData[]): TableCellComponent[]|CellData[] {\r\n return row instanceof TableRowComponent ? row.cells.toArray() : row;\r\n }\r\n\r\n handleEmptyCell(cell: TableCellComponent|CellData, row: number, cellIndex: number): void {\r\n if (cell instanceof TableCellComponent) {\r\n throw new Error(`Content is required for cell at position ${cellIndex} of row ${row}`);\r\n } else {\r\n throw new Error(`Text or Html are required for cell at position ${cellIndex} of row ${row}`);\r\n }\r\n }\r\n}\r\n\r\n","export class SearchUtils {\r\n\r\n /**\r\n * Comprueba si una cadena de texto (target) contiene cualquier palabra de otro texto (text)\r\n * @param target - Texto en el que buscar\r\n * @param text - Texto a buscar\r\n * @param fullWord - Indica si las palabras del texto a buscar deben aparecer enteras\r\n */\r\n public static containsAnyWordFrom(target: string, text: string, fullWord?: boolean): boolean {\r\n let words: string[] = [];\r\n let includes = false;\r\n const simplifiedTarget = this.getSimplifiedString(target);\r\n\r\n if (text && text.split(' ').length > 1) {\r\n words = text.split(' ');\r\n }\r\n words.push(text);\r\n\r\n words.forEach(word => {\r\n if (simplifiedTarget && word) {\r\n if ((fullWord && simplifiedTarget === this.getSimplifiedString(word))\r\n || (!fullWord && simplifiedTarget.includes(this.getSimplifiedString(word)))) {\r\n includes = true;\r\n }\r\n }\r\n });\r\n\r\n return includes;\r\n }\r\n\r\n /**\r\n * Convierte a mayúsculas, elimina espacios y reemplaza/elimina caracteres especiales para realizar comparaciones más tolerantes\r\n * @param str - cadena de entrada\r\n */\r\n private static getSimplifiedString(str: string): string {\r\n let res = str;\r\n if (str) {\r\n res = str.toLocaleUpperCase().trim();\r\n res = res.replace('Á', 'A');\r\n res = res.replace('É', 'E');\r\n res = res.replace('Í', 'I');\r\n res = res.replace('Ó', 'O');\r\n res = res.replace('Ú', 'U');\r\n res = res.replace('À', 'A');\r\n res = res.replace('È', 'E');\r\n res = res.replace('Ì', 'I');\r\n res = res.replace('Ò', 'O');\r\n res = res.replace('Ù', 'U');\r\n res = res.replace('Ä', 'A');\r\n res = res.replace('Ë', 'E');\r\n res = res.replace('Ï', 'I');\r\n res = res.replace('Ö', 'O');\r\n res = res.replace('Ü', 'U');\r\n res = res.replace(',', '');\r\n res = res.replace('.', '');\r\n res = res.replace('\\'', '');\r\n res = res.replace('\"', '');\r\n }\r\n\r\n return res;\r\n }\r\n}\r\n","import { CellData } from './cell-data';\r\n\r\nexport interface HeadCellData extends CellData {\r\n orderBy?: OrderBy; // Possible values `none`, `asc`, `desc`.\r\n hasFilter?: boolean;\r\n filterClasses?: string;\r\n}\r\n\r\nexport interface HeadCellModelData extends HeadCellData {\r\n valueFilter?: string;\r\n activeFilter?: boolean;\r\n}\r\n\r\nexport enum OrderBy {\r\n none = 'none',\r\n asc = 'asc',\r\n desc = 'desc'\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {HeadCellModelData, OrderBy} from '../../../interfaces';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-table-advanced-header-cell',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class TableAdvancedHeaderCellComponent extends ContentBaseComponent implements HeadCellModelData {\r\n @Input() classes: string;\r\n @Input() id: string;\r\n @Input() colspan: number;\r\n @Input() rowspan: number;\r\n @Input() orderBy: OrderBy; // Possible values `none`, `asc`, `desc`.\r\n @Input() hasFilter: boolean;\r\n @Input() filterClasses: string;\r\n valueFilter?: string;\r\n activeFilter?: boolean;\r\n}\r\n","import {Component, ContentChildren, QueryList} from '@angular/core';\r\nimport {TableAdvancedHeaderCellComponent} from './table-advanced-header-cell.component';\r\n\r\n@Component({\r\n selector: 'desy-table-advanced-header',\r\n template: ''\r\n})\r\nexport class TableAdvancedHeaderComponent {\r\n @ContentChildren(TableAdvancedHeaderCellComponent) cells: QueryList<TableAdvancedHeaderCellComponent>;\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {CellData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-table-advanced-row-cell',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class TableAdvancedRowCellComponent extends ContentBaseComponent implements CellData {\r\n @Input() classes?: string;\r\n @Input() id?: string;\r\n @Input() colspan?: number;\r\n @Input() rowspan?: number;\r\n}\r\n","import {Component, ContentChildren, EventEmitter, Input, Output, QueryList} from '@angular/core';\r\nimport {TableAdvancedRowCellComponent} from './table-advanced-row-cell.component';\r\n\r\n@Component({\r\n selector: 'desy-table-advanced-row',\r\n template: ''\r\n})\r\nexport class TableAdvancedRowComponent {\r\n\r\n @ContentChildren(TableAdvancedRowCellComponent) cellsList: QueryList<TableAdvancedRowCellComponent>;\r\n\r\n @Input() id: string;\r\n @Input() checked: boolean;\r\n @Output() checkedChange: EventEmitter<boolean> = new EventEmitter();\r\n}\r\n","import {Directive, ElementRef, Input} from '@angular/core';\r\nimport {RowData} from '../interfaces';\r\nimport {TableAdvancedRowComponent} from '../components/table-advanced/components/table-advanced-row.component';\r\n\r\n/**\r\n * Permite gestionar celdas de una fila de la tabla\r\n */\r\n@Directive({\r\n selector: '[desyCell]'\r\n})\r\nexport class CellDirective {\r\n\r\n @Input() row: RowData|TableAdvancedRowComponent;\r\n @Input() rowIndex: number;\r\n @Input() columnIndex: number;\r\n\r\n constructor(private element: ElementRef) { }\r\n\r\n public getContent(): string {\r\n return this.element.nativeElement.textContent;\r\n }\r\n}\r\n","import {ContentChildren, Directive, Input, QueryList} from '@angular/core';\r\nimport {CellDirective} from './cell.directive';\r\nimport {RowData} from '../interfaces';\r\nimport {TableAdvancedRowComponent} from '../components/table-advanced/components/table-advanced-row.component';\r\n\r\n/**\r\n * Permite gestionar filas de la tabla\r\n */\r\n@Directive({\r\n selector: '[desyRow]'\r\n})\r\nexport class RowDirective {\r\n\r\n @ContentChildren(CellDirective) contentCells: QueryList<CellDirective>;\r\n @Input() desyRow: RowData|TableAdvancedRowComponent;\r\n\r\n\r\n /**\r\n * Devuelve la celda ubicada en la columna indicada\r\n * @param column índice de la columna\r\n */\r\n public getCell(column: number): CellDirective {\r\n return this.contentCells.find(cell => cell.columnIndex === column);\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {SearchUtils} from '../../../shared/utils/search-utils';\r\nimport {HeadCellModelData, OrderBy, RowData, WrapperData} from '../../interfaces';\r\nimport {TableCaptionComponent} from '../table/components/table-caption.component';\r\nimport {TableAdvancedHeaderCellComponent} from './components/table-advanced-header-cell.component';\r\nimport {TableAdvancedHeaderComponent} from './components/table-advanced-header.component';\r\nimport {TableAdvancedRowComponent} from './components/table-advanced-row.component';\r\nimport {CellDirective} from '../../directives/cell.directive';\r\nimport {RowDirective} from '../../directives/row.directive';\r\nimport {RecalculateTableParams} from '../../interfaces/recalculate-table-params';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-table-advanced',\r\n templateUrl: './table-advanced.component.html'\r\n})\r\nexport class TableAdvancedComponent extends AccessibilityComponent implements AfterViewInit {\r\n\r\n @Input() rows: RowData[]; // original data\r\n @Input() head: HeadCellModelData[];\r\n\r\n @Input() caption: string;\r\n @Input() captionClasses: string;\r\n @Input() firstCellIsHeader: boolean;\r\n @Input() hasCheckboxes: boolean;\r\n @Input() idPrefix: string;\r\n @Input() classes: string;\r\n @Input() checkboxClasses: string;\r\n @Input() id: string;\r\n @Input() wrapper: WrapperData;\r\n\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TableCaptionComponent) captionComponent: TableCaptionComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TableAdvancedHeaderComponent) headerComponent: TableAdvancedHeaderComponent;\r\n\r\n @ContentChildren(TableAdvancedRowComponent) rowComponentList: QueryList<TableAdvancedRowComponent>;\r\n @ViewChildren(RowDirective) rowData: QueryList<RowDirective>;\r\n\r\n @Output() rowsChange = new EventEmitter();\r\n @Output() rowsChecked = new EventEmitter();\r\n @Output() recalculateTable = new EventEmitter<RecalculateTableParams>();\r\n\r\n visibleRows: RowData[]|TableAdvancedRowComponent[];\r\n orderByType = OrderBy;\r\n isReset: boolean;\r\n\r\n constructor(private el: ElementRef, private changeDetector: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const elemntsFocus = this.el.nativeElement.querySelector('[tabindex]');\r\n if (elemntsFocus) {\r\n elemntsFocus.setAttribute('tabindex', '0');\r\n }\r\n this.recalculateVisibleElements();\r\n }\r\n\r\n /**\r\n * Refresca las filas visibles tras realizarse una búsqueda o una ordenación\r\n */\r\n recalculateVisibleElements(): void {\r\n const recalculateParams = this.buildRecalculateParams();\r\n\r\n // Si se captura el evento recalculateTable se deja al usuario la responsabilidad de filtrar y ordenar los elementos.\r\n if (this.recalculateTable.observers.length > 0) {\r\n this.recalculateTable.emit(recalculateParams);\r\n this.changeDetector.markForCheck();\r\n } else {\r\n\r\n // Se deben mostrar todas las filas temporalmente para poder aplicar el filtro y la ordenación sobre el contenido insertado\r\n this.visibleRows = this.getRows();\r\n this.changeDetector.detectChanges();\r\n\r\n // Se aplica el filtro y la ordenación\r\n let rowData = this.filterRows(recalculateParams, this.rowData.toArray());\r\n rowData = this.sortRows(recalculateParams, rowData);\r\n this.visibleRows = rowData.map(r => r.desyRow) as RowData[]|TableAdvancedRowComponent[];\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Construye los parámetros necesarios para recalcular la tabla, indicando los filtros y la ordenación\r\n */\r\n private buildRecalculateParams(): RecalculateTableParams {\r\n const params = {\r\n filters: [],\r\n sort: null\r\n };\r\n\r\n const head = this.getHeaderCells() as (HeadCellModelData|TableAdvancedHeaderCellComponent)[];\r\n if (head) {\r\n head.forEach((headerCell, headerCellIndex) => {\r\n if (headerCell.hasFilter && headerCell.activeFilter) {\r\n params.filters.push({ columnIndex: headerCellIndex, filterText: headerCell.valueFilter });\r\n }\r\n });\r\n\r\n const orderByColumnIndex = head.findIndex(cell => cell.orderBy && cell.orderBy !== OrderBy.none);\r\n params.sort = (orderByColumnIndex >= 0) ? { columnIndex: orderByColumnIndex, order: head[orderByColumnIndex].orderBy } : null;\r\n }\r\n\r\n return params;\r\n }\r\n\r\n /**\r\n * funciones de recoger ids, y caracteristicas\r\n */\r\n\r\n hasFilters(): boolean {\r\n const head = this.getHeaderCells();\r\n return head ? head.findIndex(cell => cell.hasFilter) >= 0 : false;\r\n }\r\n\r\n getHeaderCells(): HeadCellModelData[]|TableAdvancedHeaderCellComponent[] {\r\n return this.headerComponent && this.headerComponent.cells.length > 0 ? this.headerComponent.cells.toArray() : this.head;\r\n }\r\n\r\n getRows(): RowData[]|TableAdvancedRowComponent[] {\r\n let rows = [];\r\n if (this.rowComponentList.length > 0) {\r\n rows = this.rowComponentList.toArray();\r\n } else if (this.rows) {\r\n rows = this.rows;\r\n }\r\n return rows;\r\n }\r\n\r\n /**\r\n * Si se sobreescribe el comportamiento por defecto de filtrado y ordenación, se utilizarán las indicadas desde fuera del\r\n * componente (ya sea por parámetro o por contenido).\r\n * Si no se sobreescribe, devuelve las filas calculadas.\r\n */\r\n getVisibleRows(): RowData[]|TableAdvancedRowComponent[] {\r\n return this.recalculateTable.observers.length > 0 ? this.getRows() : this.visibleRows;\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : 'id-table-row';\r\n }\r\n\r\n getIdHeader(index: number): string {\r\n return this.getIdPrefix() + '-header-' + index;\r\n }\r\n\r\n getIdRowCheckbox(index: number): string {\r\n return this.getIdPrefix() + '-checkbox-' + index;\r\n }\r\n\r\n getIdHeaderFilter(index: number): string {\r\n return this.getIdPrefix() + '-header-filter-' + index;\r\n }\r\n\r\n getCaptionClass(): string {\r\n return this.captionComponent ? this.captionComponent.classes : this.captionClasses;\r\n }\r\n\r\n getStringOrderBy(orderBy: OrderBy): string {\r\n if (orderBy === OrderBy.asc){\r\n return 'ascending';\r\n } else if (orderBy === OrderBy.desc){\r\n return 'descending';\r\n } else if (orderBy === OrderBy.none){\r\n return 'none';\r\n }\r\n }\r\n\r\n handleTableCellContentEmpty(row: number, column: number): void {\r\n throw new Error(`cell content, html or text are required at row ${row} and column ${column}`);\r\n }\r\n\r\n /**\r\n * checks\r\n */\r\n handleCheckboxChange(row: RowData|TableAdvancedRowComponent): void {\r\n if (row instanceof TableAdvancedRowComponent) {\r\n row.checkedChange.emit(row.checked);\r\n }\r\n this.notifyCheckedChange();\r\n }\r\n\r\n /**\r\n * Permite desmarcar todas las filas\r\n */\r\n private uncheckAll(): void{\r\n this.getRows().forEach(r => {\r\n const mustEmit = r.checked && r instanceof TableAdvancedRowComponent;\r\n r.checked = false;\r\n if (mustEmit) {\r\n (r as TableAdvancedRowComponent).checkedChange.emit(r.checked);\r\n }\r\n });\r\n this.notifyCheckedChange();\r\n }\r\n\r\n /**\r\n * Notifica cambios en las filas\r\n */\r\n private notifyCheckedChange(): void {\r\n if (this.rowComponentList.length === 0) {\r\n this.rowsChange.emit(this.rows);\r\n }\r\n\r\n const rowChecks: any = {};\r\n this.getRows().forEach(r => rowChecks[r.id] = !!r.checked); // Se aplican también a las no visibles\r\n this.rowsChecked.emit(rowChecks);\r\n }\r\n\r\n\r\n /**\r\n * busqueda\r\n */\r\n handleInputSearch(item: HeadCellModelData): void {\r\n if (item.hasFilter) { // si tiene buscador\r\n item.activeFilter = !!item.valueFilter;\r\n this.uncheckAll();\r\n }\r\n\r\n this.recalculateVisibleElements();\r\n }\r\n\r\n /**\r\n * Se filtran las filas según lo especificado en la barra de búsqueda de cada columna.\r\n * Si no hay búsqueda sse devuelven todas las filas.\r\n * @param recalculateParams parametros para recalcular los elementos visibles\r\n * @param rows lista con todas las filas\r\n * @return lista de filas filtrada\r\n */\r\n private filterRows(recalculateParams: RecalculateTableParams, rows: RowDirective[]): RowDirective[] {\r\n let filteredRows = rows;\r\n recalculateParams.filters.forEach(filter => {\r\n filteredRows = filteredRows.filter(row =>\r\n SearchUtils.containsAnyWordFrom(row.getCell(filter.columnIndex).getContent(), filter.filterText));\r\n });\r\n\r\n return filteredRows;\r\n }\r\n\r\n /**\r\n * ordenacion\r\n */\r\n\r\n /**\r\n * Permite indicar que se debe ordenar la tabla\r\n * @param index indice de la columna\r\n */\r\n handleSortByColumn(index: number): void {\r\n const head = this.getHeaderCells();\r\n if (head) {\r\n head.forEach((cell, cellIndex) => {\r\n if (cell.orderBy) {\r\n cell.orderBy = cellIndex === index ? this.getNextDirection(cell) : OrderBy.none;\r\n }\r\n });\r\n }\r\n\r\n this.recalculateVisibleElements();\r\n }\r\n\r\n\r\n /**\r\n * Ordena las filas indicadas según la columna especificada en la cabecera\r\n * @param recalculateParams parametros para recalcular los elementos visibles\r\n * @param rows filas de la tabla a ordenar\r\n * @return mismas filas pero ordenadas por la columna indicada\r\n */\r\n private sortRows(recalculateParams: RecalculateTableParams, rows: RowDirective[]): RowDirective[] {\r\n let sortedRows = rows;\r\n if (recalculateParams.sort) {\r\n const columnIndex = recalculateParams.sort.columnIndex;\r\n const isAsc = recalculateParams.sort.order === OrderBy.asc;\r\n sortedRows = rows.sort((a, b) =>\r\n this.compareCellContent(a.getCell(columnIndex), b.getCell(columnIndex), isAsc));\r\n }\r\n\r\n return sortedRows;\r\n }\r\n\r\n /**\r\n * Compara el contenido de dos celdas. Este se invierte si el orden especificado es descendente.\r\n */\r\n compareCellContent(a: CellDirective, b: CellDirective, isAsc: boolean): number{\r\n let result;\r\n const aComparable = this.cleanCurrency(a.getContent());\r\n const bComparable = this.cleanCurrency(b.getContent());\r\n\r\n if (isNaN(+aComparable) && isNaN(+bComparable) ) { // son textos\r\n result = aComparable.localeCompare(bComparable, 'es', { sensitivity: 'base', ignorePunctuation: true });\r\n }else{ // son numeros\r\n result = aComparable.localeCompare(bComparable, undefined, { numeric: true });\r\n }\r\n\r\n return result * (isAsc ? 1 : -1);\r\n }\r\n\r\n /**\r\n * se calcula la ordenación nueva\r\n */\r\n private getNextDirection(item: HeadCellModelData): OrderBy {\r\n if (item.orderBy === OrderBy.none || item.orderBy === OrderBy.desc) {\r\n return OrderBy.asc;\r\n } else {\r\n return OrderBy.desc;\r\n }\r\n }\r\n\r\n /**\r\n * si es una cantidad de dinero se quita € para poder comparar los numeros\r\n */\r\n private cleanCurrency(txt: string): string {\r\n if (/[\\d.,]+[\\€]/g.test(txt)) {\r\n txt = txt.replace(/€/g, '');\r\n }\r\n return txt;\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ComponentRef,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n TemplateRef, Type,\r\n ViewChild, ViewContainerRef\r\n} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { FocusUtils } from '../../../shared/utils/focus-utils';\r\n\r\ntype AlertCreationCallback = ((dialog: AlertComponent, caller: ComponentRef<any>) => void);\r\n\r\n@Component({\r\n selector: 'desy-alert',\r\n templateUrl: './alert.component.html'\r\n})\r\nexport class AlertComponent extends AccessibilityComponent implements OnDestroy, AfterViewInit {\r\n\r\n @ViewChild('alertWrapper') alertWrapper: ElementRef;\r\n @ViewChild('container', {read: ViewContainerRef}) container: ViewContainerRef;\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() caller: TemplateRef<any>;\r\n @Input() focusFirst: boolean;\r\n\r\n @Input() set active(value: boolean) {\r\n setTimeout(() => {\r\n this._active = value;\r\n this.cdRef.detectChanges();\r\n this.handleActiveState();\r\n });\r\n }\r\n get active(): boolean {\r\n return this._active;\r\n }\r\n @Output() activeChange = new EventEmitter<boolean>();\r\n\r\n private _active: boolean;\r\n public callerContext: any;\r\n public callerType: Type<any>;\r\n public onCallerCreationCallback: AlertCreationCallback;\r\n\r\n private lastActiveState: boolean = undefined;\r\n private hasViewinit = false;\r\n private createdCallerFromType = false;\r\n\r\n constructor(private cdRef: ChangeDetectorRef, private factoryResolver: ComponentFactoryResolver) {\r\n super();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.active = false;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n\r\n if (!this.caller && !this.callerType) {\r\n throw Error('caller is required');\r\n }\r\n\r\n this.hasViewinit = true;\r\n this.handleActiveState();\r\n }\r\n\r\n dismiss(): void {\r\n this.activeChange.emit(false);\r\n }\r\n\r\n handleActiveState(): void {\r\n if (this._active && this.callerType && !this.createdCallerFromType) {\r\n const factory = this.factoryResolver.resolveComponentFactory(this.callerType);\r\n const component = this.container.createComponent(factory);\r\n if (this.onCallerCreationCallback) {\r\n this.onCallerCreationCallback(this, component);\r\n }\r\n this.createdCallerFromType = true;\r\n }\r\n\r\n if (this._active !== this.lastActiveState && this.hasViewinit) {\r\n this.lastActiveState = this._active;\r\n\r\n if (this._active && this.focusFirst) {\r\n this.cdRef.detectChanges();\r\n const focusElem = FocusUtils.getFirstFocusableElement(this.alertWrapper.nativeElement as HTMLElement);\r\n if (focusElem) {\r\n focusElem.focus();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {AccordionHeaderData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-accordion-header',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class AccordionHeaderComponent extends ContentBaseComponent implements AccordionHeaderData {\r\n\r\n @Input() classes?: string;\r\n\r\n}\r\n","import {Component, ContentChildren, EventEmitter, Input, Output} from '@angular/core';\r\nimport {AccordionItemData} from '../../../interfaces';\r\nimport {AccordionHeaderComponent} from '../accordion-header/accordion-header.component';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {ContentComponent} from '../../../../desy-commons/components/content/content.component';\r\nimport {AccessibilityComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-accordion-item',\r\n template: '',\r\n})\r\nexport class AccordionItemComponent extends AccessibilityComponent implements AccordionItemData {\r\n\r\n @Input() id: string;\r\n @Input() open: boolean;\r\n @Input() classes: string;\r\n\r\n @Output() openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n @DesyContentChild()\r\n @ContentChildren(AccordionHeaderComponent) headerComponent: AccordionHeaderComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n}\r\n","import {Component, ContentChildren, ElementRef, Input, OnChanges, QueryList, SimpleChanges, ViewChildren} from '@angular/core';\r\nimport {AccordionHeaderData} from '../../interfaces';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {AccordionItemData} from '../../interfaces';\r\nimport {AccordionHeaderComponent} from './accordion-header/accordion-header.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\nimport {AccordionItemComponent} from './accordion-item/accordion-item.component';\r\nimport {ContentComponent} from '../../../desy-commons/components/content/content.component';\r\n\r\n\r\n@Component({\r\n selector: 'desy-accordion',\r\n templateUrl: './accordion.component.html'\r\n})\r\nexport class AccordionComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @ViewChildren('itemSelector') itemSelectors: QueryList<ElementRef>;\r\n\r\n @Input() idPrefix: string;\r\n @Input() allowToggle: boolean;\r\n @Input() allowMultiple: boolean;\r\n @Input() heading: AccordionHeaderData;\r\n @Input() headingLevel;\r\n @Input() showControl: boolean;\r\n @Input() items: AccordionItemData[];\r\n @Input() classes: string;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(AccordionHeaderComponent) headingComponent: AccordionHeaderComponent;\r\n @ContentChildren(AccordionItemComponent) itemComponentList: QueryList<AccordionItemComponent>;\r\n\r\n showAll = true;\r\n currentItem: number;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.idPrefix) {\r\n throw new Error(`idPrefix is required`);\r\n }\r\n }\r\n\r\n getItemId(item, index: number): string {\r\n let id;\r\n if (item.id) {\r\n id = item.id;\r\n } else {\r\n if (index === 0) {\r\n id = this.idPrefix ? this.idPrefix : undefined;\r\n } else {\r\n id = this.idPrefix ? this.idPrefix + '-' + index : index;\r\n }\r\n }\r\n return id;\r\n }\r\n\r\n changeAll(): void {\r\n const items = this.getItems();\r\n items.forEach(item => {\r\n const isChange = item.open !== this.showAll;\r\n item.open = this.showAll;\r\n if (isChange && item instanceof AccordionItemComponent) {\r\n item.openChange.emit(item.open);\r\n }\r\n });\r\n this.showAll = !this.showAll;\r\n }\r\n\r\n toggleItem(item: AccordionItemData): void {\r\n if (!item.open || this.allowToggle) {\r\n const newOpenValue = !item.open;\r\n if (!this.allowMultiple) {\r\n const items = this.getItems();\r\n items.forEach(it => {\r\n const wasOpen = it.open;\r\n it.open = false;\r\n if (wasOpen && it !== item && it instanceof AccordionItemComponent) {\r\n it.openChange.emit(it.open);\r\n }\r\n });\r\n }\r\n item.open = newOpenValue;\r\n if (item instanceof AccordionItemComponent) {\r\n item.openChange.emit(item.open);\r\n }\r\n }\r\n }\r\n\r\n focusFirstItem(event): void {\r\n event.preventDefault();\r\n this.itemSelectors.toArray()[0].nativeElement.focus();\r\n }\r\n\r\n focusLastItem(event): void {\r\n event.preventDefault();\r\n this.itemSelectors.toArray()[this.itemSelectors.length - 1].nativeElement.focus();\r\n }\r\n\r\n focusNextItem(event, focusedItem: number): void {\r\n event.preventDefault();\r\n const selectors = this.itemSelectors.toArray();\r\n if (selectors[(focusedItem + 1) % selectors.length] != null) {\r\n selectors[(focusedItem + 1) % selectors.length].nativeElement.focus();\r\n }\r\n }\r\n\r\n focusPreviousItem(event, focusedItem: number): void {\r\n event.preventDefault();\r\n const selectors = this.itemSelectors.toArray();\r\n if (selectors[(focusedItem + selectors.length - 1) % selectors.length] != null) {\r\n selectors[(focusedItem + selectors.length - 1) % selectors.length].nativeElement.focus();\r\n }\r\n }\r\n\r\n selectItem( i: number ): void {\r\n this.currentItem = i;\r\n }\r\n\r\n getTitleClasses(): string {\r\n let classes = 'c-h2 mb-base';\r\n if (this.headingComponent && this.headingComponent.classes) {\r\n classes = this.headingComponent.classes;\r\n } else if (this.heading && this.heading.classes) {\r\n classes = this.heading.classes;\r\n }\r\n return classes;\r\n }\r\n\r\n getItems(): AccordionItemData[] {\r\n const items = this.itemComponentList && this.itemComponentList.length > 0 ? this.itemComponentList.toArray() : this.items;\r\n if (!items || items.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n return items;\r\n }\r\n\r\n getItemHeader(item: AccordionItemData): AccordionHeaderComponent {\r\n return item instanceof AccordionItemComponent ? item.headerComponent : null;\r\n }\r\n\r\n getItemContent(item: AccordionItemData): ContentComponent {\r\n return item instanceof AccordionItemComponent ? item.contentComponent : null;\r\n }\r\n\r\n handleRequiredEmpty(text: string): void {\r\n throw new Error(text);\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-spinner',\r\n templateUrl: './spinner.component.html'\r\n})\r\nexport class SpinnerComponent extends AccessibilityComponent {\r\n\r\n @Input() classes: string;\r\n @Input() text: string;\r\n\r\n @Input() id: string;\r\n\r\n}\r\n","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-details',\r\n templateUrl: './details.component.html'\r\n})\r\nexport class DetailsComponent extends AccessibilityComponent implements OnInit, OnChanges {\r\n\r\n @Input() summaryText: string;\r\n @Input() summaryHtml: string;\r\n @Input() summaryClasses: string;\r\n @Input() containerClasses: string;\r\n @Input() id: string;\r\n @Input() open: boolean;\r\n @Input() classes: string;\r\n\r\n ngOnInit(): void {\r\n summaryTextOrSummaryHtmlRequiredFunction(this.summaryText, this.summaryHtml);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n summaryTextOrSummaryHtmlRequiredFunction(this.summaryText, this.summaryHtml);\r\n }\r\n\r\n}\r\n\r\nexport function summaryTextOrSummaryHtmlRequiredFunction(text: string, html: string): void {\r\n if (!html && !text) {\r\n throw new Error(`summaryHtml or summaryText are required`);\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {TermDefinitionData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-term',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class TermComponent extends ContentBaseComponent implements TermDefinitionData {\r\n\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {TermDefinitionData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-definition',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class DefinitionComponent extends ContentBaseComponent implements TermDefinitionData {\r\n\r\n @Input() classes: string;\r\n @Input() id: string;\r\n}\r\n","import {Component, ContentChildren, Input} from '@angular/core';\r\nimport {DescriptionItemData} from '../../../interfaces';\r\nimport {TermComponent} from '../term/term.component';\r\nimport {DefinitionComponent} from '../definition/definition.component';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-description-item',\r\n template: ''\r\n})\r\nexport class DescriptionItemComponent implements DescriptionItemData {\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TermComponent) term: TermComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(DefinitionComponent) definition: DefinitionComponent;\r\n\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n}\r\n","import {Component, ContentChildren, Input, QueryList} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { DescriptionItemData } from '../../interfaces';\r\nimport {DescriptionItemComponent} from './description-item/description-item.component';\r\n\r\n@Component({\r\n selector: 'desy-description-list',\r\n templateUrl: './description-list.component.html'\r\n})\r\nexport class DescriptionListComponent extends AccessibilityComponent {\r\n\r\n @Input() items: Array<DescriptionItemData>;\r\n @ContentChildren(DescriptionItemComponent) itemComponents: QueryList<DescriptionItemComponent>;\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n handleContentEmpty(element: string): void {\r\n throw new Error(`${element} content, html or text is required`);\r\n }\r\n\r\n getItems(): DescriptionItemData[]|DescriptionItemComponent[] {\r\n const items = (this.itemComponents.length > 0) ? this.itemComponents.toArray() : this.items;\r\n if (!items || items.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n return items;\r\n }\r\n\r\n}\r\n","import { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { Component, Input, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { AccessibilityAndContentRequiredComponent, textOrHtmlRequiredFunction } from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-collapsible',\r\n templateUrl: './collapsible.component.html',\r\n animations: [\r\n trigger('displayCollapsible', [\r\n state('void', style({\r\n opacity: '0.0',\r\n transform: 'scaleY(0.95)'\r\n })),\r\n state('*', style({\r\n opacity: '1.0',\r\n transform: 'scaleY(1.0)'\r\n })),\r\n transition(':enter', [\r\n animate('100ms ease-out')\r\n ]),\r\n transition(':leave', [\r\n animate('75ms ease-in')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class CollapsibleComponent extends AccessibilityAndContentRequiredComponent implements OnInit, OnChanges {\r\n\r\n @Input() headerText: string;\r\n @Input() headerHtml: string;\r\n @Input() id: string;\r\n @Input() open: boolean;\r\n @Input() classes: string;\r\n\r\n show: string;\r\n\r\n isOpen(): void {\r\n this.open = !this.open;\r\n this.toggleOpen();\r\n }\r\n\r\n toggleOpen(): void {\r\n if (this.open){\r\n this.show = 'Ocultar';\r\n } else {\r\n this.show = 'Mostrar';\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n textOrHtmlRequiredFunction(this.text, this.html);\r\n this.toggleOpen();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n textOrHtmlRequiredFunction(this.text, this.html);\r\n this.toggleOpen();\r\n\r\n }\r\n\r\n headerTextOrheaderHtmlRequiredFunction(text: string, html: string, content: any): void {\r\n if (!html && !text && !content) {\r\n throw new Error(`headerHtml or headerText are required`);\r\n }\r\n }\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-item-content-right',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ItemContentRightComponent extends ContentBaseComponent {\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {ContentData} from '../../../../desy-commons/interfaces';\r\n\r\n@Component({\r\n selector: 'desy-item-content-bottom',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ItemContentBottomComponent extends ContentBaseComponent implements ContentData {\r\n @Input() classes: string;\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-item-item',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class ItemItemComponent extends ContentBaseComponent {\r\n\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n Input,\r\n QueryList,\r\n TemplateRef\r\n} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {ContentData, DescriptionData, IconData, TitleData} from '../../../desy-commons/interfaces';\r\nimport {TitleComponent} from '../../../desy-commons/components/title/title.component';\r\nimport {DescriptionComponent} from '../../../desy-commons/components/description/description.component';\r\nimport {ItemContentRightComponent} from './item-content-right/item-content-right.component';\r\nimport {ItemContentBottomComponent} from './item-content-bottom/item-content-bottom.component';\r\nimport {ItemItemComponent} from './item-item/item-item.component';\r\nimport {IconComponent} from '../../../desy-commons/components/icon/icon.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-item',\r\n templateUrl: './item.component.html'\r\n})\r\nexport class ItemComponent extends AccessibilityComponent implements AfterViewInit {\r\n\r\n @Input() title: TitleData;\r\n @Input() description: DescriptionData;\r\n @Input() headingLevel: number;\r\n @Input() items: string[];\r\n @Input() content: ContentData;\r\n @Input() icon: IconData;\r\n @Input() isDraggable: boolean;\r\n @Input() isLocked: boolean;\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() caller: TemplateRef<any>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TitleComponent) titleComponent: TitleComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(DescriptionComponent) descriptionComponent: DescriptionComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(IconComponent) iconComponent: IconComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ItemContentBottomComponent) contentBottomComponent: ItemContentBottomComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ItemContentRightComponent) contentRightComponent: ItemContentRightComponent;\r\n\r\n @ContentChildren(ItemItemComponent) itemComponents: QueryList<ItemItemComponent>;\r\n\r\n hasIconContent = true;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.titleComponent && !this.title) {\r\n throw new Error('title is required');\r\n }\r\n }\r\n\r\n\r\n getItems(): string[]|ItemItemComponent[] {\r\n return this.itemComponents.length > 0 ? this.itemComponents.toArray() : this.items;\r\n }\r\n\r\n handleIconContentEmpty(isEmpty: boolean): void {\r\n this.hasIconContent = !isEmpty;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n handleRequiredEmpty(text: string): void {\r\n throw new Error(text);\r\n }\r\n\r\n getTitle(): TitleData {\r\n return this.titleComponent ? this.titleComponent : this.title;\r\n }\r\n\r\n}\r\n","import { Component, Input, SimpleChanges, TemplateRef, OnChanges } from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-media-object',\r\n templateUrl: './media-object.component.html'\r\n})\r\nexport class MediaObjectComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() figureHtml: string;\r\n @Input() classes: string;\r\n @Input() center: boolean;\r\n @Input() reverse: boolean;\r\n @Input() figureClasses: string;\r\n @Input() contenClasses: string;\r\n\r\n @Input() caller: TemplateRef<any>;\r\n @Input() id: string;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.checkRequiredParams();\r\n }\r\n\r\n checkRequiredParams(): void {\r\n if (!this.figureHtml) {\r\n throw new Error(`figureHtml are required`);\r\n }\r\n }\r\n}\r\n","import { Component, ContentChild, Input, OnChanges, SimpleChanges, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { AccessibilityAndContentRequiredComponent, AccessibilityComponent } from '../../../shared/components';\r\nimport { StatusIconData } from '../../interfaces/status-icon-data';\r\n\r\n@Component({\r\n selector: 'desy-status',\r\n templateUrl: './status.component.html'\r\n})\r\nexport class StatusComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() text: string;\r\n @Input() id: string;\r\n @Input() classes: string;\r\n @Input() icon: StatusIconData;\r\n\r\n\r\n getType(): string {\r\n let type: string;\r\n if (this.icon.type){\r\n type = this.icon.type.toLocaleLowerCase();\r\n } else {\r\n type = 'success';\r\n } \r\n return type;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.text){\r\n throw new Error(`title is required`);\r\n }\r\n\r\n if (!this.icon){\r\n throw new Error(`icon is required`);\r\n }\r\n \r\n }\r\n}\r\n","import { Component, ContentChildren, Input, OnChanges, QueryList, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { DescriptionItemData, StatusItemTitleData, StatusData } from '../../interfaces';\r\nimport { ErrorMessageData, HintData } from '../../../desy-forms/interfaces';\r\nimport { DescriptionItemComponent } from '../description-list/description-item/description-item.component';\r\nimport { TitleComponent } from '../../../desy-commons/components/title/title.component';\r\nimport { HintComponent } from '../../../desy-forms/components/hint/hint.component';\r\nimport { ErrorMessageComponent } from '../../../desy-forms/components/error-message/error-message.component';\r\nimport { StatusComponent } from '../status/status.component';\r\nimport { ContentComponent } from '../../../desy-commons/components/content/content.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-status-item',\r\n templateUrl: './status-item.component.html'\r\n})\r\nexport class StatusItemComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() id: string;\r\n @Input() classes: string;\r\n\r\n @Input() errorId: string;\r\n @Input() describedBy: string;\r\n\r\n @Input() title: StatusItemTitleData;\r\n @Input() hint: HintData;\r\n @Input() errorMessage: ErrorMessageData;\r\n @Input() items: DescriptionItemData[];\r\n @Input() status: StatusData;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TitleComponent) titleComponent: TitleComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(HintComponent) hintComponent: HintComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ErrorMessageComponent) errorMessageComponent: ErrorMessageComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n @ContentChildren(DescriptionItemComponent) itemComponents: QueryList<DescriptionItemComponent>;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(StatusComponent) statusComponent: StatusComponent;\r\n @Input() caller: TemplateRef<any>;\r\n\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.id){\r\n throw new Error(`id is required`);\r\n }\r\n }\r\n\r\n handleContentEmpty(element: string): void {\r\n throw new Error(`${element} content, html or text is required`);\r\n }\r\n\r\n getItems(): DescriptionItemData[]|DescriptionItemComponent[] {\r\n return (this.itemComponents.length > 0) ? this.itemComponents.toArray() : this.items;\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\nimport {TabsPanelData} from '../../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-panel',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class PanelComponent extends ContentBaseComponent implements TabsPanelData {\r\n\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n}","import {Component, ContentChildren, Input } from '@angular/core';\r\nimport {DesyContentChild} from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport {ContentComponent} from '../../../../desy-commons/components/content/content.component';\r\nimport { PanelComponent } from '../panel/panel.component';\r\nimport { TabsItemsData, TabsPanelData } from '../../../interfaces';\r\nimport { AccessibilityComponent } from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-tab-item',\r\n template: ''\r\n})\r\nexport class TabItemComponent extends AccessibilityComponent implements TabsItemsData {\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(PanelComponent) panelComponent: PanelComponent;\r\n\r\n @Input() classes: string;\r\n @Input() disabled: boolean;\r\n @Input() id: string;\r\n panel?: TabsPanelData;\r\n\r\n}\r\n","import {\r\n AfterViewInit, ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n QueryList,\r\n SimpleChanges, ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { StringUtils } from '../../../shared/utils/string-utils';\r\nimport {TabsItemsData, TabsPanelData} from '../../interfaces';\r\nimport { TabItemComponent } from './tab-item/tab-item.component';\r\n\r\n@Component({\r\n selector: 'desy-tabs',\r\n templateUrl: './tabs.component.html'\r\n})\r\nexport class TabsComponent extends AccessibilityComponent implements OnChanges, AfterViewInit {\r\n\r\n @ContentChildren(TabItemComponent) itemComponents: QueryList<TabItemComponent>;\r\n @ViewChildren('tabSelector') tabSelectors: QueryList<ElementRef>;\r\n @ViewChildren('tabSelectorContentWrapper') tabSelectorContentWrapper: QueryList<ElementRef>;\r\n @ViewChild('tabSrOnly') tabSrOnly: ElementRef;\r\n\r\n\r\n @Input() id: string;\r\n @Input() idPrefix: string;\r\n @Input() classes: string;\r\n @Input() headingLevel: number;\r\n\r\n @Input() title: string;\r\n @Input() tablistAriaLabel: string;\r\n @Input() items: TabsItemsData[];\r\n\r\n currentTab = 0;\r\n currentPanel;\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.title){\r\n throw new Error(`title is required`);\r\n }\r\n\r\n if (!this.tablistAriaLabel){\r\n throw new Error(`tablistAriaLabel is required`);\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const item = this.getItems();\r\n this.selectTab(item.findIndex(value => !value.disabled));\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n getItems(): TabsItemsData[]|TabItemComponent[] {\r\n const items = (this.itemComponents.length > 0) ? this.itemComponents.toArray() : this.items;\r\n if (!items || items.length === 0) {\r\n throw new Error(`items are required`);\r\n }\r\n return items;\r\n }\r\n\r\n getItemPanel(tab: number): TabItemComponent {\r\n let panel;\r\n const items = this.getItems();\r\n const item = items[tab];\r\n if (item instanceof TabItemComponent){\r\n panel = item.panelComponent;\r\n }\r\n return panel;\r\n }\r\n\r\n handleContentEmpty(element: string): void {\r\n throw new Error(`${element} content, html or text is required`);\r\n }\r\n\r\n getIdPrefix(): string {\r\n if (this.idPrefix) {\r\n return this.idPrefix;\r\n }\r\n }\r\n\r\n getItemId(index: number): string {\r\n let id;\r\n const item = this.getItems();\r\n if (item[index].id) {\r\n id = item[index].id;\r\n } else {\r\n id = this.getIdPrefix() + '-' + index;\r\n }\r\n return id;\r\n }\r\n\r\n isDisabled(item: TabsItemsData): boolean {\r\n return item.disabled ? true : null;\r\n }\r\n\r\n\r\n selectTab( i: number ): void {\r\n this.currentTab = i;\r\n const currentItem = this.getItems()[i];\r\n this.currentPanel = currentItem instanceof TabItemComponent ? currentItem.panelComponent : currentItem.panel;\r\n this.tabSrOnly.nativeElement.innerHTML = this.tabSelectorContentWrapper.toArray()[this.currentTab].nativeElement.innerHTML;\r\n }\r\n\r\n focusFirstTab(event?): void {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n const enabledTabs = this.tabSelectors.filter((item, index) => !item[index].disabled);\r\n enabledTabs[0].nativeElement.focus();\r\n }\r\n\r\n focusLastTab(event?): void {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n const enabledTabs = this.tabSelectors.filter((item, index) => !item[index].disabled);\r\n enabledTabs[enabledTabs.length - 1].nativeElement.focus();\r\n }\r\n\r\n focusNextTab(focusedTab: number): void {\r\n const item = this.getItems();\r\n let nextTab = (focusedTab + 1) % item.length;\r\n while (nextTab !== focusedTab) {\r\n if (!item[nextTab].disabled) {\r\n this.tabSelectors.find((i, index) => index === nextTab).nativeElement.focus();\r\n break;\r\n }\r\n nextTab = (nextTab + 1) % item.length;\r\n }\r\n }\r\n\r\n focusPreviousTab(focusedTab: number): void {\r\n const item = this.getItems();\r\n let previousTab = (focusedTab - 1 + item.length) % item.length;\r\n while (previousTab !== focusedTab) {\r\n if (!item[previousTab].disabled) {\r\n this.tabSelectors.find((i, index) => index === previousTab).nativeElement.focus();\r\n break;\r\n }\r\n previousTab = (previousTab - 1 + item.length) % item.length;\r\n }\r\n }\r\n\r\n getPanelContent(tab: number): string {\r\n const item = this.getItems();\r\n return item[tab].panel && item[tab].panel.text ? `<p>${ StringUtils.escapeHtml(item[tab].panel.text) }</p>` : null;\r\n }\r\n}\r\n","import {\r\n ComponentFactoryResolver, ComponentRef,\r\n Injectable,\r\n TemplateRef, Type\r\n} from '@angular/core';\r\nimport { AlertOptions } from '../interfaces/alert-options';\r\nimport { OpenAlertResult } from '../interfaces/open-alert-result';\r\nimport { AlertComponent } from '../components/alert/alert.component';\r\nimport { NotificationComponent } from '../../desy-nav/components/notification/notification.component';\r\nimport { NotificationOptions } from '../../desy-nav/interfaces/notification-options';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AlertService {\r\n\r\n constructor(private factoryResolver: ComponentFactoryResolver) { }\r\n\r\n public openAlert(caller: TemplateRef<any>|NotificationOptions, alertOptions: AlertOptions): Promise<OpenAlertResult> {\r\n return new Promise<OpenAlertResult>((resolve, reject) => {\r\n\r\n if (!caller) {\r\n reject('caller is required');\r\n }\r\n\r\n if (!alertOptions) {\r\n reject('alertOptions is required');\r\n }\r\n\r\n const alert = this.createAlert(alertOptions);\r\n const result: OpenAlertResult = {\r\n alert\r\n };\r\n\r\n\r\n if (caller instanceof TemplateRef) {\r\n alert.instance.caller = caller;\r\n resolve(result);\r\n } else {\r\n alert.instance.callerType = NotificationComponent;\r\n alert.instance.onCallerCreationCallback = (d, c) => {\r\n this.initNotification(d, c, caller);\r\n result.component = c;\r\n resolve(result);\r\n };\r\n }\r\n });\r\n }\r\n\r\n public closeAlert(alert: ComponentRef<AlertComponent>|AlertComponent): void {\r\n\r\n if (!alert) {\r\n throw Error('alert is required');\r\n }\r\n\r\n if (alert instanceof ComponentRef) {\r\n alert.instance.dismiss();\r\n } else {\r\n alert.dismiss();\r\n }\r\n }\r\n\r\n public onCloseAlert(alert: ComponentRef<AlertComponent>|AlertComponent): Promise<void> {\r\n return new Promise<void>((resolve => {\r\n let a;\r\n if (alert instanceof ComponentRef) {\r\n a = alert.instance;\r\n } else {\r\n a = alert;\r\n }\r\n\r\n const subscription = a.activeChange.subscribe(() => {\r\n resolve();\r\n subscription.unsubscribe();\r\n });\r\n }));\r\n }\r\n\r\n\r\n private createAlert(alertOptions: AlertOptions): ComponentRef<AlertComponent> {\r\n const factory = this.factoryResolver.resolveComponentFactory(AlertComponent);\r\n const alert = alertOptions.place.createComponent<AlertComponent>(factory);\r\n\r\n alert.instance.active = true;\r\n if (alertOptions) {\r\n Object.assign(alert.instance, alertOptions);\r\n }\r\n\r\n this.onCloseAlert(alert).then(() => alert.destroy());\r\n\r\n return alert;\r\n }\r\n\r\n private initNotification(alert: AlertComponent, notificationRef: ComponentRef<NotificationComponent>,\r\n options: NotificationOptions): void {\r\n Object.assign(notificationRef.instance, options);\r\n if (options.isDismissible) {\r\n const subscription = notificationRef.instance.isOpenChange.subscribe(() => {\r\n this.closeAlert(alert);\r\n subscription.unsubscribe();\r\n });\r\n }\r\n }\r\n}\r\n","import {Component} from '@angular/core';\r\nimport {ContentBaseComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-tooltip-content',\r\n templateUrl: './tooltip-content.component.html'\r\n})\r\nexport class TooltipContentComponent extends ContentBaseComponent {\r\n}\r\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { PaginationItemData } from '../../interfaces';\r\n\r\n@Component({\r\n selector: 'desy-pagination',\r\n templateUrl: './pagination.component.html'\r\n})\r\nexport class PaginationComponent extends AccessibilityComponent implements OnChanges {\r\n\r\n @Input() hasSelect: boolean;\r\n @Input() idPrefix: string;\r\n @Input() classesContainer: string;\r\n @Input() totalItems: number;\r\n @Input() itemsPerPage: number;\r\n @Input() hasPrevious: boolean;\r\n @Input() hasNext: boolean;\r\n @Input() previousText: string;\r\n @Input() nextText: string;\r\n @Input() classes: string;\r\n @Input() id: string;\r\n\r\n @Input() currentPage = 1; // == currentPageindex + 1\r\n @Output() currentPageChange = new EventEmitter<number>();\r\n\r\n nPages: number;\r\n items: PaginationItemData[];\r\n\r\n readonly previousIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"self-center h-2.5 w-2.5 mr-2\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M54.87 71.77a2.5 2.5 0 010-3.54L106 17.07A10 10 0 1091.89 2.93L35.43 59.39a15 15 0 000 21.22l56.46 56.46A10 10 0 10106 122.93z\" fill=\"currentColor\" /></svg>';\r\n readonly nextIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"self-center h-2.5 w-2.5 ml-2\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M34 137.07a10 10 0 010-14.14l51.13-51.16a2.5 2.5 0 000-3.54L34 17.07A10 10 0 0148.11 2.93l56.46 56.46a15 15 0 010 21.22l-56.46 56.46a10 10 0 01-14.11 0z\" fill=\"currentColor\" /></svg>';\r\n readonly prefix = '<span class=\"sr-only\">Página </span>';\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.id) {\r\n throw new Error(`id is required`);\r\n }\r\n if (this.totalItems === undefined || this.totalItems === null) {\r\n throw new Error(`totalItems is required`);\r\n }\r\n if (!this.itemsPerPage === undefined || this.itemsPerPage === null) {\r\n throw new Error(`itemsPerPage is required`);\r\n }\r\n\r\n this.nPages = Math.ceil(this.totalItems / this.itemsPerPage);\r\n\r\n if (!this.currentPage || this.currentPage < 1 || this.currentPage > this.nPages) {\r\n this.currentPage = 1;\r\n setTimeout( () => this.currentPageChange.emit(this.currentPage));\r\n }\r\n\r\n if (!this.previousText) {\r\n this.previousText = 'Anterior';\r\n }\r\n if (!this.nextText) {\r\n this.nextText = 'Siguiente';\r\n }\r\n\r\n this.buildPages();\r\n }\r\n\r\n getSuffix(page: number): string {\r\n return page >= 0 && page * this.itemsPerPage < this.totalItems ?\r\n `<span class=\"sr-only\">: Página ${page + 1} con los resultados del ${page * this.itemsPerPage + 1} al ${this.getLastItemNumber(page)}</span>`\r\n : '';\r\n }\r\n\r\n getLastItemNumber(pageIndex: number): number {\r\n return Math.min((pageIndex + 1) * this.itemsPerPage, this.totalItems);\r\n }\r\n\r\n buildPages(): void {\r\n this.items = [];\r\n for (let i = 0; i < this.nPages; i++) {\r\n const item: PaginationItemData = {\r\n text: i + 1,\r\n active: ( (i + 1) === this.currentPage),\r\n routerLink: []\r\n };\r\n this.items.push(item);\r\n }\r\n }\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : 'pagination-item';\r\n }\r\n\r\n getButtonId( index: number): string {\r\n return this.getIdPrefix() + (index === 0) ? '' : '-' + index;\r\n }\r\n\r\n changePage(current: number): void{\r\n this.currentPage = current;\r\n this.currentPageChange.emit(this.currentPage);\r\n for (let i = 0; i < this.items.length; i++) {\r\n const item = this.items[i];\r\n item.active = ((i + 1) === this.currentPage);\r\n }\r\n }\r\n\r\n previous(): void {\r\n if (this.currentPage > 1) {\r\n this.changePage(this.currentPage - 1);\r\n }\r\n }\r\n\r\n next(): void {\r\n if (this.currentPage < this.nPages) {\r\n this.changePage(this.currentPage + 1);\r\n }\r\n }\r\n\r\n getActiveItemText(): any {\r\n const activeItems = this.items.filter(item => item.active);\r\n return activeItems && activeItems.length > 0 ? activeItems[0].text : '';\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform, SecurityContext } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'innerHtml'\r\n})\r\nexport class InnerHtmlPipe implements PipeTransform {\r\n\r\n constructor(private sanitizer: DomSanitizer) { }\r\n\r\n transform(value: string): SafeHtml {\r\n return this.sanitizer.sanitize(SecurityContext.HTML, value);\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'externalHref'\r\n})\r\nexport class ExternalHrefPipe implements PipeTransform {\r\n\r\n /**\r\n * Asegura que un enlace externo sea correcto\r\n * @param href enlace\r\n */\r\n transform(href: string): string {\r\n let externalHref: string;\r\n if (href) {\r\n if (href.match('http(s)?://')) {\r\n externalHref = href;\r\n } else {\r\n externalHref = 'http://' + href;\r\n }\r\n } else {\r\n externalHref = '#';\r\n }\r\n return externalHref;\r\n }\r\n\r\n}\r\n","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, Output} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[desyAttributeChange]'\r\n})\r\nexport class AttributeChangeDirective implements OnDestroy {\r\n\r\n private changes: MutationObserver;\r\n\r\n @Input() attributesToCheck: string|string[];\r\n\r\n @Output()\r\n public desyAttributeChange = new EventEmitter();\r\n\r\n @Output()\r\n public desyAttributeChangeMutation = new EventEmitter();\r\n\r\n constructor(private elementRef: ElementRef) {\r\n const element = this.elementRef.nativeElement;\r\n\r\n this.changes = new MutationObserver((mutations: MutationRecord[]) => {\r\n mutations.forEach((mutation: MutationRecord) => {\r\n if (this.attributesToCheck) {\r\n const attrs = typeof (this.attributesToCheck) === 'string' ? [this.attributesToCheck] : this.attributesToCheck;\r\n if (attrs.findIndex(v => v === mutation.attributeName) >= 0) {\r\n this.desyAttributeChange.emit(this.elementRef.nativeElement.innerHTML);\r\n this.desyAttributeChangeMutation.emit(mutation);\r\n }\r\n }\r\n });\r\n }\r\n );\r\n\r\n this.changes.observe(element, {\r\n attributes: true,\r\n childList: false,\r\n characterData: false,\r\n subtree: false\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.changes.disconnect();\r\n }\r\n}\r\n","import {Directive, ElementRef, Input, OnChanges, SimpleChanges} from '@angular/core';\r\n@Directive({\r\n selector: '[desyInnerContent]'\r\n})\r\nexport class InnerContentDirective implements OnChanges {\r\n\r\n @Input('desyInnerContent') content: string;\r\n @Input() isHtml: boolean;\r\n @Input() deleteContentIfEmpty = true;\r\n\r\n constructor(private el: ElementRef) { }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.content) {\r\n if (this.isHtml) {\r\n this.el.nativeElement.innerHTML = this.content;\r\n } else {\r\n this.el.nativeElement.innerText = this.content;\r\n }\r\n } else if (this.deleteContentIfEmpty) {\r\n this.el.nativeElement.innerText = null;\r\n }\r\n }\r\n\r\n}\r\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[desyClickOutside]'\r\n})\r\nexport class ClickOutsideDirective {\r\n\r\n @Input('desyClickOutside') active = true;\r\n @Output() clickOutside = new EventEmitter<void>();\r\n @Input() desyClickOutsideElem: Element;\r\n\r\n constructor(private hostElementRef: ElementRef) { }\r\n\r\n @HostListener('document:click', ['$event.target'])\r\n public onClick(target): void {\r\n let clickedInside;\r\n if (this.desyClickOutsideElem) {\r\n clickedInside = this.desyClickOutsideElem.contains(target);\r\n } else {\r\n clickedInside = (this.hostElementRef.nativeElement as Element).contains(target);\r\n }\r\n if (!clickedInside && this.active) {\r\n this.clickOutside.emit();\r\n }\r\n }\r\n\r\n}\r\n","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, Output} from '@angular/core';\r\n\r\n/**\r\n * Permite comprobar cuándo se produce un cambio en el contenido de un elemento.\r\n * La propia directiva emite el html interno del elemento en formato string, mientras que desyContentChangeMutation emite los cambios.\r\n */\r\n@Directive({\r\n selector: '[desyContentChange]'\r\n})\r\nexport class ContentChangeDirective implements OnDestroy {\r\n\r\n private changes: MutationObserver;\r\n\r\n @Input() observeProperties: { attributes: boolean, childList: boolean, characterData: boolean, subtree: boolean } = {\r\n attributes: false,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n };\r\n\r\n @Output()\r\n public desyContentChange = new EventEmitter<ElementRef>();\r\n\r\n @Output()\r\n public desyContentChangeMutation = new EventEmitter();\r\n\r\n constructor(private elementRef: ElementRef) {\r\n const element = this.elementRef.nativeElement;\r\n\r\n this.changes = new MutationObserver((mutations: MutationRecord[]) => {\r\n mutations.forEach((mutation: MutationRecord) => {\r\n this.desyContentChange.emit(this.elementRef);\r\n this.desyContentChangeMutation.emit(mutation);\r\n });\r\n }\r\n );\r\n\r\n this.changes.observe(element, this.observeProperties);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.changes.disconnect();\r\n }\r\n}\r\n","import {AfterViewInit, ContentChildren, Directive, ElementRef, EventEmitter, OnDestroy, Output, QueryList} from '@angular/core';\r\n\r\n/**\r\n * Emite un evento cuando el contenido de un elemento esté vacío\r\n * El contenido marcado con #desyContentEmptyIgnore será ignorado\r\n *\r\n * NOTA: tener en cuenta que los eventos se emiten después de generarse la vista, por lo que si al gestionar el evento se realizan\r\n * cambios que afectan a la template, conviene forzar la detección de cambios. (Ejemplo de esto en el icono de NotificationComponent)\r\n */\r\n@Directive({\r\n selector: '[desyContentEmpty]'\r\n})\r\nexport class ContentEmptyDirective implements OnDestroy, AfterViewInit {\r\n\r\n @Output()\r\n public desyContentEmpty = new EventEmitter();\r\n\r\n @Output()\r\n public desyContentNotEmpty = new EventEmitter();\r\n\r\n @ContentChildren('desyContentEmptyIgnore', {read: ElementRef}) contentsToIgnore: QueryList<ElementRef>;\r\n\r\n private changes: MutationObserver;\r\n private lastWasEmpty = false;\r\n private viewInit = false;\r\n\r\n constructor(private elementRef: ElementRef) {\r\n const element = this.elementRef.nativeElement;\r\n this.changes = new MutationObserver((mutations: MutationRecord[]) => mutations.forEach(() => this.checkContent()));\r\n this.changes.observe(element, {\r\n attributes: false,\r\n childList: true,\r\n characterData: true,\r\n subtree: false\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.viewInit) {\r\n this.viewInit = true;\r\n this.checkContent();\r\n }\r\n }\r\n\r\n /**\r\n * Comprueba el contenido del elemento una vez se haya inicializado la vista. Si se detecta que el elemento está vacío, las comprobaciones\r\n * sucesivas que tampoco detecten contenido no emitirán evento.\r\n */\r\n checkContent(): void {\r\n if (this.viewInit) {\r\n const childs: NodeListOf<ChildNode> = this.elementRef.nativeElement.childNodes;\r\n let hasContent = false;\r\n for (let i = 0; i < childs.length && !hasContent; i++) {\r\n const item = childs.item(i);\r\n if (item.nodeType === Node.TEXT_NODE && item.textContent.length > 0) {\r\n hasContent = true;\r\n } else if ((item.nodeType === Node.ELEMENT_NODE || item.nodeType === Node.CDATA_SECTION_NODE) && this.isContentNode(item)) {\r\n hasContent = true;\r\n }\r\n }\r\n\r\n if (hasContent) {\r\n if (this.lastWasEmpty) {\r\n this.desyContentNotEmpty.emit(this.elementRef.nativeElement.innerHTML);\r\n }\r\n this.lastWasEmpty = false;\r\n } else {\r\n if (!this.lastWasEmpty) {\r\n this.desyContentEmpty.emit(this.elementRef.nativeElement.innerHTML);\r\n }\r\n this.lastWasEmpty = true;\r\n }\r\n }\r\n }\r\n\r\n private isContentNode(elem: Node): boolean {\r\n let contentNode = true;\r\n if (this.contentsToIgnore && this.contentsToIgnore.length > 0) {\r\n contentNode = !this.contentsToIgnore.find(ignoreElem => ignoreElem.nativeElement === elem);\r\n }\r\n return contentNode;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.changes.disconnect();\r\n }\r\n}\r\n","import {\r\n ComponentFactory,\r\n ComponentFactoryResolver,\r\n Directive,\r\n Injector,\r\n Input, OnChanges,\r\n SimpleChanges, TemplateRef,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport {ContentBaseComponent} from '../components';\r\n\r\n/**\r\n * Permite introducir contenido de forma dinámica en una posición determinada desde:\r\n * - component: Componente existente de tipo ContentBase\r\n * - html: texto html en formato string\r\n * - text: texto plano en formato string\r\n */\r\n@Directive({\r\n selector: '[desyCustomInnerContent]'\r\n})\r\nexport class CustomInnerContentDirective implements OnChanges {\r\n\r\n @Input() desyCustomInnerContent: { component?: any|ContentBaseComponent, template?: TemplateRef<any>, html?: string, text?: string };\r\n\r\n private factory: ComponentFactory<ContentBaseComponent>;\r\n\r\n constructor(private viewContainerRef: ViewContainerRef, private resolver: ComponentFactoryResolver, private injector: Injector) {\r\n this.factory = this.resolver.resolveComponentFactory(ContentBaseComponent);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.viewContainerRef.clear();\r\n if (this.desyCustomInnerContent.component && this.desyCustomInnerContent.component instanceof ContentBaseComponent) {\r\n\r\n // Se crea la vista embebida basándose en el contenido del ContentBase indicado.\r\n this.viewContainerRef.createEmbeddedView(this.desyCustomInnerContent.component.getContent());\r\n } else if (this.desyCustomInnerContent.template) {\r\n\r\n // Se crea la vista embebida utilizando directamente el template.\r\n this.viewContainerRef.createEmbeddedView(this.desyCustomInnerContent.template);\r\n } else if (this.desyCustomInnerContent.html) {\r\n\r\n // Se carga el contenido en un div temporal.\r\n const tmpWrapper = document.createElement('div');\r\n tmpWrapper.innerHTML = this.desyCustomInnerContent.html;\r\n\r\n // Los nodos hijos del div se proyectan dentro de un componente ContentBase.\r\n const nodeList = [];\r\n tmpWrapper.childNodes.forEach(node => nodeList.push(node));\r\n const componentRef = this.factory.create(this.injector, [ nodeList ]);\r\n\r\n // Finalmente se crea la vista embebida basándose en el contenido del ContentBase creado.\r\n // Se podría hacer con un this.viewContainerRef.createComponent(), pero así se evita el tag envolvente del componente en el DOM\r\n this.viewContainerRef.createEmbeddedView(componentRef.instance.getContent());\r\n } else if (this.desyCustomInnerContent.text) {\r\n\r\n // Se carga el contenido en un nodo de texto\r\n const textNode = document.createTextNode(this.desyCustomInnerContent.text);\r\n\r\n // El nodo de texto se proyecta dentro de un componente ContentBase\r\n const componentRef = this.factory.create(this.injector, [[ textNode ]]);\r\n\r\n // Finalmente se crea la vista embebida basándose en el contenido del ContentBase creado.\r\n // Se podría hacer con un this.viewContainerRef.createComponent(), pero así se evita el tag envolvente del componente en el DOM\r\n this.viewContainerRef.createEmbeddedView(componentRef.instance.getContent());\r\n }\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\n\r\n// components\r\nimport {\r\n AccessibilityComponent,\r\n ContentBaseComponent,\r\n TextOrHtmlRequiredComponent,\r\n AccessibilityAndTextOrHtmlRequiredComponent,\r\n AccessibilityAndContentRequiredComponent\r\n} from './components';\r\n\r\n// pipes\r\nimport { InnerHtmlPipe } from './pipes/inner-html.pipe';\r\nimport { MakeHtmlListPipe } from './pipes/make-html-list.pipe';\r\nimport { ExternalHrefPipe } from './pipes/external-href.pipe';\r\n\r\n// directives\r\nimport { AttributeChangeDirective } from './directives/attribute-change.directive';\r\nimport { InnerContentDirective } from './directives/inner-content.directive';\r\nimport { ClickOutsideDirective } from './directives/click-outside.directive';\r\nimport { ContentChangeDirective } from './directives/content-change.directive';\r\nimport { ContentEmptyDirective } from './directives/content-empty.directive';\r\nimport { CustomInnerContentDirective } from './directives/custom-inner-content.directive';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n // components\r\n AccessibilityComponent,\r\n ContentBaseComponent,\r\n TextOrHtmlRequiredComponent,\r\n AccessibilityAndTextOrHtmlRequiredComponent,\r\n AccessibilityAndContentRequiredComponent,\r\n\r\n // pipes\r\n InnerHtmlPipe,\r\n MakeHtmlListPipe,\r\n ExternalHrefPipe,\r\n\r\n // directives\r\n AttributeChangeDirective,\r\n InnerContentDirective,\r\n ClickOutsideDirective,\r\n ContentChangeDirective,\r\n ContentEmptyDirective,\r\n CustomInnerContentDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n ],\r\n exports: [\r\n RouterModule,\r\n\r\n // components\r\n AccessibilityComponent,\r\n ContentBaseComponent,\r\n TextOrHtmlRequiredComponent,\r\n AccessibilityAndTextOrHtmlRequiredComponent,\r\n AccessibilityAndContentRequiredComponent,\r\n\r\n // pipes\r\n InnerHtmlPipe,\r\n MakeHtmlListPipe,\r\n ExternalHrefPipe,\r\n\r\n // directives\r\n AttributeChangeDirective,\r\n InnerContentDirective,\r\n ClickOutsideDirective,\r\n ContentChangeDirective,\r\n ContentEmptyDirective,\r\n CustomInnerContentDirective,\r\n ]\r\n})\r\nexport class SharedModule { }\r\n","import { Component } from '@angular/core';\r\nimport { ControlContainer, NgForm } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'desy-template-driven-wrapper',\r\n templateUrl: './template-driven-wrapper.component.html',\r\n providers: [ { provide: ControlContainer, useExisting: NgForm, } ]\r\n})\r\nexport class TemplateDrivenWrapperComponent {\r\n}\r\n","// componentes\r\nimport { NgModule } from '@angular/core';\r\nimport { IconComponent } from './components/icon/icon.component';\r\nimport { ContentComponent } from './components/content/content.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { NgxTippyModule } from 'ngx-tippy-wrapper';\r\nimport { TitleComponent } from './components/title/title.component';\r\nimport { DescriptionComponent } from './components/description/description.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n IconComponent,\r\n ContentComponent,\r\n DescriptionComponent,\r\n TitleComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n NgxTippyModule\r\n ],\r\n exports: [\r\n IconComponent,\r\n ContentComponent,\r\n DescriptionComponent,\r\n TitleComponent\r\n ]\r\n})\r\n\r\nexport class DesyCommonsModule { }\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { SharedModule } from '../shared/shared.module';\r\n// componentes\r\nimport { TemplateDrivenWrapperComponent } from './components/template-driven-wrapper/template-driven-wrapper.component';\r\nimport { FormFieldComponent } from './components/form-field/form-field.component';\r\nimport { HintComponent } from './components/hint/hint.component';\r\nimport { LabelComponent } from './components/label/label.component';\r\nimport { ErrorMessageComponent } from './components/error-message/error-message.component';\r\nimport { FieldsetComponent } from './components/fieldset/fieldset.component';\r\nimport { LegendComponent } from './components/fieldset/legend/legend.component';\r\nimport { TextareaComponent } from './components/textarea/textarea.component';\r\nimport { CharacterCountComponent } from './components/character-count/character-count.component';\r\nimport { InputComponent } from './components/input/input.component';\r\nimport { SelectComponent } from './components/select/select.component';\r\nimport { FileUploadComponent } from './components/file-upload/file-upload.component';\r\nimport { InputGroupComponent } from './components/input-group/input-group.component';\r\nimport { RadiosComponent } from './components/radios/radios.component';\r\nimport { RadioItemComponent } from './components/radios/radio-item/radio-item.component';\r\nimport { CheckboxesComponent } from './components/checkboxes/checkboxes.component';\r\nimport { CheckboxItemComponent } from './components/checkboxes/checkbox-item/checkbox-item.component';\r\nimport { DateInputComponent } from './components/date-input/date-input.component';\r\nimport { SearchBarComponent} from './components/search-bar/search-bar.component';\r\nimport { OptionComponent } from './components/select/option/option.component';\r\nimport { DateInputDayComponent } from './components/date-input/date-input-day/date-input-day.component';\r\nimport { DateInputMonthComponent } from './components/date-input/date-input-month/date-input-month.component';\r\nimport { DateInputYearComponent } from './components/date-input/date-input-year/date-input-year.component';\r\n\r\n// directivas\r\nimport { ConditionDirective } from './directives/condition.directive';\r\n\r\nimport {DesyCommonsModule} from '../desy-commons/desy-commons.module';\r\nimport { InputGroupItemComponent } from './components/input-group/input-group-item/input-group-item.component';\r\nimport { DateInputItemComponent } from './components/date-input/date-input-item/date-input-item.component';\r\nimport { InputGroupDividerComponent } from './components/input-group/input-group-divider/input-group-divider.component';\r\nimport { DateInputDividerComponent } from './components/date-input/date-input-divider/date-input-divider.component';\r\nimport { InputGroupInputComponent } from './components/input-group/input-group-input/input-group-input.component';\r\nimport { InputGroupSelectComponent } from './components/input-group/input-group-select/input-group-select.component';\r\nimport { OptionGroupComponent } from './components/select/option-group/option-group.component';\r\nimport { SelectItemComponent } from './components/select/select-item/select-item.component';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n TemplateDrivenWrapperComponent,\r\n FormFieldComponent,\r\n HintComponent,\r\n LabelComponent,\r\n ErrorMessageComponent,\r\n FieldsetComponent,\r\n LegendComponent,\r\n TextareaComponent,\r\n CharacterCountComponent,\r\n InputComponent,\r\n SelectComponent,\r\n FileUploadComponent,\r\n InputGroupComponent,\r\n InputGroupItemComponent,\r\n DateInputItemComponent,\r\n InputGroupDividerComponent,\r\n DateInputDividerComponent,\r\n InputGroupInputComponent,\r\n InputGroupSelectComponent,\r\n RadiosComponent,\r\n RadioItemComponent,\r\n CheckboxesComponent,\r\n CheckboxItemComponent,\r\n DateInputComponent,\r\n SearchBarComponent,\r\n OptionComponent,\r\n OptionGroupComponent,\r\n SelectItemComponent,\r\n DateInputDayComponent,\r\n DateInputMonthComponent,\r\n DateInputYearComponent,\r\n\r\n ConditionDirective,\r\n\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n SharedModule,\r\n DesyCommonsModule,\r\n ],\r\n exports: [\r\n HintComponent,\r\n LabelComponent,\r\n ErrorMessageComponent,\r\n FieldsetComponent,\r\n LegendComponent,\r\n TextareaComponent,\r\n CharacterCountComponent,\r\n InputComponent,\r\n SelectComponent,\r\n FileUploadComponent,\r\n InputGroupComponent,\r\n InputGroupDividerComponent,\r\n DateInputDividerComponent,\r\n InputGroupInputComponent,\r\n InputGroupSelectComponent,\r\n RadiosComponent,\r\n RadioItemComponent,\r\n CheckboxesComponent,\r\n CheckboxItemComponent,\r\n DateInputComponent,\r\n SearchBarComponent,\r\n OptionComponent,\r\n OptionGroupComponent,\r\n DateInputDayComponent,\r\n DateInputMonthComponent,\r\n DateInputYearComponent,\r\n\r\n ConditionDirective\r\n ]\r\n})\r\nexport class DesyFormsModule { }\r\n","import {\r\n AfterContentInit, ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../shared/components';\r\nimport {ContentComponent} from '../../../desy-commons/components/content/content.component';\r\nimport {IconComponent} from '../../../desy-commons/components/icon/icon.component';\r\nimport {IconData} from '../../../desy-commons/interfaces';\r\nimport {TooltipContentComponent} from './tooltip-content/tooltip-content.component';\r\nimport {DesyContentChild} from '../../../shared/decorators/desy-content-child.decorator';\r\n\r\n@Component({\r\n selector: 'desy-tooltip',\r\n templateUrl: './tooltip.component.html'\r\n})\r\nexport class TooltipComponent extends AccessibilityComponent implements OnChanges, AfterContentInit {\r\n\r\n static readonly KEY_CODE_ESC = 'Escape';\r\n\r\n @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(IconComponent) iconComponent: IconComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(TooltipContentComponent) tooltipContentComponent: TooltipContentComponent;\r\n\r\n @ViewChild('tooltipContent', { read: ElementRef, static: true }) tooltipContent: ElementRef;\r\n\r\n @Input() id: string;\r\n @Input() text: string;\r\n @Input() html: string;\r\n @Input() complex: boolean;\r\n @Input() classes: string;\r\n @Input() classesTooltip: string;\r\n @Input() icon: IconData;\r\n @Input() caller: TemplateRef<any>;\r\n\r\n tippyProperties: any;\r\n hasContent = true;\r\n hasIconComponentContent = true;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngOnChanges(changes?: SimpleChanges): void {\r\n if (!this.id) {\r\n throw Error('id is required');\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n const contentTooltip = this.tooltipContent.nativeElement as HTMLElement;\r\n this.tippyProperties = {\r\n placement: 'top',\r\n inlinePositioning: true,\r\n content: contentTooltip,\r\n allowHTML: true, // Make sure you are sanitizing any user data if rendering HTML to prevent XSS attacks.\r\n trigger: 'mouseenter focus',\r\n hideOnClick: false,\r\n theme: '',\r\n plugins: [{\r\n name: 'hideOnEsc',\r\n defaultValue: true,\r\n fn({hide}): any {\r\n\r\n function onKeyDown(event: KeyboardEvent): void {\r\n if (event.key === TooltipComponent.KEY_CODE_ESC) {\r\n hide();\r\n }\r\n }\r\n\r\n return {\r\n onShow(): void {\r\n document.addEventListener('keydown', onKeyDown);\r\n },\r\n onHide(): void {\r\n document.removeEventListener('keydown', onKeyDown);\r\n },\r\n };\r\n },\r\n }],\r\n role: 'tooltip',\r\n aria: {\r\n content: this.complex ? 'describedby' : 'labelledby',\r\n },\r\n };\r\n }\r\n\r\n getIdButton(): string {\r\n return this.id + '-button';\r\n }\r\n\r\n getIdTooltip(): string {\r\n return this.id + '-tooltip';\r\n }\r\n\r\n handleEmptyContent(isEmpty: boolean): void {\r\n this.hasContent = !isEmpty;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n handleEmptyIconContent(isEmpty: boolean): void {\r\n this.hasIconComponentContent = !isEmpty;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n handleEmptyTooltipContent(): void {\r\n throw Error('caller attribute or inner desy-tooltip-content component are required');\r\n }\r\n\r\n getMainContent(): string {\r\n let content;\r\n if (this.html) {\r\n content = this.html;\r\n } else if (this.text) {\r\n content = `<p>${this.text}</p>`;\r\n }\r\n return content;\r\n }\r\n\r\n getIconContent(icon: IconData): string {\r\n let iconContent;\r\n if (icon.html) {\r\n iconContent = this.icon.html;\r\n } else if (icon.type === 'info') {\r\n iconContent = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"w-4 h-4 text-primary-base\" role=\"img\" aria-label=\"Información\"><path d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zm7.5 105a7.5 7.5 0 01-15 0V70a7.5 7.5 0 0115 0zM70 50a10 10 0 1110-10 10 10 0 01-10 10z\" fill=\"currentColor\"/></svg>';\r\n } else if (icon.type === 'alert') {\r\n iconContent = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"w-4 h-4 text-alert-base\" role=\"img\" aria-label=\"Alerta\"><path d=\"M138.42 118.29l-55-110a15 15 0 00-26.84 0l-55 110A15 15 0 0015 140h110a15 15 0 0013.42-21.71zM62.5 50a7.5 7.5 0 0115 0v30a7.5 7.5 0 01-15 0zm7.5 70a10 10 0 1110-10 10 10 0 01-10 10z\" fill=\"currentColor\"/></svg>';\r\n } else {\r\n iconContent = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" width=\"1em\" height=\"1em\" class=\"w-4 h-4 text-primary-base\" role=\"img\" aria-label=\"Ayuda\"><path d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zm0 117.51a10 10 0 1110-10 10 10 0 01-10 10zm9.17-39.08a2.5 2.5 0 00-1.67 2.36v1.71a7.5 7.5 0 01-15 0v-10A7.5 7.5 0 0170 65a12.5 12.5 0 10-12.5-12.5 7.5 7.5 0 01-15 0 27.5 27.5 0 1136.67 25.93z\" fill=\"currentColor\"/></svg>';\r\n }\r\n return iconContent;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SharedModule } from '../shared/shared.module';\r\n\r\nimport { AlertComponent } from './components/alert/alert.component';\r\nimport { AccordionComponent } from './components/accordion/accordion.component';\r\nimport { AccordionItemComponent } from './components/accordion/accordion-item/accordion-item.component';\r\nimport { SpinnerComponent } from './components/spinner/spinner.component';\r\nimport { DetailsComponent } from './components/details/details.component';\r\nimport { CollapsibleComponent } from './components/collapsible/collapsible.component';\r\nimport { DescriptionListComponent } from './components/description-list/description-list.component';\r\nimport { ItemComponent } from './components/item/item.component';\r\nimport { MediaObjectComponent } from './components/media-object/media-object.component';\r\nimport { StatusComponent } from './components/status/status.component';\r\nimport { StatusItemComponent } from './components/status-item/status-item.component';\r\nimport { DesyFormsModule } from '../desy-forms/desy-forms.module';\r\nimport { TabsComponent } from './components/tabs/tabs.component';\r\nimport { TooltipComponent } from './components/tooltip/tooltip.component';\r\nimport { DesyCommonsModule } from '../desy-commons/desy-commons.module';\r\nimport { NgxTippyModule } from 'ngx-tippy-wrapper';\r\nimport { TooltipContentComponent } from './components/tooltip/tooltip-content/tooltip-content.component';\r\nimport { DescriptionItemComponent } from './components/description-list/description-item/description-item.component';\r\nimport { TermComponent } from './components/description-list/term/term.component';\r\nimport { DefinitionComponent } from './components/description-list/definition/definition.component';\r\nimport { ItemContentBottomComponent } from './components/item/item-content-bottom/item-content-bottom.component';\r\nimport { ItemContentRightComponent } from './components/item/item-content-right/item-content-right.component';\r\nimport { ItemItemComponent } from './components/item/item-item/item-item.component';\r\nimport { AccordionHeaderComponent } from './components/accordion/accordion-header/accordion-header.component';\r\nimport { PanelComponent } from './components/tabs/panel/panel.component';\r\nimport { TabItemComponent } from './components/tabs/tab-item/tab-item.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AlertComponent,\r\n AccordionComponent,\r\n AccordionHeaderComponent,\r\n AccordionItemComponent,\r\n SpinnerComponent,\r\n DetailsComponent,\r\n CollapsibleComponent,\r\n DescriptionListComponent,\r\n DescriptionItemComponent,\r\n TermComponent,\r\n DefinitionComponent,\r\n ItemComponent,\r\n ItemContentBottomComponent,\r\n ItemContentRightComponent,\r\n ItemItemComponent,\r\n MediaObjectComponent,\r\n StatusComponent,\r\n StatusItemComponent,\r\n TabsComponent,\r\n TooltipComponent,\r\n TooltipContentComponent,\r\n PanelComponent,\r\n TabItemComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n DesyFormsModule,\r\n DesyCommonsModule,\r\n NgxTippyModule\r\n ],\r\n exports: [\r\n AlertComponent,\r\n AccordionComponent,\r\n AccordionHeaderComponent,\r\n AccordionItemComponent,\r\n SpinnerComponent,\r\n DetailsComponent,\r\n CollapsibleComponent,\r\n DescriptionListComponent,\r\n DescriptionItemComponent,\r\n TermComponent,\r\n DefinitionComponent,\r\n ItemComponent,\r\n ItemContentBottomComponent,\r\n ItemContentRightComponent,\r\n ItemItemComponent,\r\n MediaObjectComponent,\r\n StatusComponent,\r\n StatusItemComponent,\r\n TabsComponent,\r\n TooltipComponent,\r\n TooltipContentComponent,\r\n PanelComponent,\r\n TabItemComponent,\r\n ]\r\n})\r\nexport class DesyViewsModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DesyViewsModule } from '../desy-views/desy-views.module';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { NgxTippyModule } from 'ngx-tippy-wrapper';\r\n\r\n// componentes\r\nimport { ButtonComponent } from './components/button/button.component';\r\nimport { ButtonLoaderComponent } from './components/button-loader/button-loader.component';\r\nimport { PillComponent } from './components/pill/pill.component';\r\nimport { DropdownComponent } from './components/dropdown/dropdown.component';\r\nimport { ListboxComponent } from './components/listbox/listbox.component';\r\nimport { ListboxItemComponent } from './components/listbox/listbox-item/listbox-item.component';\r\nimport { ListboxLabelComponent } from './components/listbox/listbox-label/listbox-label.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n ButtonComponent,\r\n ButtonLoaderComponent,\r\n DropdownComponent,\r\n ListboxComponent,\r\n PillComponent,\r\n\r\n ListboxItemComponent,\r\n ListboxLabelComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n DesyViewsModule,\r\n NgxTippyModule\r\n ],\r\n exports: [\r\n ButtonComponent,\r\n ButtonLoaderComponent,\r\n DropdownComponent,\r\n ListboxComponent,\r\n PillComponent,\r\n\r\n ListboxItemComponent,\r\n ListboxLabelComponent\r\n ]\r\n})\r\nexport class DesyButtonsModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\nimport { DesyButtonsModule } from '../desy-buttons/desy-buttons.module';\r\n\r\n// components\r\nimport { ModalComponent } from './components/modal/modal.component';\r\nimport { ModalButtonPrimaryComponent } from './components/modal/modal-button-primary/modal-button-primary.component';\r\nimport { ModalButtonSecondaryComponent } from './components/modal/modal-button-secondary/modal-button-secondary.component';\r\nimport { DialogComponent } from './components/dialog/dialog.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n ModalComponent,\r\n ModalButtonPrimaryComponent,\r\n ModalButtonSecondaryComponent,\r\n DialogComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n A11yModule,\r\n SharedModule,\r\n DesyButtonsModule\r\n ],\r\n exports: [\r\n ModalComponent,\r\n ModalButtonPrimaryComponent,\r\n ModalButtonSecondaryComponent,\r\n DialogComponent\r\n ],\r\n})\r\nexport class DesyModalsModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { DesyCommonsModule } from '../desy-commons/desy-commons.module';\r\n\r\nimport { BreadcrumbsComponent } from './components/breadcrumbs/breadcrumbs.component';\r\nimport { BreadcrumbsItemComponent } from './components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component';\r\nimport { ErrorSummaryComponent } from './components/error-summary/error-summary.component';\r\nimport { ErrorSummaryItemComponent } from './components/error-summary/error-summary-item/error-summary-item.component';\r\nimport { MenuHorizontalComponent } from './components/menu-horizontal/menu-horizontal.component';\r\nimport { MenuHorizontalItemComponent } from './components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component';\r\nimport { MenuVerticalComponent } from './components/menu-vertical/menu-vertical.component';\r\nimport { NavComponent } from './components/nav/nav.component';\r\nimport { SkipLinkComponent } from './components/skip-link/skip-link.component';\r\nimport { HeaderComponent } from './components/header/header.component';\r\nimport { HeaderSubnavComponent } from './components/header/header-subnav/header-subnav.component';\r\nimport { HeaderNavigationComponent } from './components/header/header-navigation/header-navigation.component';\r\nimport { HeaderDropdownComponent } from './components/header/header-dropdown/header-dropdown.component';\r\nimport { HeaderOffcanvasButtonComponent } from './components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component';\r\nimport { HeaderOffcanvasComponent } from './components/header/header-offcanvas/header-offcanvas.component';\r\nimport { NotificationComponent } from './components/notification/notification.component';\r\nimport { NotificationItemComponent } from './components/notification/notification-item/notification-item.component';\r\nimport { FooterComponent } from './components/footer/footer.component';\r\nimport { MenubarComponent } from './components/menubar/menubar.component';\r\nimport { MenubaritemDirective } from './components/menubar/directives/menubaritem.directive';\r\nimport { MenubarItemComponent } from './components/menubar/components/menubar-item/menubar-item.component';\r\nimport { MenubarSubitemComponent } from './components/menubar/components/menubar-subitem/menubar-subitem.component';\r\nimport { MenubarSubsubitemComponent } from './components/menubar/components/menubar-subsubitem/menubar-subsubitem.component';\r\nimport { MenubarLabelComponent } from './components/menubar/components/menubar-label/menubar-label.component';\r\nimport { NavItemComponent } from './components/nav/nav-item/nav-item.component';\r\nimport { MenuVerticalItemComponent } from './components/menu-vertical/menu-vertical-item/menu-vertical-item.component';\r\nimport { MenuVerticalItemSubComponent } from './components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component';\r\nimport { MenuVerticalItemSubItemComponent } from './components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component';\r\nimport { HeaderOffcanvasCloseButtonComponent } from './components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component';\r\nimport { HeaderNavigationItemComponent } from './components/header/header-navigation/header-navigation-item/header-navigation-item.component';\r\nimport { FooterMetaComponent } from './components/footer/footer-meta/footer-meta.component';\r\nimport { FooterMetaItemComponent } from './components/footer/footer-meta/footer-meta-item/footer-meta-item.component';\r\nimport { FooterNavigationComponent } from './components/footer/footer-navigation/footer-navigation.component';\r\nimport { FooterNavigationItemComponent } from './components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component';\r\nimport { DesyButtonsModule } from '../desy-buttons/desy-buttons.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n BreadcrumbsComponent,\r\n BreadcrumbsItemComponent,\r\n ErrorSummaryComponent,\r\n ErrorSummaryItemComponent,\r\n FooterComponent,\r\n FooterMetaComponent,\r\n FooterMetaItemComponent,\r\n FooterNavigationComponent,\r\n FooterNavigationItemComponent,\r\n HeaderComponent,\r\n HeaderSubnavComponent,\r\n HeaderNavigationComponent,\r\n HeaderNavigationItemComponent,\r\n HeaderDropdownComponent,\r\n HeaderOffcanvasButtonComponent,\r\n HeaderOffcanvasComponent,\r\n HeaderOffcanvasCloseButtonComponent,\r\n MenuHorizontalComponent,\r\n MenuHorizontalItemComponent,\r\n MenuVerticalComponent,\r\n MenuVerticalItemComponent,\r\n MenuVerticalItemSubComponent,\r\n MenuVerticalItemSubItemComponent,\r\n MenubarComponent,\r\n MenubarLabelComponent,\r\n MenubarItemComponent,\r\n MenubarSubitemComponent,\r\n MenubarSubsubitemComponent,\r\n NavComponent,\r\n NotificationComponent,\r\n NotificationItemComponent,\r\n SkipLinkComponent,\r\n NavItemComponent,\r\n\r\n MenubaritemDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n DesyCommonsModule,\r\n DesyButtonsModule\r\n ],\r\n exports: [\r\n BreadcrumbsComponent,\r\n BreadcrumbsItemComponent,\r\n ErrorSummaryComponent,\r\n ErrorSummaryItemComponent,\r\n FooterComponent,\r\n FooterMetaComponent,\r\n FooterMetaItemComponent,\r\n FooterNavigationComponent,\r\n FooterNavigationItemComponent,\r\n HeaderComponent,\r\n HeaderSubnavComponent,\r\n HeaderNavigationComponent,\r\n HeaderNavigationItemComponent,\r\n HeaderDropdownComponent,\r\n HeaderOffcanvasComponent,\r\n HeaderOffcanvasButtonComponent,\r\n HeaderOffcanvasCloseButtonComponent,\r\n MenuHorizontalComponent,\r\n MenuHorizontalItemComponent,\r\n MenuVerticalComponent,\r\n MenuVerticalItemComponent,\r\n MenuVerticalItemSubComponent,\r\n MenuVerticalItemSubItemComponent,\r\n MenubarComponent,\r\n MenubarLabelComponent,\r\n MenubarItemComponent,\r\n MenubarSubitemComponent,\r\n MenubarSubsubitemComponent,\r\n NavComponent,\r\n NotificationComponent,\r\n NotificationItemComponent,\r\n NavItemComponent,\r\n SkipLinkComponent\r\n ]\r\n})\r\nexport class DesyNavModule { }\r\n","import { Directive, ElementRef, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[desyFocusClickedCell]'\r\n})\r\nexport class FocusClickedCellDirective {\r\n\r\n constructor(private el: ElementRef) {}\r\n\r\n @HostListener('click')\r\n onClick(): void {\r\n const hostElem = this.el.nativeElement; // la tabla - offsetParent\r\n const elemntsFocus = hostElem.offsetParent.querySelectorAll('[tabindex]'); // buscamos todos que pueden tener tabindex\r\n for (const iterator of elemntsFocus) {\r\n iterator.setAttribute('tabindex', '-1'); // se les quita\r\n }\r\n this.activeTabindex();\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n manageArrows(event): void {\r\n if (event.code === 'ArrowDown' || event.code === 'ArrowUp' || event.code === 'ArrowRight' || event.code === 'ArrowLeft'){\r\n let next = null;\r\n if (event.code === 'ArrowDown' || event.code === 'ArrowUp'){\r\n let tr = null;\r\n if (event.code === 'ArrowDown') {\r\n tr = this.el.nativeElement.parentNode.nextElementSibling;\r\n } else if (event.code === 'ArrowUp') {\r\n tr = this.el.nativeElement.parentNode.previousElementSibling;\r\n }\r\n\r\n next = tr ? tr.children[this.findIndex()] : null;\r\n event.preventDefault();\r\n }\r\n\r\n if (event.code === 'ArrowRight' || event.code === 'ArrowLeft') {\r\n next = this.el.nativeElement;\r\n do {\r\n if (event.code === 'ArrowRight') {\r\n next = next.nextElementSibling;\r\n } else if (event.code === 'ArrowLeft') {\r\n next = next.previousElementSibling;\r\n }\r\n } while (next && !next.getAttribute('tabindex'));\r\n }\r\n\r\n if (next && next.getAttribute('tabindex')){\r\n this.inactiveTabindex();\r\n next.setAttribute('tabindex', '0');\r\n next.focus();\r\n }\r\n }\r\n }\r\n\r\n private activeTabindex(): void {\r\n this.el.nativeElement.setAttribute('tabindex', '0');\r\n }\r\n\r\n private inactiveTabindex(): void {\r\n this.el.nativeElement.setAttribute('tabindex', '-1');\r\n }\r\n\r\n private findIndex(): number {\r\n const mynode = this.el.nativeElement;\r\n const parentNode = this.el.nativeElement.parentNode;\r\n let index = -1;\r\n for (let i = 0; i < parentNode.children.length; i++) {\r\n const otherNode = parentNode.children[i];\r\n if (mynode.isEqualNode(otherNode)){\r\n index = i;\r\n break;\r\n }\r\n }\r\n return index;\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { DesyFormsModule } from '../desy-forms/desy-forms.module';\r\n\r\nimport { TableComponent } from './components/table/table.component';\r\nimport { TableAdvancedComponent } from './components/table-advanced/table-advanced.component';\r\nimport { FocusClickedCellDirective } from './directives/focus-clicked-cell.directive';\r\nimport { TableCellComponent } from './components/table/components/table-cell.component';\r\nimport { TableHeaderComponent } from './components/table/components/table-header.component';\r\nimport { TableRowComponent } from './components/table/components/table-row.component';\r\nimport { TableCaptionComponent } from './components/table/components/table-caption.component';\r\nimport { TableAdvancedHeaderComponent } from './components/table-advanced/components/table-advanced-header.component';\r\nimport { TableAdvancedHeaderCellComponent } from './components/table-advanced/components/table-advanced-header-cell.component';\r\nimport { TableAdvancedRowComponent } from './components/table-advanced/components/table-advanced-row.component';\r\nimport { CellDirective } from './directives/cell.directive';\r\nimport { RowDirective } from './directives/row.directive';\r\nimport {TableAdvancedRowCellComponent} from './components/table-advanced/components/table-advanced-row-cell.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n TableComponent,\r\n TableCaptionComponent,\r\n TableCellComponent,\r\n TableHeaderComponent,\r\n TableRowComponent,\r\n TableAdvancedComponent,\r\n TableAdvancedHeaderComponent,\r\n TableAdvancedHeaderCellComponent,\r\n TableAdvancedRowComponent,\r\n TableAdvancedRowCellComponent,\r\n\r\n FocusClickedCellDirective,\r\n CellDirective,\r\n RowDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n A11yModule,\r\n SharedModule,\r\n DesyFormsModule\r\n ],\r\n exports: [\r\n TableComponent,\r\n TableCaptionComponent,\r\n TableCellComponent,\r\n TableHeaderComponent,\r\n TableRowComponent,\r\n TableAdvancedComponent,\r\n TableAdvancedHeaderComponent,\r\n TableAdvancedHeaderCellComponent,\r\n TableAdvancedRowComponent,\r\n TableAdvancedRowCellComponent\r\n ]\r\n})\r\nexport class DesyTablesModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { DesyNavModule } from '../desy-nav/desy-nav.module';\r\nimport { DesyButtonsModule } from '../desy-buttons/desy-buttons.module';\r\n\r\nimport { PaginationComponent } from './components/pagination/pagination.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n PaginationComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n DesyNavModule,\r\n DesyButtonsModule\r\n ],\r\n exports: [\r\n PaginationComponent\r\n ]\r\n})\r\nexport class DesyPaginationModule { }\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { DesyButtonsModule } from './desy-buttons/desy-buttons.module';\r\nimport { DesyFormsModule } from './desy-forms/desy-forms.module';\r\nimport { DesyModalsModule } from './desy-modals/desy-modals.module';\r\nimport { DesyNavModule } from './desy-nav/desy-nav.module';\r\nimport { DesyTablesModule } from './desy-tables/desy-tables.module';\r\nimport { DesyViewsModule } from './desy-views/desy-views.module';\r\nimport { DesyPaginationModule } from './desy-pagination/desy-pagination.module';\r\nimport { DesyCommonsModule } from './desy-commons/desy-commons.module';\r\n\r\n@NgModule({\r\n imports: [\r\n DesyButtonsModule,\r\n DesyCommonsModule,\r\n DesyFormsModule,\r\n DesyModalsModule,\r\n DesyNavModule,\r\n DesyTablesModule,\r\n DesyViewsModule,\r\n DesyPaginationModule,\r\n DesyCommonsModule,\r\n ],\r\n exports: [\r\n DesyButtonsModule,\r\n DesyCommonsModule,\r\n DesyFormsModule,\r\n DesyModalsModule,\r\n DesyNavModule,\r\n DesyTablesModule,\r\n DesyViewsModule,\r\n DesyPaginationModule,\r\n DesyCommonsModule,\r\n ]\r\n})\r\nexport class DesyAngularModule { }\r\n"]}
|