desy-angular 5.1.2 → 5.3.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.
Files changed (126) hide show
  1. package/bundles/desy-angular.umd.js +321 -689
  2. package/bundles/desy-angular.umd.js.map +1 -1
  3. package/bundles/desy-angular.umd.min.js +1 -15
  4. package/bundles/desy-angular.umd.min.js.map +1 -1
  5. package/desy-angular.d.ts +15 -15
  6. package/desy-angular.metadata.json +1 -1
  7. package/esm2015/desy-angular.js +16 -16
  8. package/esm2015/lib/desy-buttons/components/dropdown/dropdown.component.js +2 -2
  9. package/esm2015/lib/desy-buttons/components/listbox/listbox.component.js +2 -24
  10. package/esm2015/lib/desy-buttons/components/pill/pill.component.js +1 -1
  11. package/esm2015/lib/desy-forms/components/character-count/character-count.component.js +2 -17
  12. package/esm2015/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.js +1 -4
  13. package/esm2015/lib/desy-forms/components/checkboxes/checkboxes.component.js +2 -11
  14. package/esm2015/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.js +1 -9
  15. package/esm2015/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.js +1 -9
  16. package/esm2015/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.js +1 -9
  17. package/esm2015/lib/desy-forms/components/date-input/date-input.component.js +2 -15
  18. package/esm2015/lib/desy-forms/components/file-upload/file-upload.component.js +1 -15
  19. package/esm2015/lib/desy-forms/components/input/input.component.js +26 -17
  20. package/esm2015/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.js +1 -9
  21. package/esm2015/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.js +1 -9
  22. package/esm2015/lib/desy-forms/components/input-group/input-group.component.js +9 -20
  23. package/esm2015/lib/desy-forms/components/radios/radio-item/radio-item.component.js +1 -4
  24. package/esm2015/lib/desy-forms/components/radios/radios.component.js +1 -10
  25. package/esm2015/lib/desy-forms/components/search-bar/search-bar.component.js +1 -17
  26. package/esm2015/lib/desy-forms/components/select/select.component.js +9 -19
  27. package/esm2015/lib/desy-forms/components/textarea/textarea.component.js +3 -15
  28. package/esm2015/lib/desy-forms/components/tree/tree-item/tree-item.component.js +2 -2
  29. package/esm2015/lib/desy-forms/components/tree/tree.component.js +28 -16
  30. package/esm2015/lib/desy-forms/directives/condition.directive.js +2 -5
  31. package/esm2015/lib/desy-modals/components/dialog/dialog.component.js +1 -7
  32. package/esm2015/lib/desy-modals/components/modal/modal.component.js +2 -13
  33. package/esm2015/lib/desy-modals/services/dialog.service.js +8 -9
  34. package/esm2015/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.js +2 -8
  35. package/esm2015/lib/desy-nav/components/error-summary/error-summary.component.js +4 -10
  36. package/esm2015/lib/desy-nav/components/footer/footer.component.js +2 -2
  37. package/esm2015/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.js +1 -4
  38. package/esm2015/lib/desy-nav/components/header/header-navigation/header-navigation.component.js +1 -4
  39. package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.js +2 -5
  40. package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.js +2 -5
  41. package/esm2015/lib/desy-nav/components/header/header-subnav/header-subnav.component.js +2 -5
  42. package/esm2015/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.js +2 -15
  43. package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical.component.js +2 -8
  44. package/esm2015/lib/desy-nav/components/menubar/menubar.component.js +2 -14
  45. package/esm2015/lib/desy-nav/components/nav/nav.component.js +2 -18
  46. package/esm2015/lib/desy-nav/components/notification/notification.component.js +2 -10
  47. package/esm2015/lib/desy-nav/components/skip-link/skip-link.component.js +2 -11
  48. package/esm2015/lib/desy-pagination/components/pagination/pagination.component.js +2 -11
  49. package/esm2015/lib/desy-tables/components/table/table.component.js +2 -14
  50. package/esm2015/lib/desy-tables/components/table-advanced/table-advanced.component.js +2 -5
  51. package/esm2015/lib/desy-views/components/accordion/accordion.component.js +2 -13
  52. package/esm2015/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.js +31 -0
  53. package/esm2015/lib/desy-views/components/accordion-history/accordion-history-item-hide-button/accordion-history-item-hide-button.component.js +14 -0
  54. package/esm2015/lib/desy-views/components/accordion-history/accordion-history-item-show-button/accordion-history-item-show-button.component.js +14 -0
  55. package/esm2015/lib/desy-views/components/accordion-history/accordion-history.component.js +15 -0
  56. package/esm2015/lib/desy-views/components/alert/alert.component.js +1 -7
  57. package/esm2015/lib/desy-views/components/collapsible/collapsible.component.js +3 -10
  58. package/esm2015/lib/desy-views/components/description-list/description-list.component.js +2 -8
  59. package/esm2015/lib/desy-views/components/details/details.component.js +1 -12
  60. package/esm2015/lib/desy-views/components/item/item.component.js +3 -13
  61. package/esm2015/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.js +11 -0
  62. package/esm2015/lib/desy-views/components/media-object/media-object.component.js +17 -12
  63. package/esm2015/lib/desy-views/components/status/status.component.js +3 -11
  64. package/esm2015/lib/desy-views/components/status-item/status-item.component.js +2 -10
  65. package/esm2015/lib/desy-views/components/tabs/tabs.component.js +6 -18
  66. package/esm2015/lib/desy-views/components/tooltip/tooltip.component.js +2 -10
  67. package/esm2015/lib/desy-views/desy-views.module.js +17 -2
  68. package/esm2015/lib/desy-views/services/alert.service.js +8 -9
  69. package/esm2015/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.js +1 -1
  70. package/esm2015/lib/shared/components/text-or-html-required/text-or-html-required.component.js +1 -13
  71. package/esm2015/lib/shared/shared.module.js +1 -4
  72. package/esm2015/lib/shared/utils/search-utils.js +22 -1
  73. package/esm2015/public-api.js +5 -1
  74. package/fesm2015/desy-angular.js +235 -611
  75. package/fesm2015/desy-angular.js.map +1 -1
  76. package/lib/desy-forms/components/character-count/character-count.component.d.ts +0 -1
  77. package/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.d.ts +2 -3
  78. package/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.d.ts +2 -3
  79. package/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.d.ts +2 -3
  80. package/lib/desy-forms/components/date-input/date-input.component.d.ts +2 -4
  81. package/lib/desy-forms/components/file-upload/file-upload.component.d.ts +1 -4
  82. package/lib/desy-forms/components/input/input.component.d.ts +8 -4
  83. package/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.d.ts +2 -3
  84. package/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.d.ts +2 -3
  85. package/lib/desy-forms/components/input-group/input-group.component.d.ts +4 -2
  86. package/lib/desy-forms/components/search-bar/search-bar.component.d.ts +2 -5
  87. package/lib/desy-forms/components/select/select.component.d.ts +5 -5
  88. package/lib/desy-forms/components/textarea/textarea.component.d.ts +2 -3
  89. package/lib/desy-forms/components/tree/tree.component.d.ts +6 -1
  90. package/lib/desy-forms/directives/condition.directive.d.ts +2 -2
  91. package/lib/desy-modals/components/modal/modal.component.d.ts +2 -4
  92. package/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.d.ts +0 -1
  93. package/lib/desy-nav/components/error-summary/error-summary.component.d.ts +0 -1
  94. package/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.d.ts +0 -1
  95. package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.d.ts +0 -1
  96. package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.d.ts +0 -1
  97. package/lib/desy-nav/components/header/header-subnav/header-subnav.component.d.ts +0 -1
  98. package/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.d.ts +2 -4
  99. package/lib/desy-nav/components/menu-vertical/menu-vertical.component.d.ts +0 -1
  100. package/lib/desy-nav/components/menubar/menubar.component.d.ts +0 -1
  101. package/lib/desy-nav/components/nav/nav.component.d.ts +2 -4
  102. package/lib/desy-nav/components/notification/notification.component.d.ts +2 -4
  103. package/lib/desy-nav/components/skip-link/skip-link.component.d.ts +0 -1
  104. package/lib/desy-tables/components/table/table.component.d.ts +0 -1
  105. package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +0 -1
  106. package/lib/desy-views/components/accordion/accordion.component.d.ts +2 -4
  107. package/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.d.ts +9 -0
  108. package/lib/desy-views/components/accordion-history/accordion-history-item-hide-button/accordion-history-item-hide-button.component.d.ts +4 -0
  109. package/lib/desy-views/components/accordion-history/accordion-history-item-show-button/accordion-history-item-show-button.component.d.ts +4 -0
  110. package/lib/desy-views/components/accordion-history/accordion-history.component.d.ts +6 -0
  111. package/lib/desy-views/components/collapsible/collapsible.component.d.ts +2 -3
  112. package/lib/desy-views/components/description-list/description-list.component.d.ts +0 -1
  113. package/lib/desy-views/components/details/details.component.d.ts +1 -5
  114. package/lib/desy-views/components/item/item.component.d.ts +2 -5
  115. package/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.d.ts +3 -0
  116. package/lib/desy-views/components/media-object/media-object.component.d.ts +7 -4
  117. package/lib/desy-views/components/status/status.component.d.ts +1 -3
  118. package/lib/desy-views/components/status-item/status-item.component.d.ts +2 -4
  119. package/lib/desy-views/components/tabs/tabs.component.d.ts +2 -4
  120. package/lib/desy-views/components/tooltip/tooltip.component.d.ts +2 -4
  121. package/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.d.ts +1 -3
  122. package/lib/shared/components/text-or-html-required/text-or-html-required.component.d.ts +3 -11
  123. package/package.json +1 -1
  124. package/public-api.d.ts +4 -0
  125. package/esm2015/lib/shared/directives/content-empty.directive.js +0 -86
  126. package/lib/shared/directives/content-empty.directive.d.ts +0 -26
@@ -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/components/tree/tree-sub/tree-sub.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/tree/interfaces/itree-item.ts","../../../projects/desy-angular/src/lib/shared/utils/search-utils.ts","../../../projects/desy-angular/src/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/tree/tree-item/tree-item.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/tree/tree.component.ts","../../../projects/desy-angular/src/lib/desy-forms/directives/condition.directive.ts","../../../projects/desy-angular/src/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.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/interfaces/head-cell-data.ts","../../../projects/desy-angular/src/lib/desy-tables/components/table/table.component.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/components/toggle/toggle-off-state/toggle-off-state.component.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/toggle/toggle.component.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","isOpen","clickOutsideEnabled","ngOnInit","contentTooltip","dropdownContent","nativeElement","style","display","tippyProperties","placement","inlinePositioning","allowHTML","trigger","hideOnClick","interactive","arrow","offset","theme","plugins","name","defaultValue","fn","instance","onCreate","popper","addEventListener","props","hideOnPopperBlur","relatedTarget","contains","hide","_a","onKeyDown","KEY_CODE_ESC","onShow","onHide","removeEventListener","role","aria","onShown","focus","setOpen","AccessibilityAndContentRequiredComponent","read","ElementRef","StringUtils","escapeHtml","replace","RegExp","ListboxLabelComponent","ListboxItemComponent","itemChange","DesyContentChild","options","propertyKey","privateKeyName","privateQueryListKeyName","set","queryList","QueryList","subscribe","previousValue","first","onSetCallbackName","onDeleteCallbackName","notifyOnChanges","get","ListboxComponent","itemsChange","activeItemChange","isListVisible","listboxButtonElement","listboxButton","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","buttonContentHtml","innerHTML","listboxList","onListFocus","activeItemsData","activeElem","getElementById","getItemId","currentFocusIndex","selectItem","console","warn","moveFocus","position","onSpace","getIdPrefix","idPrefix","itemId","hasLabel","getLabelContent","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","HostListener","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","isInit","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","TreeSubComponent","SearchUtils","containsAnyWordFrom","fullWord","includes","simplifiedTarget","getSimplifiedString","split","word","str","res","toLocaleUpperCase","trim","TreeCheckboxComponent","changeDetector","indeterminateCheckedChange","_hasInit","onDescribedByChange","onIdChange","overrideLabelParams","_lastIndeterminate","matchesText","checkboxText","contentWrapper","textContent","getItemDescribedBy","ariaDescribedBy","itemDescribedBy","TreeItemComponent","checkedChangeForTree","expandedChange","treeItemKey","generateStaticItemKey","allParentsExpanded","inheritedMatchesSearch","quitFocus","isFocus","isHover","_matchesValidText","propName","sub","refreshAllParentsExpandedRecursive","expanded","inheritedExpandedFirstLevel","expandSub","checkbox","handleItemFocus","setCheckedAutomaticallyDependingOnChildren","areAllChildrenChecked","hasChildrenCheckedOrIndeterminate","handleCheckboxChange","handleIndeterminateCheckedChange","condition","handleItemHover","handleArrowUp","nextElement","currentItem","handleHome","handleEnd","handleArrowDown","handleArrowRight","handleArrowLeft","subLevel","ignoreInTree","emitEvent","inheritedDecoupleChildFromParent","setSubLevel","setOrderRecursively","order","orderInTree","newOrder","setDefaultId","defaultId","setDefaultIdRecursive","getId","isHidden","areAllChildrenHidden","child","matches","itemText","hiddenWrapper","getKey","getParentKey","parentKey","parentElement","tagName","isActive","_treeItemKeySuffix","ITreeItem","TreeComponent","expandedFirstLevel","decoupleChildFromParent","disableDefaultSearch","searchMatchValuesChange","rootItems","_itemListCheckedSubscriptions","_itemListQuitFocusSubscriptions","_alreadyConfiguringItems","clearSubscriptions","_itemListSubscription","_allItemListSubscription","configureAllItems","updateValueFromItems","originItem","getAllItemsInOrder","handleItemQuitFocus","focusableItems","currentSubLevel_1","currentItemIndex","slice","reverse","onSearch","searchMatchValues","allItems","parentName","inheritedDescribedBy","getDescribedByForItems","checkedSubscription","quitFocusSubscription","setErrorInItems","buildTree","onSearchMatchValuesChange","overrideSearchBarParams","searchbar","defaultOnChange","itemMap","inheritedHasError","subscriptionList","splice","list","sort","a","descendants","ConditionDirective","templateRef","conditionalHtml","Directive","TemplateRef","TreeItemsGeneratorComponent","viewContainerRef","createEmbeddedView","changeDetection","ChangeDetectionStrategy","OnPush","ViewContainerRef","ModalButtonPrimaryComponent","ModalButtonSecondaryComponent","ModalComponent","closeModal","clickButton","hasIconContent","descriptionIsHtml","descriptionIsEmpty","closeDialog","iconComponent","icon","handleRequiredEmpty","checkDescriptionContent","childs","childNodes","hasHtml","hasContent","nodeType","Node","TEXT_NODE","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","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","close","open","offcanvasContent","elementToFocus","setHostClass","bindButton","ariaModal","ariaLabelledBy","HeaderNavigationItemComponent","HeaderNavigationComponent","prefix","suffix","NavItemComponent","NavComponent","hasNav","itemsActiveChange","routerLink","handleContentEmpty","movePrevious","currentIndex","nextIndex","isFocusableItem","itemElem","moveNext","simulateClick","click","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","getSubItemId","itemIndex","subItemIndex","subItemId","getItemSub","subItem","getSubItems","subComponent","subItems","MenubaritemDirective","elementRef","contentChanged","contentHasBeenChecked","ngAfterContentChecked","popupMenu","lastPopupMenu","popupMenuItems","lastPopupMenuItems","link","lastLink","itemContentWrapper","lastItemContentWrapper","ContentChild","MenubarSubsubitemComponent","MenubarSubitemComponent","MenubarItemComponent","MenubarLabelComponent","MenubarComponent","activeSubItemChange","viewInit","currentFocusItemIndex","checkChanges","menuItems","menuData","itemData","currentFocusSubItemIndex","currentFocusSubSubItemIndex","menuItem","lastCurrentFocusItemIndex","isItemFocusable","handleMenuFocusIn","isFocused","handleMenuFocusOut","menubar","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","getMenuDataIndex","menuDataIndex","hover","hasFocus","activeElement","fromItemIndex","nextItem","char","itemContents","foundIndex","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","OrderBy","TableComponent","getCaptionClass","captionComponent","captionClasses","getHeaderCells","headerCells","headerComponent","cells","head","rowList","rowComponentList","getRowCells","row","TableRowComponent","handleEmptyCell","cell","cellIndex","TableHeaderComponent","TableAdvancedHeaderCellComponent","TableAdvancedRowCellComponent","CellDirective","RowDirective","getCell","column","contentCells","columnIndex","TableAdvancedComponent","el","rowsChange","rowsChecked","recalculateTable","orderByType","elemntsFocus","querySelector","setAttribute","recalculateVisibleElements","recalculateParams","buildRecalculateParams","observers","markForCheck","visibleRows","rowData","filterRows","sortRows","desyRow","params","filters","headerCell","headerCellIndex","hasFilter","activeFilter","filterText","valueFilter","orderByColumnIndex","orderBy","none","hasFilters","getVisibleRows","getIdHeader","getIdRowCheckbox","getIdHeaderFilter","getStringOrderBy","asc","handleTableCellContentEmpty","TableAdvancedRowComponent","notifyCheckedChange","uncheckAll","mustEmit","rowChecks","handleInputSearch","filteredRows","handleSortByColumn","getNextDirection","sortedRows","columnIndex_1","isAsc_1","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","headingComponent","heading","getItemHeader","getItemContent","SpinnerComponent","DetailsComponent","summaryTextOrSummaryHtmlRequiredFunction","summaryText","summaryHtml","TermComponent","DefinitionComponent","DescriptionListComponent","DescriptionItemComponent","CollapsibleComponent","toggleOpen","show","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","resolver","injector","clear","desyCustomInnerContent","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","ToggleOffStateComponent","ToggleOnStateComponent","ToggleComponent","pressedChange","pressed","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 ViewChild,\r\n ElementRef,\r\n OnInit,\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 OnInit {\r\n\r\n static readonly KEY_CODE_ESC = 'Escape';\r\n\r\n @ViewChild('dropdownContent', { read: ElementRef, static: true }) 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 isOpen = false;\r\n clickOutsideEnabled = false;\r\n\r\n tippyProperties: any;\r\n\r\n ngOnInit(): any {\r\n let contentTooltip: HTMLElement;\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 {\r\n name: 'hideOnPopperBlur',\r\n defaultValue: true,\r\n fn(instance) {\r\n return {\r\n onCreate() {\r\n instance.popper.addEventListener('focusout', (event) => {\r\n if (\r\n instance.props.hideOnPopperBlur &&\r\n event.relatedTarget &&\r\n !instance.popper.contains(event.relatedTarget)\r\n ) {\r\n instance.hide();\r\n }\r\n });\r\n },\r\n };\r\n }\r\n }, {\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 ],\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 firstFocusable.focus()\r\n }\r\n }\r\n };\r\n }\r\n }\r\n\r\n onClick(event: any): void {\r\n if (!this.isDisabled()){\r\n this.clickEvent.emit(event);\r\n }\r\n }\r\n\r\n setOpen(isOpen: boolean): void {\r\n this.isOpen = isOpen;\r\n }\r\n\r\n isDisabled(): boolean {\r\n return this.disabled ? true : null;\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'), '&amp;')\r\n .replace(new RegExp(`<`, 'g'), '&lt;')\r\n .replace(new RegExp(`>`, 'g'), '&gt;')\r\n .replace(new RegExp(`\"`, 'g'), '&quot;')\r\n .replace(new RegExp(`'`, 'g'), '&#39;') : '';\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-listbox-label',\r\n templateUrl: './listbox-label.component.html'\r\n})\r\nexport class ListboxLabelComponent extends ContentBaseComponent {\r\n\r\n @Input() classes: string;\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, static: true }) listboxButton: ElementRef;\r\n @ViewChild('list', { read: ElementRef }) listboxList: ElementRef;\r\n @ViewChild('tooltip', { read: ElementRef, static: true }) 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\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; // Propiedades de tippy\r\n currentFocusIndex: number; // Índice del elemento actual con focus\r\n buttonContentHtml: string; // Puede ser el pasado por parámetro o el item seleccionado en caso de currentFocusIndex=true\r\n isListVisible = false; // Indica si la lista se está mostrando\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 const listboxButtonElement = this.listboxButton.nativeElement;\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 {\r\n name: 'hideOnPopperBlur',\r\n defaultValue: true,\r\n fn(instance) {\r\n return {\r\n onCreate() {\r\n instance.popper.addEventListener('focusout', (event) => {\r\n if (\r\n instance.props.hideOnPopperBlur &&\r\n event.relatedTarget &&\r\n !instance.popper.contains(event.relatedTarget)\r\n ) {\r\n instance.hide();\r\n }\r\n });\r\n },\r\n };\r\n }\r\n }, {\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 listboxButtonElement.focus();\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 ],\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 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.buttonContentHtml = activeItemOption.nativeElement.innerHTML;\r\n }\r\n } else {\r\n this.buttonContentHtml = this.html ? this.html : null;\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 }\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","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 {\r\n Component,\r\n Input,\r\n} from '@angular/core';\r\nimport {ITreeItem} from \"../interfaces/itree-item\";\r\nimport {ContentBaseComponent} from \"../../../../shared/components\";\r\n\r\n@Component({\r\n selector: 'desy-tree-sub',\r\n templateUrl: './tree-sub.component.html'\r\n})\r\nexport class TreeSubComponent extends ContentBaseComponent {\r\n\r\n @Input() classes: string;\r\n\r\n itemList: ITreeItem[];\r\n\r\n}\r\n","export class ITreeItem {\r\n id: string;\r\n subLevel: number;\r\n defaultId: string;\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 {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {LabelComponent} from \"../../label/label.component\";\r\nimport {HintComponent} from \"../../hint/hint.component\";\r\nimport {DesyOnInputChange} from \"../../../../shared/decorators/desy-on-input-change.decorator\";\r\nimport {SearchUtils} from \"../../../../shared/utils/search-utils\";\r\nimport {AccessibilityComponent} from \"../../../../shared/components\";\r\n\r\n@Component({\r\n selector: 'desy-tree-checkbox',\r\n templateUrl: './tree-checkbox.component.html'\r\n})\r\nexport class TreeCheckboxComponent extends AccessibilityComponent implements OnInit {\r\n\r\n @ViewChild('input', { static: true }) inputElement: ElementRef;\r\n @ViewChild('contentWrapper', { static: true }) contentWrapper: ElementRef;\r\n\r\n @DesyOnInputChange('onIdChange')\r\n @Input() id: string;\r\n @Input() name: string;\r\n @Input() type: 'radio'|'checkbox'|null|undefined;\r\n @Input() classes: string;\r\n\r\n @Input() value: any;\r\n\r\n @Input() checked: boolean;\r\n @Output() checkedChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @Input() isIndeterminate: boolean;\r\n\r\n @DesyOnInputChange('setIndeterminateStatus')\r\n @Input() indeterminateChecked: boolean;\r\n @Output() indeterminateCheckedChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @Input() disabled: boolean;\r\n @Input() hasDividers: boolean;\r\n\r\n @DesyOnInputChange('onDescribedByChange')\r\n @Input() describedBy: string;\r\n @Input() hasError = false;\r\n\r\n @DesyOnInputChange('overrideLabelParams')\r\n @Input() labelComponent: LabelComponent;\r\n\r\n @DesyOnInputChange('overrideHintParams')\r\n @Input() hintComponent: HintComponent;\r\n\r\n itemDescribedBy: string;\r\n\r\n private _lastIndeterminate;\r\n private _hasInit = false;\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._hasInit = true;\r\n this.onDescribedByChange();\r\n }\r\n\r\n detectChanges(): void {\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n hasChanged(): void {\r\n if (this._hasInit) {\r\n\r\n const input = this.inputElement.nativeElement;\r\n\r\n // Se establece el cambio a visualizar en el input\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.setIndeterminateChecked(input.indeterminate);\r\n this.checkedChange.emit(input.checked);\r\n }\r\n }\r\n\r\n onIdChange(): void {\r\n this.overrideLabelParams();\r\n this.overrideHintParams();\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 setIndeterminateChecked(indeterminateChecked: boolean): void {\r\n this.indeterminateChecked = indeterminateChecked;\r\n this._lastIndeterminate = indeterminateChecked;\r\n this.indeterminateCheckedChange.emit(indeterminateChecked);\r\n this.changeDetector.detectChanges(); // Avisa al elemento input para que actualice su estado\r\n }\r\n\r\n focus(): void {\r\n this.inputElement.nativeElement.focus();\r\n }\r\n\r\n matchesText(value: string): boolean {\r\n const checkboxText = this.contentWrapper.nativeElement.textContent;\r\n return SearchUtils.containsAnyWordFrom(checkboxText, value);\r\n }\r\n\r\n preventDefault(event: KeyboardEvent): void {\r\n event.preventDefault();\r\n }\r\n\r\n getHintId(): string {\r\n return this.hintComponent ? this.hintComponent.id : '';\r\n }\r\n\r\n overrideLabelParams(): void {\r\n if (this.labelComponent) {\r\n this.labelComponent.for = this.id + '-input';\r\n if (!this.labelComponent.classes) {\r\n this.labelComponent.classes = 'block relative -top-xs -left-8 pl-8 py-xs';\r\n }\r\n this.labelComponent.detectChanges();\r\n }\r\n }\r\n\r\n overrideHintParams(): void {\r\n if (this.hintComponent) {\r\n if (!this.hintComponent.id) {\r\n this.hintComponent.id = this.id + '-item-hint';\r\n }\r\n this.hintComponent.detectChanges();\r\n }\r\n this.onDescribedByChange();\r\n }\r\n\r\n getItemDescribedBy(): string {\r\n return (this.describedBy ? this.describedBy : '') + ' ' + this.getHintId();\r\n }\r\n\r\n onDescribedByChange(): void {\r\n if (this.ariaDescribedBy) {\r\n this.itemDescribedBy = this.ariaDescribedBy;\r\n } else {\r\n this.itemDescribedBy = this.getItemDescribedBy();\r\n }\r\n }\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren, ElementRef,\r\n EventEmitter,\r\n forwardRef, HostBinding,\r\n Input,\r\n OnChanges,\r\n Output, SimpleChanges,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {DesyContentChild} from \"../../../../shared/decorators/desy-content-child.decorator\";\r\nimport {TreeSubComponent} from \"../tree-sub/tree-sub.component\";\r\nimport {ITreeItem} from \"../interfaces/itree-item\";\r\nimport {HintComponent} from \"../../hint/hint.component\";\r\nimport {LabelComponent} from \"../../label/label.component\";\r\nimport {QuitTreeItemFocusOptions} from \"../interfaces/quit-tree-item-focus-options\";\r\nimport {TreeCheckboxComponent} from \"../tree-checkbox/tree-checkbox.component\";\r\nimport {AccessibilityComponent} from \"../../../../shared/components\";\r\nimport {DesyOnInputChange} from \"../../../../shared/decorators/desy-on-input-change.decorator\";\r\nimport {SearchUtils} from \"../../../../shared/utils/search-utils\";\r\n\r\n@Component({\r\n selector: 'desy-tree-item',\r\n templateUrl: './tree-item.component.html',\r\n providers: [\r\n {\r\n provide: ITreeItem,\r\n useExisting: forwardRef(() => TreeItemComponent)\r\n }\r\n ]\r\n})\r\nexport class TreeItemComponent extends AccessibilityComponent implements OnChanges, ITreeItem {\r\n\r\n private static _treeItemKeySuffix = 0; // Sufijo estático para generar siempre claves distintas\r\n @ViewChild('hiddenWrapper') hiddenWrapper: ElementRef;\r\n\r\n @DesyOnInputChange('setDefaultIdRecursive')\r\n @Input() id: string;\r\n @Input() name: string;\r\n @Input() value: string;\r\n @Input() classes: string;\r\n @Input() active: boolean;\r\n @Input() disabled: boolean;\r\n @Input() title: string;\r\n @Input() hasDividers: boolean;\r\n @Input() isIndeterminate: boolean;\r\n\r\n @Input() checked: boolean;\r\n @Output() checkedChange: EventEmitter<any> = new EventEmitter<any>();\r\n checkedChangeForTree: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @Input() expanded: boolean;\r\n @Output() expandedChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @Input() indeterminateChecked: boolean;\r\n @Output() indeterminateCheckedChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideSubValues'})\r\n @ContentChildren(TreeSubComponent) sub: TreeSubComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(HintComponent) hint: HintComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LabelComponent) label: LabelComponent;\r\n\r\n @ViewChild(TreeCheckboxComponent) checkbox: TreeCheckboxComponent;\r\n\r\n /*\r\n * Identificador del wrapper del componente. Se utiliza para recorrer el árbol en sentido inverso y que cada item\r\n * sepa cuál es su item/árbol padre.\r\n * Esto es necesario ya que, a la hora de construir un árbol dinámico con templates,\r\n * el decorador @ContentChildren no funciona correctamente y no los detecta.\r\n * Dejo el enlace de un problema similar: https://github.com/angular/angular/issues/21751\r\n */\r\n @HostBinding('attr.desy-tree-item-key')\r\n readonly treeItemKey: string = TreeItemComponent.generateStaticItemKey();\r\n\r\n type: 'radio'|'checkbox'|null|undefined;\r\n subLevel: number; // Nivel dentro del arbol. 0 son los items a nivel de raiz.\r\n\r\n // Propiedades definidas por el componente árbol que el item puede utilizar, sobrescribir o ampliar\r\n parentName: string;\r\n defaultId;\r\n inheritedExpandedFirstLevel: boolean;\r\n inheritedDecoupleChildFromParent: boolean;\r\n inheritedDescribedBy: string;\r\n inheritedHasError: boolean;\r\n allParentsExpanded = true; // True si el elemento es visible según los elementos expandidos\r\n inheritedMatchesSearch = true; // True si el elemento es visible según los criterios de búsqueda\r\n orderInTree: number;\r\n\r\n // Evento para emitir al componente arbol cuando se pretende abandonar el foco del item\r\n quitFocus: EventEmitter<QuitTreeItemFocusOptions> = new EventEmitter<QuitTreeItemFocusOptions>();\r\n\r\n isFocus = false;\r\n isHover = false;\r\n private _matchesValidText = false; // True si el contenido del item encaja con los criterios de búsqueda y se está filtrando\r\n\r\n constructor(private changeDetector: ChangeDetectorRef, private element: ElementRef) {\r\n super();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.sub && this.sub.itemList) {\r\n this.sub.itemList.forEach(item => (item as TreeItemComponent).refreshAllParentsExpandedRecursive(this.allParentsExpanded && this.expanded));\r\n }\r\n\r\n for (const propName in changes) {\r\n if (changes.hasOwnProperty(propName)) {\r\n switch (propName) {\r\n case 'checked': {\r\n // Reasignamos el valor de checked cuando detectamos el cambio en la entrada\r\n setTimeout(() => {\r\n this.setChecked(this.checked, false, false);\r\n if (this.inheritedExpandedFirstLevel && this.checked && !this.expanded) {\r\n this.expandSub(true);\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /*\r\n * Métodos expuestos que permiten configurar al ítem de forma externa\r\n */\r\n\r\n focus(): void {\r\n this.checkbox?.focus();\r\n this.handleItemFocus(true);\r\n }\r\n\r\n setCheckedAutomaticallyDependingOnChildren(): void {\r\n if (this.sub) {\r\n this.sub.itemList.forEach(item => (item as TreeItemComponent).setCheckedAutomaticallyDependingOnChildren());\r\n if (this.areAllChildrenChecked()) {\r\n if (this.indeterminateChecked) {\r\n this.setIndeterminateChecked(false);\r\n }\r\n\r\n if (!this.checked) {\r\n this.setChecked(true, true);\r\n }\r\n } else if (this.hasChildrenCheckedOrIndeterminate()) {\r\n if (!this.indeterminateChecked) {\r\n this.setIndeterminateChecked(true);\r\n }\r\n\r\n if (this.checked) {\r\n this.setChecked(false, true);\r\n }\r\n } else {\r\n if (this.indeterminateChecked) {\r\n this.setIndeterminateChecked(false);\r\n }\r\n\r\n if (this.checked) {\r\n this.setChecked(false, true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n refreshAllParentsExpandedRecursive(value): void {\r\n this.allParentsExpanded = value;\r\n if (this.sub) {\r\n this.sub.itemList.forEach(item => (item as TreeItemComponent).refreshAllParentsExpandedRecursive(value && this.expanded));\r\n }\r\n }\r\n\r\n detectChanges(): void {\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n expandSub(value: boolean): void {\r\n this.expanded = value;\r\n if (this.sub) {\r\n this.sub.itemList.forEach(item => (item as TreeItemComponent).refreshAllParentsExpandedRecursive(this.allParentsExpanded && value));\r\n }\r\n this.expandedChange.emit(value);\r\n }\r\n\r\n /*\r\n * Gestion de eventos\r\n */\r\n\r\n handleCheckboxChange(checked: boolean): void {\r\n this.setChecked(checked, false)\r\n if (this.inheritedExpandedFirstLevel && checked && !this.expanded) {\r\n this.expandSub(true);\r\n }\r\n }\r\n\r\n handleIndeterminateCheckedChange(indeterminate: boolean): void {\r\n this.indeterminateCheckedChange.emit(indeterminate);\r\n }\r\n\r\n handleItemFocus(value, condition=true): void {\r\n if (condition) {\r\n this.isFocus = value;\r\n }\r\n }\r\n\r\n handleItemHover(value, condition=true): void {\r\n if (condition) {\r\n this.isHover = value;\r\n }\r\n }\r\n\r\n handleArrowUp(event: KeyboardEvent, condition=true): void {\r\n if (condition) {\r\n event.preventDefault();\r\n this.quitFocus.emit({\r\n nextElement: 'previous',\r\n currentItem: this\r\n });\r\n }\r\n }\r\n\r\n handleHome(event: KeyboardEvent, condition=true): void {\r\n if (condition) {\r\n event.preventDefault();\r\n this.quitFocus.emit({\r\n nextElement: 'first',\r\n currentItem: this\r\n });\r\n }\r\n }\r\n\r\n handleEnd(event: KeyboardEvent, condition=true): void {\r\n if (condition) {\r\n event.preventDefault();\r\n this.quitFocus.emit({\r\n nextElement: 'last',\r\n currentItem: this\r\n });\r\n }\r\n }\r\n\r\n handleArrowDown(event: KeyboardEvent, condition=true): void {\r\n if (condition) {\r\n event.preventDefault();\r\n this.quitFocus.emit({\r\n nextElement: 'next',\r\n currentItem: this\r\n });\r\n }\r\n }\r\n\r\n handleArrowRight(event: KeyboardEvent, condition=true): void {\r\n if (condition && this.sub && this.sub.itemList?.length > 0) {\r\n event.preventDefault();\r\n if (this.expanded) {\r\n this.quitFocus.emit({\r\n nextElement: 'firstChild',\r\n currentItem: this\r\n });\r\n } else {\r\n this.expandSub(true);\r\n }\r\n }\r\n }\r\n\r\n handleArrowLeft(event: KeyboardEvent, condition=true): void {\r\n if (condition) {\r\n event.preventDefault();\r\n if (this.expanded) {\r\n this.expandSub(false);\r\n } else if (this.subLevel > 0) {\r\n this.quitFocus.emit({\r\n nextElement: 'parent',\r\n currentItem: this\r\n });\r\n }\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Setters and getters\r\n */\r\n\r\n setChecked(checked: boolean, ignoreInTree: boolean, emitEvent = true): void {\r\n if (!this.disabled) {\r\n this.checked = checked;\r\n }\r\n\r\n if (!this.inheritedDecoupleChildFromParent && this.sub && this.sub.itemList && !this.indeterminateChecked) {\r\n this.sub.itemList.forEach(item => {\r\n (item as TreeItemComponent).setIndeterminateChecked(false);\r\n (item as TreeItemComponent).setChecked(checked, true)\r\n });\r\n }\r\n\r\n if (emitEvent) {\r\n this.checkedChange.emit(checked);\r\n }\r\n\r\n if (!ignoreInTree) {\r\n this.checkedChangeForTree.emit(checked);\r\n }\r\n }\r\n\r\n setIndeterminateChecked(indeterminate: boolean): void {\r\n if (!this.disabled) {\r\n this.indeterminateChecked = indeterminate;\r\n this.indeterminateCheckedChange.emit(indeterminate);\r\n }\r\n }\r\n\r\n setSubLevel(subLevel: number): void {\r\n this.subLevel = subLevel;\r\n if (this.sub && this.sub.itemList) {\r\n this.sub.itemList.forEach(item => (item as TreeItemComponent).setSubLevel(subLevel + 1));\r\n }\r\n }\r\n\r\n setOrderRecursively(order: number): number {\r\n this.orderInTree = order;\r\n let newOrder = order + 1;\r\n if (this.sub && this.sub.itemList) {\r\n this.sub.itemList.forEach(item => {\r\n newOrder = (item as TreeItemComponent).setOrderRecursively(newOrder);\r\n });\r\n }\r\n return newOrder;\r\n }\r\n\r\n setDefaultId(defaultId: string): void {\r\n this.defaultId = defaultId;\r\n this.setDefaultIdRecursive();\r\n }\r\n\r\n setDefaultIdRecursive(): void {\r\n if (this.sub && this.sub.itemList) {\r\n this.sub.itemList.forEach((item, index) => {\r\n (item as TreeItemComponent).setDefaultId(`sub-${this.getId()}-${index}`);\r\n });\r\n }\r\n }\r\n\r\n getId(): string {\r\n return this.id ? this.id : this.defaultId;\r\n }\r\n\r\n isHidden(): boolean {\r\n return !this.inheritedMatchesSearch && (!this.sub || this.areAllChildrenHidden());\r\n }\r\n\r\n areAllChildrenHidden(): boolean {\r\n const children = this.sub.itemList;\r\n return children.findIndex(child => !(child as TreeItemComponent).isHidden()) < 0;\r\n }\r\n\r\n areAllChildrenChecked(): boolean {\r\n const children = this.sub.itemList;\r\n return children.findIndex(child => !(child as TreeItemComponent).checked) < 0;\r\n }\r\n\r\n hasChildrenCheckedOrIndeterminate(): boolean {\r\n const children = this.sub.itemList;\r\n return children.findIndex(child => (child as TreeItemComponent).checked || (child as TreeItemComponent).indeterminateChecked) >= 0;\r\n }\r\n\r\n matchesText(value: string): boolean {\r\n let matches: boolean;\r\n if (this.allParentsExpanded && !this.isHidden()) {\r\n matches = this.checkbox?.matchesText(value);\r\n } else {\r\n const itemText = this.hiddenWrapper.nativeElement.textContent\r\n matches = SearchUtils.containsAnyWordFrom(itemText, value);\r\n }\r\n this._matchesValidText = value ? matches : false;\r\n return matches;\r\n }\r\n\r\n getKey(): string {\r\n return this.treeItemKey;\r\n }\r\n\r\n getParentKey(): string {\r\n let parentKey: string;\r\n let parentElement = this.element.nativeElement.parentElement;\r\n while (parentElement && parentElement.tagName !== 'BODY' && parentElement.tagName !== 'DESY-TREE-ITEM' && parentElement.tagName !== 'DESY-TREE') {\r\n parentElement = parentElement.parentElement;\r\n }\r\n\r\n if (parentElement.tagName === 'BODY') {\r\n throw new Error('Parent for tree-item not found');\r\n }\r\n\r\n if (parentElement.tagName === 'DESY-TREE') {\r\n parentKey = 'root';\r\n }\r\n\r\n if (parentElement.tagName === 'DESY-TREE-ITEM') {\r\n parentKey = parentElement.getAttribute('desy-tree-item-key');\r\n }\r\n\r\n return parentKey;\r\n }\r\n\r\n isActive(): boolean {\r\n return this.active || this._matchesValidText;\r\n }\r\n\r\n /*\r\n * Métodos privados\r\n */\r\n\r\n /**\r\n * Genera una clave única para el componente\r\n * @private\r\n */\r\n private static generateStaticItemKey(): string {\r\n const key = 'tree-item-key-' + TreeItemComponent._treeItemKeySuffix;\r\n TreeItemComponent._treeItemKeySuffix++;\r\n return key;\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren, EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output, QueryList,\r\n SimpleChanges, TemplateRef, ViewChild\r\n} from '@angular/core';\r\nimport {DesyContentChild} from \"../../../shared/decorators/desy-content-child.decorator\";\r\nimport {TreeItemComponent} from \"./tree-item/tree-item.component\";\r\nimport {DesyOnInputChange} from \"../../../shared/decorators/desy-on-input-change.decorator\";\r\nimport {NG_VALUE_ACCESSOR} from \"@angular/forms\";\r\nimport {FormFieldComponent} from \"../form-field/form-field.component\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {FieldsetComponent} from \"../fieldset/fieldset.component\";\r\nimport {QuitTreeItemFocusOptions} from \"./interfaces/quit-tree-item-focus-options\";\r\nimport {SearchBarComponent} from \"../search-bar/search-bar.component\";\r\n\r\n@Component({\r\n selector: 'desy-tree',\r\n templateUrl: './tree.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TreeComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class TreeComponent extends FormFieldComponent<any[]> implements OnChanges, OnDestroy {\r\n\r\n @Input() idPrefix: string;\r\n @Input() classes: string;\r\n @Input() formGroupClasses: string;\r\n @Input() name: string;\r\n @Input() type: 'radio'|'checkbox'|null|undefined;\r\n @Input() describedBy: string;\r\n\r\n @Input() expandedFirstLevel = true;\r\n @Input() decoupleChildFromParent = false;\r\n\r\n @Input() disableDefaultSearch = false;\r\n\r\n @DesyOnInputChange('onSearchMatchValuesChange')\r\n @Input() searchMatchValues: string[];\r\n @Output() searchMatchValuesChange: EventEmitter<string[]> = new EventEmitter<string[]>();\r\n\r\n @DesyOnInputChange('configureAllItems')\r\n @ContentChildren(TreeItemComponent, { descendants: true }) allItems: QueryList<TreeItemComponent>;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideFieldsetParams'})\r\n @ContentChildren(FieldsetComponent) fieldsetComponent: FieldsetComponent;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideSearchBarParams'})\r\n @ContentChildren(SearchBarComponent) searchBarComponent: SearchBarComponent;\r\n\r\n @ViewChild('innerHtml', { static: true }) innerHtml: TemplateRef<any>;\r\n\r\n private rootItems: TreeItemComponent[] = [];\r\n private _itemListSubscription: Subscription;\r\n private _allItemListSubscription: Subscription;\r\n private _itemListCheckedSubscriptions: Subscription[] = [];\r\n private _itemListQuitFocusSubscriptions: Subscription[] = [];\r\n private _alreadyConfiguringItems = false;\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearSubscriptions(this._itemListCheckedSubscriptions);\r\n this.clearSubscriptions(this._itemListQuitFocusSubscriptions);\r\n this._itemListSubscription?.unsubscribe();\r\n this._allItemListSubscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.configureAllItems();\r\n }\r\n\r\n /*\r\n * Eventos\r\n */\r\n\r\n /**\r\n * Actualiza el valor del componente al checkquearse un ítem\r\n * @param originItem ítem modificado\r\n */\r\n updateValueFromItems(originItem?: TreeItemComponent): void {\r\n\r\n // Si es radio, se desactivan el resto de items cuando se activa otro item\r\n if (this.type !== 'checkbox') {\r\n const items = this.getAllItemsInOrder();\r\n items.forEach(item => {\r\n if (item !== originItem && item.checked) {\r\n item.setChecked(false, true);\r\n }\r\n });\r\n } else if (!this.decoupleChildFromParent) {\r\n this.rootItems.forEach(item => item.setCheckedAutomaticallyDependingOnChildren());\r\n }\r\n\r\n // Si es checkbox se modifica el valor y se emite\r\n if (this.type === 'checkbox') {\r\n this.value = [];\r\n const items = this.getAllItemsInOrder();\r\n items.forEach(item => {\r\n if (item.checked) {\r\n this.value.push(item.value);\r\n }\r\n });\r\n this.onChange(this.value);\r\n }\r\n }\r\n\r\n /**\r\n * Gestiona cuando el foco abandona un ítem desde un evento de teclado controlado\r\n * @param options\r\n */\r\n handleItemQuitFocus(options: QuitTreeItemFocusOptions): void {\r\n if (options && options.nextElement) {\r\n const items = this.getAllItemsInOrder();\r\n const focusableItems = items.filter(item => !item.isHidden() && !item.disabled && item.allParentsExpanded);\r\n switch (options.nextElement) {\r\n case \"first\":\r\n focusableItems[0].focus();\r\n break;\r\n case \"last\":\r\n focusableItems[focusableItems.length - 1].focus();\r\n break;\r\n case \"parent\":\r\n const currentSubLevel = options.currentItem.subLevel;\r\n if (currentSubLevel > 0) {\r\n const currentItemIndex = focusableItems.findIndex(item => item === options.currentItem);\r\n const parent = focusableItems.slice(0, currentItemIndex).reverse().find(item => item.subLevel < currentSubLevel);\r\n if (parent) {\r\n parent.focus();\r\n }\r\n }\r\n break;\r\n case \"firstChild\":\r\n case \"next\":\r\n if (options.currentItem) {\r\n let currentItemIndex = focusableItems.findIndex(item => item === options.currentItem);\r\n if (currentItemIndex < focusableItems.length - 1) {\r\n focusableItems[currentItemIndex + 1].focus();\r\n }\r\n }\r\n break;\r\n case \"previous\":\r\n if (options.currentItem) {\r\n const currentItemIndex = focusableItems.findIndex(item => item === options.currentItem);\r\n if (currentItemIndex > 0) {\r\n focusableItems[currentItemIndex - 1].focus();\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Realiza la búsqueda interna de los items en el componente\r\n * @param value texto de búsqueda\r\n */\r\n onSearch(value: string): void {\r\n if (!this.disableDefaultSearch) {\r\n if (value && value.length > 0) {\r\n this.searchMatchValues = this.allItems.filter(item => item.matchesText(value)).map(item => item.value);\r\n } else {\r\n this.searchMatchValues = null;\r\n }\r\n this.searchMatchValuesChange.emit(this.searchMatchValues);\r\n }\r\n }\r\n\r\n /*\r\n * Eventos al cambiar propiedades\r\n */\r\n\r\n /**\r\n * Configura los items del árbol\r\n */\r\n configureAllItems(): void {\r\n\r\n if (!this._alreadyConfiguringItems) {\r\n this._alreadyConfiguringItems = true;\r\n\r\n // Lo realizamos desde un setTimeout para que todos los inputs, values y demás vivan en paz y armonía\r\n setTimeout(() => {\r\n if (this.allItems?.length > 0) {\r\n this.clearSubscriptions(this._itemListCheckedSubscriptions);\r\n this.clearSubscriptions(this._itemListQuitFocusSubscriptions);\r\n this.allItems.forEach(item => {\r\n item.parentName = this.name;\r\n item.type = this.type;\r\n item.inheritedDescribedBy = this.getDescribedByForItems();\r\n item.inheritedExpandedFirstLevel = this.expandedFirstLevel;\r\n item.inheritedDecoupleChildFromParent = this.decoupleChildFromParent;\r\n if (this.value && this.value.length > 0) {\r\n item.setChecked(!!this.value.find(v => v === item.value), true);\r\n }\r\n item.detectChanges();\r\n\r\n const checkedSubscription = item.checkedChangeForTree.subscribe(() => this.updateValueFromItems(item));\r\n this._itemListCheckedSubscriptions.push(checkedSubscription);\r\n\r\n const quitFocusSubscription = item.quitFocus.subscribe(options => this.handleItemQuitFocus(options));\r\n this._itemListQuitFocusSubscriptions.push(quitFocusSubscription);\r\n });\r\n\r\n this.setErrorInItems(this.hasErrorMessageComponent());\r\n\r\n this.buildTree();\r\n if (!this.value) {\r\n this.updateValueFromItems();\r\n }\r\n }\r\n\r\n if (this.allItems && !this._allItemListSubscription) {\r\n this._allItemListSubscription = this.allItems.changes.subscribe(() => this.configureAllItems());\r\n }\r\n\r\n this.changeDetector.detectChanges();\r\n this._alreadyConfiguringItems = false;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Modifica los items visibles según el filtro de búsqueda\r\n */\r\n onSearchMatchValuesChange(): void {\r\n if (this.allItems) {\r\n this.allItems.forEach(item => {\r\n item.inheritedMatchesSearch = true;\r\n });\r\n\r\n if (this.searchMatchValues !== null && this.searchMatchValues !== undefined) {\r\n this.allItems.forEach(item => {\r\n if (this.searchMatchValues.findIndex(value => item.value === value) < 0) {\r\n item.inheritedMatchesSearch = false;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n /*\r\n * Getters and setters\r\n */\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : this.name;\r\n }\r\n\r\n getDescribedBy(): string {\r\n let describedBy = '';\r\n if (this.describedBy) {\r\n describedBy = this.describedBy;\r\n }\r\n\r\n if (this.hasHintComponent() && this.hintComponent.id) {\r\n describedBy = describedBy + ' ' + this.hintComponent.id;\r\n }\r\n\r\n if (this.hasErrorMessageComponent() && this.errorMessageComponent.id) {\r\n describedBy = describedBy + ' ' + this.errorMessageComponent.id;\r\n }\r\n\r\n return describedBy;\r\n }\r\n\r\n /**\r\n * Devuelve el valor de describedBy que se transmitirá a los items\r\n */\r\n getDescribedByForItems(): string {\r\n let describedBy;\r\n if (this.hasFieldsetComponent()) {\r\n describedBy = this.fieldsetComponent.describedBy;\r\n } else {\r\n describedBy = this.getDescribedBy();\r\n }\r\n\r\n return describedBy;\r\n }\r\n\r\n hasFieldsetComponent(): boolean {\r\n return !!this.fieldsetComponent;\r\n }\r\n\r\n /**\r\n * Overrides super.getHintId();\r\n */\r\n getHintId(): string {\r\n return this.idPrefix ? this.idPrefix + '-hint' : this.hintComponent?.id;\r\n }\r\n\r\n /**\r\n * Overrides super.getHintId();\r\n */\r\n getErrorId(): string {\r\n return this.idPrefix ? this.idPrefix + '-error' : this.errorMessageComponent?.id;\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 = this.getDescribedBy();\r\n fieldset.detectChanges();\r\n }\r\n\r\n overrideSearchBarParams(searchbar: SearchBarComponent): void {\r\n const defaultOnChange = searchbar.onChange;\r\n const newOnChange = value => {\r\n this.onSearch(value);\r\n defaultOnChange(value);\r\n }\r\n searchbar.registerOnChange(newOnChange);\r\n }\r\n\r\n /**\r\n * Se llama desde FormField\r\n */\r\n overrideHintParams(hint): void {\r\n hint.id = this.getHintId();\r\n hint.detectChanges();\r\n }\r\n\r\n /**\r\n * Se llama desde FormField\r\n */\r\n overrideErrorMessageParams(errorMessage): void {\r\n errorMessage.id = this.getErrorId();\r\n this.setErrorInItems(this.hasErrorMessageComponent());\r\n errorMessage.detectChanges();\r\n }\r\n\r\n /**\r\n * Se llama desde FormField\r\n */\r\n onDeleteErrorMessage(errorMessage): void {\r\n this.setErrorInItems(this.hasErrorMessageComponent());\r\n }\r\n\r\n /*\r\n * Métodos privados\r\n */\r\n\r\n /**\r\n * Configura la estructura del árbol\r\n * @private\r\n */\r\n private buildTree(): void {\r\n\r\n // Se crea un mapa para tener accesibles los items por key y se borran los listados existentes\r\n const itemMap = {}\r\n this.rootItems = [];\r\n this.allItems.forEach(item => {\r\n const key = item.getKey();\r\n itemMap[key] = item;\r\n if (item.sub) {\r\n item.sub.itemList = [];\r\n }\r\n });\r\n\r\n // Se añaden los items a los listados correspondientes\r\n this.allItems.forEach(item => {\r\n const parentKey = item.getParentKey();\r\n if (parentKey === 'root') {\r\n this.rootItems.push(item);\r\n } else if (parentKey) {\r\n const sub = itemMap[parentKey].sub;\r\n if (sub) {\r\n sub.itemList.push(item);\r\n }\r\n }\r\n });\r\n\r\n // Se configuran los items desde root\r\n let order = 0;\r\n this.rootItems.forEach((item, index) => {\r\n item.setSubLevel(0);\r\n item.setDefaultId(`${this.idPrefix}-${index}`);\r\n item.refreshAllParentsExpandedRecursive(true);\r\n item.setCheckedAutomaticallyDependingOnChildren();\r\n order = item.setOrderRecursively(order);\r\n });\r\n }\r\n\r\n /**\r\n * Si tiene un mensaje de error, se indica a los items\r\n * @param hasError\r\n * @private\r\n */\r\n private setErrorInItems(hasError: boolean): void {\r\n if (this.allItems?.length > 0) {\r\n this.allItems.forEach(item => {\r\n item.inheritedHasError = hasError;\r\n item.detectChanges();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Limpia un listado de subscripciones\r\n * @param subscriptionList\r\n * @private\r\n */\r\n private clearSubscriptions(subscriptionList: Subscription[]): void {\r\n if (subscriptionList.length > 0) {\r\n subscriptionList.forEach(s => s.unsubscribe());\r\n subscriptionList.splice(0, subscriptionList.length)\r\n }\r\n }\r\n\r\n /**\r\n * Devuelve los items del árbol ordenados\r\n * @private\r\n */\r\n private getAllItemsInOrder(): TreeItemComponent[] {\r\n let list = [];\r\n if (this.allItems) {\r\n list = this.allItems.toArray().sort((a, b) => a.orderInTree > b.orderInTree ? 1 : -1)\r\n }\r\n return list\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 {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n OnInit,\r\n TemplateRef,\r\n ViewChild,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport {TreeItemComponent} from \"../tree-item/tree-item.component\";\r\n\r\n@Component({\r\n selector: 'desy-tree-items-generator',\r\n templateUrl: './tree-items-generator.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TreeItemsGeneratorComponent implements OnInit {\r\n\r\n @ViewChild('content', { static: true }) content: TemplateRef<any>;\r\n\r\n @Input() items: any[];\r\n @Input() itemTemplate: TemplateRef<TreeItemComponent>;\r\n\r\n constructor(private viewContainerRef: ViewContainerRef) { }\r\n\r\n ngOnInit(): void {\r\n this.viewContainerRef.createEmbeddedView(this.content);\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-button',\r\n ariaModal: 'true',\r\n ariaLabelledBy: 'header-offcanvas-button-text',\r\n role: 'dialog'\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 const elementToFocus = document.getElementById('header-offcanvas-button');\r\n elementToFocus?.focus()\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 movePrevious(event: KeyboardEvent, currentIndex: number): void {\r\n event.preventDefault();\r\n const items = this.getItemList();\r\n let nextIndex = currentIndex - 1;\r\n while (nextIndex >= 0 && !this.isFocusableItem(items[nextIndex])) {\r\n nextIndex--;\r\n }\r\n\r\n if (nextIndex < items.length) {\r\n const itemElem = document.getElementById(this.getItemId(items[nextIndex], nextIndex));\r\n if (itemElem) {\r\n itemElem.focus();\r\n }\r\n }\r\n }\r\n\r\n moveNext(event: KeyboardEvent, currentIndex: number): void {\r\n event.preventDefault();\r\n const items = this.getItemList();\r\n let nextIndex = currentIndex + 1;\r\n while (nextIndex < items.length && !this.isFocusableItem(items[nextIndex])) {\r\n nextIndex++;\r\n }\r\n\r\n if (nextIndex < items.length) {\r\n const itemElem = document.getElementById(this.getItemId(items[nextIndex], nextIndex));\r\n if (itemElem) {\r\n itemElem.focus();\r\n }\r\n }\r\n }\r\n\r\n simulateClick(event: KeyboardEvent, item: NavItemData, index: number): void {\r\n event.preventDefault();\r\n const element = document.getElementById(this.getItemId(item, index));\r\n element?.click();\r\n }\r\n\r\n\r\n private isFocusableItem(item: NavItemData): boolean {\r\n return !item.active && !item.disabled;\r\n }\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\nimport {ContentComponent} from \"../../../../desy-commons/components/content/content.component\";\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 @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\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 + '-0';\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 { 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, 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","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&nbsp;</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\">:&nbsp;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\nimport { TreeComponent } from './components/tree/tree.component';\r\nimport { TreeCheckboxComponent } from './components/tree/tree-checkbox/tree-checkbox.component';\r\nimport { TreeSubComponent } from './components/tree/tree-sub/tree-sub.component';\r\nimport { TreeItemComponent } from './components/tree/tree-item/tree-item.component';\r\nimport { TreeItemsGeneratorComponent } from './components/tree/tree-items-generator/tree-items-generator.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 TreeComponent,\r\n TreeSubComponent,\r\n TreeItemComponent,\r\n TreeCheckboxComponent,\r\n TreeItemsGeneratorComponent,\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 TreeComponent,\r\n TreeSubComponent,\r\n TreeItemComponent,\r\n TreeItemsGeneratorComponent,\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 { Component, Input, ViewChild } from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-toggle-off-state',\r\n templateUrl: './toggle-off-state.component.html'\r\n})\r\nexport class ToggleOffStateComponent extends AccessibilityComponent {\r\n \r\n @ViewChild('contentTemplateOffState', { static: true }) content;\r\n\r\n @Input() classes: string;\r\n\r\n}","import { Component, Input, ViewChild } from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-toggle-on-state',\r\n templateUrl: './toggle-on-state.component.html'\r\n})\r\nexport class ToggleOnStateComponent extends AccessibilityComponent {\r\n\r\n @ViewChild('contentTemplateOnState', { static: true }) content;\r\n\r\n @Input() classes: string;\r\n\r\n}\r\n","import { Component, ContentChildren, EventEmitter, Input, Output } from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';\r\nimport { ToggleOffStateComponent } from './toggle-off-state/toggle-off-state.component';\r\nimport { ToggleOnStateComponent } from './toggle-on-state/toggle-on-state.component';\r\n\r\n@Component({\r\n selector: 'desy-toggle',\r\n templateUrl: './toggle.component.html'\r\n})\r\nexport class ToggleComponent extends AccessibilityComponent {\r\n \r\n @Input() id: string;\r\n @Input() isSwitch: boolean;\r\n @Input() pressed: boolean;\r\n @Input() classes: string;\r\n \r\n @Output() clickEvent = new EventEmitter();\r\n @Output() pressedChange: EventEmitter<any> = new EventEmitter<any>();\r\n \r\n @DesyContentChild()\r\n @ContentChildren(ToggleOnStateComponent) contentTemplateOnState: ToggleOnStateComponent;\r\n \r\n @DesyContentChild()\r\n @ContentChildren(ToggleOffStateComponent) contentTemplateOffState: ToggleOffStateComponent;\r\n\r\n onClick(event: any): void {\r\n this.pressed = !this.pressed;\r\n this.pressedChange.emit(this.pressed);\r\n this.clickEvent.emit(event);\r\n }\r\n\r\n}\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\nimport { ToggleComponent } from './components/toggle/toggle.component';\r\nimport { ToggleOnStateComponent } from './components/toggle/toggle-on-state/toggle-on-state.component';\r\nimport { ToggleOffStateComponent } from './components/toggle/toggle-off-state/toggle-off-state.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 ToggleComponent,\r\n ToggleOnStateComponent,\r\n ToggleOffStateComponent\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 ToggleComponent,\r\n ToggleOnStateComponent,\r\n ToggleOffStateComponent\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"]}
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/components/tree/tree-sub/tree-sub.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/tree/interfaces/itree-item.ts","../../../projects/desy-angular/src/lib/shared/utils/search-utils.ts","../../../projects/desy-angular/src/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/tree/tree-item/tree-item.component.ts","../../../projects/desy-angular/src/lib/desy-forms/components/tree/tree.component.ts","../../../projects/desy-angular/src/lib/desy-forms/directives/condition.directive.ts","../../../projects/desy-angular/src/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.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/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/accordion-history/accordion-history-item-hide-button/accordion-history-item-hide-button.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/accordion-history/accordion-history-item-show-button/accordion-history-item-show-button.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.ts","../../../projects/desy-angular/src/lib/desy-views/components/accordion-history/accordion-history.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-figure/media-object-figure.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/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/components/toggle/toggle-off-state/toggle-off-state.component.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.ts","../../../projects/desy-angular/src/lib/desy-buttons/components/toggle/toggle.component.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","AccessibilityComponent","type","Component","args","selector","template","Input","ContentBaseComponent","_super","getContent","content","ViewChild","static","TextOrHtmlRequiredComponent","AccessibilityAndTextOrHtmlRequiredComponent","AccessibilityAndContentRequiredComponent","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","get","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","DropdownComponent","isOpen","clickOutsideEnabled","ngOnInit","contentTooltip","dropdownContent","nativeElement","style","display","tippyProperties","placement","inlinePositioning","allowHTML","trigger","hideOnClick","interactive","arrow","offset","theme","plugins","name","defaultValue","fn","instance","onCreate","popper","addEventListener","props","hideOnPopperBlur","relatedTarget","contains","hide","_a","onKeyDown","KEY_CODE_ESC","onShow","onHide","removeEventListener","role","aria","onShown","focus","setOpen","read","ElementRef","StringUtils","escapeHtml","replace","RegExp","ListboxLabelComponent","ListboxItemComponent","itemChange","ngOnChanges","changes","DesyContentChild","options","propertyKey","privateKeyName","privateQueryListKeyName","set","queryList","QueryList","subscribe","previousValue","first","onSetCallbackName","onDeleteCallbackName","notifyOnChanges","ListboxComponent","itemsChange","activeItemChange","isListVisible","listboxButtonElement","listboxButton","listboxContent","onListShow","bind","onHidden","onListClose","itemComponentList","itemComponentSubscriptions","forEach","unsubscribe","itemList","subscription","checkActiveItems","items","ngDoCheck","getActiveItemsData","map","index","active","filter","activeItems","hasActiveItemChange","lastActiveItems","isMultiselectable","newItem","this_1","findIndex","activeItems_1","activeItems_1_1","doesChangeButtonText","activeItemOption","listboxOptions","find","buttonContentHtml","innerHTML","html","listboxList","onListFocus","activeItemsData","activeElem","getElementById","getItemId","currentFocusIndex","selectItem","console","warn","moveFocus","position","onSpace","getIdPrefix","idPrefix","id","itemId","hasLabel","labelComponent","getLabelContent","text","ViewChildren","ContentChildren","PillComponent","getType","TYPE_A","TYPE_SPAN","TYPE_BUTTON","ContentComponent","DescriptionComponent","IconComponent","TitleComponent","HintComponent","changeDetectorRef","detectChanges","ChangeDetectorRef","LabelComponent","ErrorMessageComponent","LegendComponent","FieldsetComponent","legendComponent","contentComponent","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","HostListener","TextareaComponent","inputTransform","getRows","rows","DEFAULT_ROWS","ensureText","registerInputTransform","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","textareaElement","CharacterCountComponent","ngAfterViewInit","textarea","maxlength","calculateLenght","displayCountMessage","threshold","substring","remaining","words","match","maxwords","lastIndexOf","countbbdd","specialChars","InputComponent","cfg","cfgr","formGroupClasses","attributes","setAttributes","input","attr","keys","setAttribute","errorId","SelectItemComponent","OptionComponent","OptionGroupComponent","SelectComponent","contentInit","ngAfterContentInit","getItems","itemSelected_1","selected","itemComponents","toArray","isItemSelected","isOptionGroup","FileUploadComponent","InputGroupItemComponent","DesyOnInputChange","callbackName","MakeHtmlListPipe","transform","valueForEmpty","filteredList","join","Pipe","InputGroupInputComponent","isSelect","valueChange","InputGroupSelectComponent","selectItemComponentList","InputGroupDividerComponent","divider","dividerContent","InputGroupComponent","controlContainer","ngAfterViewChecked","getItemName","onExternalChange","onInternalChange","itemValue","itemName","overrideFieldsetParams","fieldset","caller","innerHtml","describedBy","itemsComponents","getItemLabelRef","getItemLabelData","hasFieldset","hasFieldsetComponent","hasLegendComponent","legendRef","fieldsetData","legendData","legendText","fieldsetComponent","namePrefix","getItemSelectOptions","selectItems","getItemDividerTemplate","getItemDividerHtml","isSelectItem","hasSelectItems","hasItemLabel","ControlContainer","Optional","RadioItemComponent","radios","checkedChange","Error","markForUpdateCheckboxIds","ngOnDestroy","checked","lastChecked","isInit","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","conditionalContentList","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","isIndeterminate","readOnly","indeterminate","setIndeterminateStatus","getValue","updateCheckboxId","getNameCheckbox","CheckboxesComponent","updateCheckboxItemsChecked","getCheckboxItems","itemChecked","isArray","checkboxComponentItems","checkboxComponentItems2","DateInputItemComponent","DateInputDayComponent","DateInputMonthComponent","DateInputYearComponent","DateInputDividerComponent","DateInputComponent","initDefaultItems","newVal","assign","getItemLabel","toUpperCase","dateInputItemComponents","defaultItems","SearchBarComponent","hasButton","button","TreeSubComponent","ITreeItem","SearchUtils","containsAnyWordFrom","fullWord","includes","simplifiedTarget","getSimplifiedString","split","word","str","res","toLocaleUpperCase","trim","TreeCheckboxComponent","changeDetector","indeterminateCheckedChange","_hasInit","onDescribedByChange","onIdChange","overrideLabelParams","_lastIndeterminate","matchesText","checkboxText","contentWrapper","textContent","getItemDescribedBy","ariaDescribedBy","itemDescribedBy","TreeItemComponent","checkedChangeForTree","expandedChange","treeItemKey","generateStaticItemKey","allParentsExpanded","inheritedMatchesSearch","quitFocus","isFocus","isHover","_matchesValidText","propName","sub","refreshAllParentsExpandedRecursive","expanded","inheritedExpandedFirstLevel","expandSub","checkbox","handleItemFocus","setCheckedAutomaticallyDependingOnChildren","areAllChildrenChecked","hasChildrenCheckedOrIndeterminate","handleCheckboxChange","handleIndeterminateCheckedChange","condition","handleItemHover","handleArrowUp","nextElement","currentItem","handleHome","handleEnd","handleArrowDown","handleArrowRight","handleArrowLeft","subLevel","ignoreInTree","emitEvent","inheritedDecoupleChildFromParent","setSubLevel","setOrderRecursively","order","orderInTree","newOrder","setDefaultId","defaultId","setDefaultIdRecursive","getId","isHidden","areAllChildrenHidden","child","matches","itemText","hiddenWrapper","getKey","getParentKey","parentKey","parentElement","tagName","isActive","_treeItemKeySuffix","TreeComponent","expandedFirstLevel","decoupleChildFromParent","disableDefaultSearch","searchMatchValuesChange","rootItems","_itemListCheckedSubscriptions","_itemListQuitFocusSubscriptions","_alreadyConfiguringItems","clearSubscriptions","_itemListSubscription","_b","_allItemListSubscription","configureAllItems","updateValueFromItems","originItem","getAllItemsInOrder","handleItemQuitFocus","focusableItems","currentSubLevel_1","currentItemIndex","slice","reverse","onSearch","searchMatchValues","allItems","isValueChange","parentName","inheritedDescribedBy","getDescribedByForItems","valueList","checkedSubscription","quitFocusSubscription","setErrorInItems","buildTree","onSearchMatchValuesChange","overrideSearchBarParams","searchbar","defaultOnChange","itemMap","inheritedHasError","subscriptionList","splice","list","sort","a","descendants","searchBarComponent","ConditionDirective","templateRef","conditionalHtml","_c","Directive","TemplateRef","TreeItemsGeneratorComponent","viewContainerRef","createEmbeddedView","changeDetection","ChangeDetectionStrategy","OnPush","ViewContainerRef","ModalButtonPrimaryComponent","ModalButtonSecondaryComponent","ModalComponent","closeModal","clickButton","hasIconContent","descriptionIsHtml","descriptionIsEmpty","closeDialog","iconComponent","icon","checkDescriptionContent","childs","childNodes","hasHtml","hasContent","nodeType","Node","TEXT_NODE","ELEMENT_NODE","CDATA_SECTION_NODE","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","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","Location","HeaderOffcanvasCloseButtonComponent","HeaderOffcanvasButtonComponent","openOffcanvas","handleClick","HeaderOffcanvasComponent","dialogService","hostClass","close","open","offcanvasContent","elementToFocus","setHostClass","bindButton","ariaModal","ariaLabelledBy","closeButton","HeaderNavigationItemComponent","HeaderNavigationComponent","prefix","suffix","NavItemComponent","NavComponent","hasNav","itemsActiveChange","movePrevious","currentIndex","nextIndex","isFocusableItem","itemElem","moveNext","simulateClick","click","HeaderSubnavComponent","hasSubnavItems","nav","overrideNavParams","ariaLabel","HeaderDropdownComponent","SkipLinkComponent","HeaderComponent","overrideSkipLinkParams","skiplinkComponent","overrideNavigationParams","navigationComponent","subnavComponent","dropdownComponent","offcanvasComponent","FooterNavigationItemComponent","FooterNavigationComponent","FooterMetaItemComponent","FooterMetaComponent","FooterComponent","getNavigationItems","navItems","navigation","getNavigationItemItems","getMetaItems","meta","getMetaContent","metaComponent","ErrorSummaryItemComponent","ErrorSummaryComponent","getErrorItemList","errorItemList","errorComponentList","errorList","lastErrorItemCount","MenuHorizontalItemComponent","MenuHorizontalComponent","MenuVerticalItemSubItemComponent","MenuVerticalItemSubComponent","MenuVerticalItemComponent","subComponent","MenuVerticalComponent","getItemHtml","getSubItemId","itemIndex","subItemIndex","subItemId","getItemSub","subItem","getSubItems","subItems","MenubaritemDirective","elementRef","contentChanged","contentHasBeenChecked","ngAfterContentChecked","popupMenu","lastPopupMenu","popupMenuItems","lastPopupMenuItems","link","lastLink","itemContentWrapper","lastItemContentWrapper","ContentChild","MenubarSubsubitemComponent","MenubarSubitemComponent","MenubarItemComponent","MenubarLabelComponent","MenubarComponent","activeSubItemChange","viewInit","currentFocusItemIndex","checkChanges","menuItems","menuData","itemData","currentFocusSubItemIndex","currentFocusSubSubItemIndex","menuItem","checkRequired","lastCurrentFocusItemIndex","isItemFocusable","handleMenuFocusIn","isFocused","handleMenuFocusOut","menubar","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","getMenuDataIndex","menuDataIndex","hover","hasFocus","activeElement","fromItemIndex","nextItem","char","itemContents","foundIndex","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","TableHeaderComponent","cells","TableCaptionComponent","TableRowComponent","OrderBy","TableComponent","getCaptionClass","captionComponent","captionClasses","getHeaderCells","headerCells","headerComponent","head","rowComponentList","getRowCells","row","TableAdvancedHeaderCellComponent","TableAdvancedHeaderComponent","TableAdvancedRowCellComponent","TableAdvancedRowComponent","cellsList","CellDirective","RowDirective","getCell","column","contentCells","cell","columnIndex","TableAdvancedComponent","el","rowsChange","rowsChecked","recalculateTable","orderByType","elemntsFocus","querySelector","recalculateVisibleElements","recalculateParams","buildRecalculateParams","observers","markForCheck","visibleRows","rowData","filterRows","sortRows","desyRow","params","filters","headerCell","headerCellIndex","hasFilter","activeFilter","filterText","valueFilter","orderByColumnIndex","orderBy","none","hasFilters","getVisibleRows","getIdHeader","getIdRowCheckbox","getIdHeaderFilter","getStringOrderBy","asc","notifyCheckedChange","uncheckAll","mustEmit","rowChecks","handleInputSearch","filteredRows","handleSortByColumn","cellIndex","getNextDirection","sortedRows","columnIndex_1","isAsc_1","compareCellContent","isAsc","aComparable","cleanCurrency","bComparable","isNaN","localeCompare","sensitivity","ignorePunctuation","numeric","txt","test","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","headingComponent","heading","getItemHeader","getItemContent","AccordionHistoryItemHideButtonComponent","AccordionHistoryItemShowButtonComponent","AccordionHistoryItemComponent","showButton","hideButton","AccordionHistoryComponent","SpinnerComponent","DetailsComponent","TermComponent","DefinitionComponent","DescriptionItemComponent","term","definition","DescriptionListComponent","CollapsibleComponent","toggleOpen","show","ItemContentRightComponent","ItemContentBottomComponent","ItemItemComponent","ItemComponent","getTitle","contentBottomComponent","contentRightComponent","MediaObjectFigureComponent","MediaObjectComponent","mediaObjectFigureComponent","StatusComponent","StatusItemComponent","statusComponent","PanelComponent","TabItemComponent","panelComponent","TabsComponent","currentTab","selectTab","getItemPanel","tab","panel","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","nPages","Math","ceil","totalItems","itemsPerPage","previousText","nextText","buildPages","getSuffix","page","getLastItemNumber","pageIndex","min","routerLink","getButtonId","changePage","current","previous","getActiveItemText","InnerHtmlPipe","sanitizer","sanitize","SecurityContext","HTML","DomSanitizer","ExternalHrefPipe","AttributeChangeDirective","desyAttributeChange","desyAttributeChangeMutation","MutationObserver","mutations","mutation","attributesToCheck","attributeName","observe","childList","characterData","subtree","disconnect","InnerContentDirective","deleteContentIfEmpty","isHtml","innerText","ClickOutsideDirective","hostElementRef","clickOutside","desyClickOutsideElem","ContentChangeDirective","observeProperties","desyContentChange","desyContentChangeMutation","CustomInnerContentDirective","resolver","injector","clear","desyCustomInnerContent","tmpWrapper","createElement","nodeList_1","node","componentRef","textNode","createTextNode","SharedModule","NgModule","declarations","imports","CommonModule","exports","RouterModule","TemplateDrivenWrapperComponent","NgForm","DesyCommonsModule","NgxTippyModule","DesyFormsModule","FormsModule","ReactiveFormsModule","TooltipComponent","hasIconComponentContent","tooltipContent","complex","getIdButton","getIdTooltip","handleEmptyContent","handleEmptyIconContent","getMainContent","getIconContent","tooltipContentComponent","DesyViewsModule","ToggleOffStateComponent","ToggleOnStateComponent","ToggleComponent","pressedChange","pressed","contentTemplateOnState","contentTemplateOffState","DesyButtonsModule","DesyModalsModule","A11yModule","DesyNavModule","FocusClickedCellDirective","offsetParent","elemntsFocus_1","elemntsFocus_1_1","activeTabindex","manageArrows","code","tr","parentNode","nextElementSibling","previousElementSibling","inactiveTabindex","mynode","otherNode","isEqualNode","DesyTablesModule","DesyPaginationModule","DesyAngularModule"],"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 var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\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\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\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 } 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 {\r\n\r\n /***\r\n * componente base para el comportamiento de texto o html required - YA NO ES REQUIRIDO\r\n * \r\n **/\r\n\r\n @Input() text: string;\r\n @Input() html: string;\r\n\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 - YA NO ES REQUIERIDO\r\n * \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 ViewChild,\r\n ElementRef,\r\n OnInit,\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 OnInit {\r\n\r\n static readonly KEY_CODE_ESC = 'Escape';\r\n\r\n @ViewChild('dropdownContent', { read: ElementRef, static: true }) 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 isOpen = false;\r\n clickOutsideEnabled = false;\r\n\r\n tippyProperties: any;\r\n\r\n ngOnInit(): any {\r\n let contentTooltip: HTMLElement;\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 {\r\n name: 'hideOnPopperBlur',\r\n defaultValue: true,\r\n fn(instance) {\r\n return {\r\n onCreate() {\r\n instance.popper.addEventListener('focusout', (event) => {\r\n if (\r\n instance.props.hideOnPopperBlur &&\r\n event.relatedTarget &&\r\n !instance.popper.contains(event.relatedTarget)\r\n ) {\r\n instance.hide();\r\n }\r\n });\r\n },\r\n };\r\n }\r\n }, {\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 ],\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 firstFocusable.focus();\r\n }\r\n }\r\n };\r\n }\r\n }\r\n\r\n onClick(event: any): void {\r\n if (!this.isDisabled()){\r\n this.clickEvent.emit(event);\r\n }\r\n }\r\n\r\n setOpen(isOpen: boolean): void {\r\n this.isOpen = isOpen;\r\n }\r\n\r\n isDisabled(): boolean {\r\n return this.disabled ? true : null;\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'), '&amp;')\r\n .replace(new RegExp(`<`, 'g'), '&lt;')\r\n .replace(new RegExp(`>`, 'g'), '&gt;')\r\n .replace(new RegExp(`\"`, 'g'), '&quot;')\r\n .replace(new RegExp(`'`, 'g'), '&#39;') : '';\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-listbox-label',\r\n templateUrl: './listbox-label.component.html'\r\n})\r\nexport class ListboxLabelComponent extends ContentBaseComponent {\r\n\r\n @Input() classes: string;\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} 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, static: true }) listboxButton: ElementRef;\r\n @ViewChild('list', { read: ElementRef }) listboxList: ElementRef;\r\n @ViewChild('tooltip', { read: ElementRef, static: true }) 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\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; // Propiedades de tippy\r\n currentFocusIndex: number; // Índice del elemento actual con focus\r\n buttonContentHtml: string; // Puede ser el pasado por parámetro o el item seleccionado en caso de currentFocusIndex=true\r\n isListVisible = false; // Indica si la lista se está mostrando\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 const listboxButtonElement = this.listboxButton.nativeElement;\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 {\r\n name: 'hideOnPopperBlur',\r\n defaultValue: true,\r\n fn(instance) {\r\n return {\r\n onCreate() {\r\n instance.popper.addEventListener('focusout', (event) => {\r\n if (\r\n instance.props.hideOnPopperBlur &&\r\n event.relatedTarget &&\r\n !instance.popper.contains(event.relatedTarget)\r\n ) {\r\n instance.hide();\r\n }\r\n });\r\n },\r\n };\r\n }\r\n }, {\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 listboxButtonElement.focus();\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 ],\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 ngOnChanges(): void {\r\n setTimeout(() => {\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 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.buttonContentHtml = activeItemOption.nativeElement.innerHTML;\r\n }\r\n } else {\r\n this.buttonContentHtml = this.html ? this.html : null;\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 }\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","import {Component, EventEmitter, HostBinding, Input, Output } 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 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(): void {\r\n this.writeValue(this.value);\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 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 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, HostBinding, Input, OnChanges, SimpleChanges, DoCheck } 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, DoCheck {\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\r\n // form group class - asignar clases a la etiqueta desy-input\r\n @HostBinding('class.c-form-group') cfg = true;\r\n @HostBinding('class.c-form-group--error') cfgr: boolean;\r\n @Input() @HostBinding('class') formGroupClasses: any;\r\n\r\n @Input() classes: string;\r\n @Input() autocomplete: string;\r\n @Input() maxlength: number;\r\n @Input() errorId: string;\r\n @Input() attributes: any;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.cfgr = (this.hasErrorsMessage() || this.formGroupClasses === 'c-form-group--error');\r\n }\r\n\r\n ngDoCheck(): void {\r\n if(this.attributes){\r\n this.setAttributes();\r\n }\r\n }\r\n\r\n setAttributes(){\r\n const input = document.getElementById(this.id ? this.id : 'input');\r\n const attr = this.attributes;\r\n Object.keys(attr).forEach(key => {\r\n input?.setAttribute(key, attr[key]);\r\n });\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","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, HostBinding} 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 AfterContentInit, OnChanges {\r\n\r\n @Input() name: string;\r\n @Input() items: SelectItemData[];\r\n @Input() describedBy?: string;\r\n\r\n\r\n // form group class - asignar clases a la etiqueta desy-select\r\n @HostBinding('class.c-form-group') cfg = true;\r\n @HostBinding('class.c-form-group--error') cfgr: boolean;\r\n @Input() @HostBinding('class') formGroupClasses: any;\r\n\r\n @Input() classes: string;\r\n\r\n @ContentChildren(SelectItemComponent) itemComponents: QueryList<SelectItemComponent>;\r\n contentInit = false;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.cfgr = (this.hasErrorsMessage() || this.formGroupClasses === 'c-form-group--error');\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 return items;\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 } 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 {\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}\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 {\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}\r\n","import {\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 {\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}\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 HostBinding,\r\n Input,\r\n Optional, Output,\r\n QueryList,\r\n TemplateRef, ViewChild,\r\n OnChanges\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 AfterContentInit, AfterViewChecked, OnChanges {\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\r\n // form group class - asignar clases a la etiqueta desy-input-group\r\n @HostBinding('class.c-form-group') cfg = true;\r\n @HostBinding('class.c-form-group--error') cfgr: boolean;\r\n @Input() @HostBinding('class') formGroupClasses: any;\r\n\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 this.cfgr = (this.hasErrorsMessage() || this.formGroupClasses === 'c-form-group--error');\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 }\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\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 }\r\n this.updateChekboxIds = false;\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\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\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\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 }\r\n this.updateChekboxIds = false;\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\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\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 = Array.isArray(this.value) ? this.value.findIndex(v => v === item.value) > -1 : this.value === item.value;\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 {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 {\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}\r\n","import {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 {\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}\r\n","import {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 {\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}\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 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 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 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 ? item.name.toUpperCase() : null)\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\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 Component,\r\n ContentChildren,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output, QueryList\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> {\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 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 {\r\n Component,\r\n Input,\r\n} from '@angular/core';\r\nimport {ITreeItem} from \"../interfaces/itree-item\";\r\nimport {ContentBaseComponent} from \"../../../../shared/components\";\r\n\r\n@Component({\r\n selector: 'desy-tree-sub',\r\n templateUrl: './tree-sub.component.html'\r\n})\r\nexport class TreeSubComponent extends ContentBaseComponent {\r\n\r\n @Input() classes: string;\r\n\r\n itemList: ITreeItem[];\r\n\r\n}\r\n","export class ITreeItem {\r\n id: string;\r\n subLevel: number;\r\n defaultId: string;\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 // acentos\r\n res = res.replace(/Á/g, 'A');\r\n res = res.replace(/É/g, 'E');\r\n res = res.replace(/Í/g, 'I');\r\n res = res.replace(/Ó/g, 'O');\r\n res = res.replace(/Ú/g, 'U');\r\n res = res.replace(/À/g, 'A');\r\n res = res.replace(/È/g, 'E');\r\n res = res.replace(/Ì/g, 'I');\r\n res = res.replace(/Ò/g, 'O');\r\n res = res.replace(/Ù/g, 'U');\r\n res = res.replace(/Ä/g, 'A');\r\n res = res.replace(/Ë/g, 'E');\r\n res = res.replace(/Ï/g, 'I');\r\n res = res.replace(/Ö/g, 'O');\r\n res = res.replace(/Ü/g, 'U');\r\n\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\r\n // signos puntuacion\r\n res = res.replace(',', '');\r\n res = res.replace('.', '');\r\n res = res.replace('\\'', '');\r\n res = res.replace('\"', '');\r\n res = res.replace(/\\,/g, '');\r\n res = res.replace(/\\./g, '');\r\n res = res.replace(/\\'/g, '');\r\n res = res.replace(/\\\"/g, '');\r\n }\r\n\r\n return res;\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {LabelComponent} from \"../../label/label.component\";\r\nimport {HintComponent} from \"../../hint/hint.component\";\r\nimport {DesyOnInputChange} from \"../../../../shared/decorators/desy-on-input-change.decorator\";\r\nimport {SearchUtils} from \"../../../../shared/utils/search-utils\";\r\nimport {AccessibilityComponent} from \"../../../../shared/components\";\r\n\r\n@Component({\r\n selector: 'desy-tree-checkbox',\r\n templateUrl: './tree-checkbox.component.html'\r\n})\r\nexport class TreeCheckboxComponent extends AccessibilityComponent implements OnInit {\r\n\r\n @ViewChild('input', { static: true }) inputElement: ElementRef;\r\n @ViewChild('contentWrapper', { static: true }) contentWrapper: ElementRef;\r\n\r\n @DesyOnInputChange('onIdChange')\r\n @Input() id: string;\r\n @Input() name: string;\r\n @Input() type: 'radio'|'checkbox'|null|undefined;\r\n @Input() classes: string;\r\n\r\n @Input() value: any;\r\n\r\n @Input() checked: boolean;\r\n @Output() checkedChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @Input() isIndeterminate: boolean;\r\n\r\n @DesyOnInputChange('setIndeterminateStatus')\r\n @Input() indeterminateChecked: boolean;\r\n @Output() indeterminateCheckedChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @Input() disabled: boolean;\r\n @Input() hasDividers: boolean;\r\n\r\n @DesyOnInputChange('onDescribedByChange')\r\n @Input() describedBy: string;\r\n @Input() hasError = false;\r\n\r\n @DesyOnInputChange('overrideLabelParams')\r\n @Input() labelComponent: LabelComponent;\r\n\r\n @DesyOnInputChange('overrideHintParams')\r\n @Input() hintComponent: HintComponent;\r\n\r\n itemDescribedBy: string;\r\n\r\n private _lastIndeterminate;\r\n private _hasInit = false;\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._hasInit = true;\r\n this.onDescribedByChange();\r\n }\r\n\r\n detectChanges(): void {\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n hasChanged(): void {\r\n if (this._hasInit) {\r\n\r\n const input = this.inputElement.nativeElement;\r\n\r\n // Se establece el cambio a visualizar en el input\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.setIndeterminateChecked(input.indeterminate);\r\n this.checkedChange.emit(input.checked);\r\n }\r\n }\r\n\r\n onIdChange(): void {\r\n this.overrideLabelParams();\r\n this.overrideHintParams();\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 setIndeterminateChecked(indeterminateChecked: boolean): void {\r\n this.indeterminateChecked = indeterminateChecked;\r\n this._lastIndeterminate = indeterminateChecked;\r\n this.indeterminateCheckedChange.emit(indeterminateChecked);\r\n this.changeDetector.detectChanges(); // Avisa al elemento input para que actualice su estado\r\n }\r\n\r\n focus(): void {\r\n this.inputElement.nativeElement.focus();\r\n }\r\n\r\n matchesText(value: string): boolean {\r\n const checkboxText = this.contentWrapper.nativeElement.textContent;\r\n return SearchUtils.containsAnyWordFrom(checkboxText, value);\r\n }\r\n\r\n preventDefault(event: KeyboardEvent): void {\r\n event.preventDefault();\r\n }\r\n\r\n getHintId(): string {\r\n return this.hintComponent ? this.hintComponent.id : '';\r\n }\r\n\r\n overrideLabelParams(): void {\r\n if (this.labelComponent) {\r\n this.labelComponent.for = this.id + '-input';\r\n if (!this.labelComponent.classes) {\r\n this.labelComponent.classes = 'block relative -top-xs -left-8 pl-8 py-xs';\r\n }\r\n this.labelComponent.detectChanges();\r\n }\r\n }\r\n\r\n overrideHintParams(): void {\r\n if (this.hintComponent) {\r\n if (!this.hintComponent.id) {\r\n this.hintComponent.id = this.id + '-item-hint';\r\n }\r\n this.hintComponent.detectChanges();\r\n }\r\n this.onDescribedByChange();\r\n }\r\n\r\n getItemDescribedBy(): string {\r\n return (this.describedBy ? this.describedBy : '') + ' ' + this.getHintId();\r\n }\r\n\r\n onDescribedByChange(): void {\r\n if (this.ariaDescribedBy) {\r\n this.itemDescribedBy = this.ariaDescribedBy;\r\n } else {\r\n this.itemDescribedBy = this.getItemDescribedBy();\r\n }\r\n }\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren, ElementRef,\r\n EventEmitter,\r\n forwardRef, HostBinding,\r\n Input,\r\n OnChanges,\r\n Output, SimpleChanges,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {DesyContentChild} from \"../../../../shared/decorators/desy-content-child.decorator\";\r\nimport {TreeSubComponent} from \"../tree-sub/tree-sub.component\";\r\nimport {ITreeItem} from \"../interfaces/itree-item\";\r\nimport {HintComponent} from \"../../hint/hint.component\";\r\nimport {LabelComponent} from \"../../label/label.component\";\r\nimport {QuitTreeItemFocusOptions} from \"../interfaces/quit-tree-item-focus-options\";\r\nimport {TreeCheckboxComponent} from \"../tree-checkbox/tree-checkbox.component\";\r\nimport {AccessibilityComponent} from \"../../../../shared/components\";\r\nimport {DesyOnInputChange} from \"../../../../shared/decorators/desy-on-input-change.decorator\";\r\nimport {SearchUtils} from \"../../../../shared/utils/search-utils\";\r\n\r\n@Component({\r\n selector: 'desy-tree-item',\r\n templateUrl: './tree-item.component.html',\r\n providers: [\r\n {\r\n provide: ITreeItem,\r\n useExisting: forwardRef(() => TreeItemComponent)\r\n }\r\n ]\r\n})\r\nexport class TreeItemComponent extends AccessibilityComponent implements OnChanges, ITreeItem {\r\n\r\n private static _treeItemKeySuffix = 0; // Sufijo estático para generar siempre claves distintas\r\n @ViewChild('hiddenWrapper') hiddenWrapper: ElementRef;\r\n\r\n @DesyOnInputChange('setDefaultIdRecursive')\r\n @Input() id: string;\r\n @Input() name: string;\r\n @Input() value: string;\r\n @Input() classes: string;\r\n @Input() active: boolean;\r\n @Input() disabled: boolean;\r\n @Input() title: string;\r\n @Input() hasDividers: boolean;\r\n @Input() isIndeterminate: boolean;\r\n\r\n @Input() checked: boolean;\r\n @Output() checkedChange: EventEmitter<any> = new EventEmitter<any>();\r\n checkedChangeForTree: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @Input() expanded: boolean;\r\n @Output() expandedChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @Input() indeterminateChecked: boolean;\r\n @Output() indeterminateCheckedChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideSubValues'})\r\n @ContentChildren(TreeSubComponent) sub: TreeSubComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(HintComponent) hint: HintComponent;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(LabelComponent) label: LabelComponent;\r\n\r\n @ViewChild(TreeCheckboxComponent) checkbox: TreeCheckboxComponent;\r\n\r\n /*\r\n * Identificador del wrapper del componente. Se utiliza para recorrer el árbol en sentido inverso y que cada item\r\n * sepa cuál es su item/árbol padre.\r\n * Esto es necesario ya que, a la hora de construir un árbol dinámico con templates,\r\n * el decorador @ContentChildren no funciona correctamente y no los detecta.\r\n * Dejo el enlace de un problema similar: https://github.com/angular/angular/issues/21751\r\n */\r\n @HostBinding('attr.desy-tree-item-key')\r\n readonly treeItemKey: string = TreeItemComponent.generateStaticItemKey();\r\n\r\n type: 'radio'|'checkbox'|null|undefined;\r\n subLevel: number; // Nivel dentro del arbol. 0 son los items a nivel de raiz.\r\n\r\n // Propiedades definidas por el componente árbol que el item puede utilizar, sobrescribir o ampliar\r\n parentName: string;\r\n defaultId;\r\n inheritedExpandedFirstLevel: boolean;\r\n inheritedDecoupleChildFromParent: boolean;\r\n inheritedDescribedBy: string;\r\n inheritedHasError: boolean;\r\n allParentsExpanded = true; // True si el elemento es visible según los elementos expandidos\r\n inheritedMatchesSearch = true; // True si el elemento es visible según los criterios de búsqueda\r\n orderInTree: number;\r\n\r\n // Evento para emitir al componente arbol cuando se pretende abandonar el foco del item\r\n quitFocus: EventEmitter<QuitTreeItemFocusOptions> = new EventEmitter<QuitTreeItemFocusOptions>();\r\n\r\n isFocus = false;\r\n isHover = false;\r\n private _matchesValidText = false; // True si el contenido del item encaja con los criterios de búsqueda y se está filtrando\r\n\r\n constructor(private changeDetector: ChangeDetectorRef, private element: ElementRef) {\r\n super();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.sub && this.sub.itemList) {\r\n this.sub.itemList.forEach(item => (item as TreeItemComponent).refreshAllParentsExpandedRecursive(this.allParentsExpanded && this.expanded));\r\n }\r\n\r\n for (const propName in changes) {\r\n if (changes.hasOwnProperty(propName)) {\r\n switch (propName) {\r\n case 'checked': {\r\n // Reasignamos el valor de checked cuando detectamos el cambio en la entrada\r\n setTimeout(() => {\r\n this.setChecked(this.checked, false, false);\r\n if (this.inheritedExpandedFirstLevel && this.checked && !this.expanded) {\r\n this.expandSub(true);\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /*\r\n * Métodos expuestos que permiten configurar al ítem de forma externa\r\n */\r\n\r\n focus(): void {\r\n this.checkbox?.focus();\r\n this.handleItemFocus(true);\r\n }\r\n\r\n setCheckedAutomaticallyDependingOnChildren(): void {\r\n if (this.sub) {\r\n this.sub.itemList.forEach(item => (item as TreeItemComponent).setCheckedAutomaticallyDependingOnChildren());\r\n if (this.areAllChildrenChecked()) {\r\n if (this.indeterminateChecked) {\r\n this.setIndeterminateChecked(false);\r\n }\r\n\r\n if (!this.checked) {\r\n this.setChecked(true, true);\r\n }\r\n } else if (this.hasChildrenCheckedOrIndeterminate()) {\r\n if (!this.indeterminateChecked) {\r\n this.setIndeterminateChecked(true);\r\n }\r\n\r\n if (this.checked) {\r\n this.setChecked(false, true);\r\n }\r\n } else {\r\n if (this.indeterminateChecked) {\r\n this.setIndeterminateChecked(false);\r\n }\r\n\r\n if (this.checked) {\r\n this.setChecked(false, true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n refreshAllParentsExpandedRecursive(value): void {\r\n this.allParentsExpanded = value;\r\n if (this.sub) {\r\n this.sub.itemList.forEach(item => (item as TreeItemComponent).refreshAllParentsExpandedRecursive(value && this.expanded));\r\n }\r\n }\r\n\r\n detectChanges(): void {\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n expandSub(value: boolean): void {\r\n this.expanded = value;\r\n if (this.sub) {\r\n this.sub.itemList.forEach(item => (item as TreeItemComponent).refreshAllParentsExpandedRecursive(this.allParentsExpanded && value));\r\n }\r\n this.expandedChange.emit(value);\r\n }\r\n\r\n /*\r\n * Gestion de eventos\r\n */\r\n\r\n handleCheckboxChange(checked: boolean): void {\r\n this.setChecked(checked, false);\r\n if (this.inheritedExpandedFirstLevel && checked && !this.expanded) {\r\n this.expandSub(true);\r\n }\r\n }\r\n\r\n handleIndeterminateCheckedChange(indeterminate: boolean): void {\r\n this.indeterminateCheckedChange.emit(indeterminate);\r\n }\r\n\r\n handleItemFocus(value, condition=true): void {\r\n if (condition) {\r\n this.isFocus = value;\r\n }\r\n }\r\n\r\n handleItemHover(value, condition=true): void {\r\n if (condition) {\r\n this.isHover = value;\r\n }\r\n }\r\n\r\n handleArrowUp(event: KeyboardEvent, condition=true): void {\r\n if (condition) {\r\n event.preventDefault();\r\n this.quitFocus.emit({\r\n nextElement: 'previous',\r\n currentItem: this\r\n });\r\n }\r\n }\r\n\r\n handleHome(event: KeyboardEvent, condition=true): void {\r\n if (condition) {\r\n event.preventDefault();\r\n this.quitFocus.emit({\r\n nextElement: 'first',\r\n currentItem: this\r\n });\r\n }\r\n }\r\n\r\n handleEnd(event: KeyboardEvent, condition=true): void {\r\n if (condition) {\r\n event.preventDefault();\r\n this.quitFocus.emit({\r\n nextElement: 'last',\r\n currentItem: this\r\n });\r\n }\r\n }\r\n\r\n handleArrowDown(event: KeyboardEvent, condition=true): void {\r\n if (condition) {\r\n event.preventDefault();\r\n this.quitFocus.emit({\r\n nextElement: 'next',\r\n currentItem: this\r\n });\r\n }\r\n }\r\n\r\n handleArrowRight(event: KeyboardEvent, condition=true): void {\r\n if (condition && this.sub && this.sub.itemList?.length > 0) {\r\n event.preventDefault();\r\n if (this.expanded) {\r\n this.quitFocus.emit({\r\n nextElement: 'firstChild',\r\n currentItem: this\r\n });\r\n } else {\r\n this.expandSub(true);\r\n }\r\n }\r\n }\r\n\r\n handleArrowLeft(event: KeyboardEvent, condition=true): void {\r\n if (condition) {\r\n event.preventDefault();\r\n if (this.expanded) {\r\n this.expandSub(false);\r\n } else if (this.subLevel > 0) {\r\n this.quitFocus.emit({\r\n nextElement: 'parent',\r\n currentItem: this\r\n });\r\n }\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Setters and getters\r\n */\r\n\r\n setChecked(checked: boolean, ignoreInTree: boolean, emitEvent = true): void {\r\n if (!this.disabled) {\r\n this.checked = checked;\r\n }\r\n\r\n if (!this.inheritedDecoupleChildFromParent && this.sub && this.sub.itemList && !this.indeterminateChecked) {\r\n this.sub.itemList.forEach(item => {\r\n (item as TreeItemComponent).setIndeterminateChecked(false);\r\n (item as TreeItemComponent).setChecked(checked, true)\r\n });\r\n }\r\n\r\n if (emitEvent) {\r\n this.checkedChange.emit(checked);\r\n }\r\n\r\n if (!ignoreInTree) {\r\n this.checkedChangeForTree.emit(checked);\r\n }\r\n }\r\n\r\n setIndeterminateChecked(indeterminate: boolean): void {\r\n if (!this.disabled) {\r\n this.indeterminateChecked = indeterminate;\r\n this.indeterminateCheckedChange.emit(indeterminate);\r\n }\r\n }\r\n\r\n setSubLevel(subLevel: number): void {\r\n this.subLevel = subLevel;\r\n if (this.sub && this.sub.itemList) {\r\n this.sub.itemList.forEach(item => (item as TreeItemComponent).setSubLevel(subLevel + 1));\r\n }\r\n }\r\n\r\n setOrderRecursively(order: number): number {\r\n this.orderInTree = order;\r\n let newOrder = order + 1;\r\n if (this.sub && this.sub.itemList) {\r\n this.sub.itemList.forEach(item => {\r\n newOrder = (item as TreeItemComponent).setOrderRecursively(newOrder);\r\n });\r\n }\r\n return newOrder;\r\n }\r\n\r\n setDefaultId(defaultId: string): void {\r\n this.defaultId = defaultId;\r\n this.setDefaultIdRecursive();\r\n }\r\n\r\n setDefaultIdRecursive(): void {\r\n if (this.sub && this.sub.itemList) {\r\n this.sub.itemList.forEach((item, index) => {\r\n (item as TreeItemComponent).setDefaultId(`sub-${this.getId()}-${index}`);\r\n });\r\n }\r\n }\r\n\r\n getId(): string {\r\n return this.id ? this.id : this.defaultId;\r\n }\r\n\r\n isHidden(): boolean {\r\n return !this.inheritedMatchesSearch && (!this.sub || this.areAllChildrenHidden());\r\n }\r\n\r\n areAllChildrenHidden(): boolean {\r\n const children = this.sub.itemList;\r\n return children.findIndex(child => !(child as TreeItemComponent).isHidden()) < 0;\r\n }\r\n\r\n areAllChildrenChecked(): boolean {\r\n const children = this.sub.itemList;\r\n return children.findIndex(child => !(child as TreeItemComponent).checked) < 0;\r\n }\r\n\r\n hasChildrenCheckedOrIndeterminate(): boolean {\r\n const children = this.sub.itemList;\r\n return children.findIndex(child => (child as TreeItemComponent).checked || (child as TreeItemComponent).indeterminateChecked) >= 0;\r\n }\r\n\r\n matchesText(value: string): boolean {\r\n let matches: boolean;\r\n if (this.allParentsExpanded && !this.isHidden()) {\r\n matches = this.checkbox?.matchesText(value);\r\n } else {\r\n const itemText = this.hiddenWrapper.nativeElement.textContent;\r\n matches = SearchUtils.containsAnyWordFrom(itemText, value);\r\n }\r\n this._matchesValidText = value ? matches : false;\r\n return matches;\r\n }\r\n\r\n getKey(): string {\r\n return this.treeItemKey;\r\n }\r\n\r\n getParentKey(): string {\r\n let parentKey: string;\r\n let parentElement = this.element.nativeElement.parentElement;\r\n while (parentElement && parentElement.tagName !== 'BODY' && parentElement.tagName !== 'DESY-TREE-ITEM' && parentElement.tagName !== 'DESY-TREE') {\r\n parentElement = parentElement.parentElement;\r\n }\r\n\r\n if (parentElement.tagName === 'BODY') {\r\n throw new Error('Parent for tree-item not found');\r\n }\r\n\r\n if (parentElement.tagName === 'DESY-TREE') {\r\n parentKey = 'root';\r\n }\r\n\r\n if (parentElement.tagName === 'DESY-TREE-ITEM') {\r\n parentKey = parentElement.getAttribute('desy-tree-item-key');\r\n }\r\n\r\n return parentKey;\r\n }\r\n\r\n isActive(): boolean {\r\n return this.active || this._matchesValidText;\r\n }\r\n\r\n /*\r\n * Métodos privados\r\n */\r\n\r\n /**\r\n * Genera una clave única para el componente\r\n * @private\r\n */\r\n private static generateStaticItemKey(): string {\r\n const key = 'tree-item-key-' + TreeItemComponent._treeItemKeySuffix;\r\n TreeItemComponent._treeItemKeySuffix++;\r\n return key;\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren, EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output, QueryList,\r\n SimpleChanges, TemplateRef, ViewChild\r\n} from '@angular/core';\r\nimport {DesyContentChild} from \"../../../shared/decorators/desy-content-child.decorator\";\r\nimport {TreeItemComponent} from \"./tree-item/tree-item.component\";\r\nimport {DesyOnInputChange} from \"../../../shared/decorators/desy-on-input-change.decorator\";\r\nimport {NG_VALUE_ACCESSOR} from \"@angular/forms\";\r\nimport {FormFieldComponent} from \"../form-field/form-field.component\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {FieldsetComponent} from \"../fieldset/fieldset.component\";\r\nimport {QuitTreeItemFocusOptions} from \"./interfaces/quit-tree-item-focus-options\";\r\nimport {SearchBarComponent} from \"../search-bar/search-bar.component\";\r\n\r\n@Component({\r\n selector: 'desy-tree',\r\n templateUrl: './tree.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TreeComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class TreeComponent extends FormFieldComponent<any[]> implements OnChanges, OnDestroy {\r\n\r\n @Input() idPrefix: string;\r\n @Input() classes: string;\r\n @Input() formGroupClasses: string;\r\n @Input() name: string;\r\n @Input() type: 'radio'|'checkbox'|null|undefined;\r\n @Input() describedBy: string;\r\n\r\n @Input() expandedFirstLevel = true;\r\n @Input() decoupleChildFromParent = false;\r\n\r\n @Input() disableDefaultSearch = false;\r\n\r\n @DesyOnInputChange('onSearchMatchValuesChange')\r\n @Input() searchMatchValues: string[];\r\n @Output() searchMatchValuesChange: EventEmitter<string[]> = new EventEmitter<string[]>();\r\n\r\n @DesyOnInputChange('configureAllItems')\r\n @ContentChildren(TreeItemComponent, { descendants: true }) allItems: QueryList<TreeItemComponent>;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideFieldsetParams'})\r\n @ContentChildren(FieldsetComponent) fieldsetComponent: FieldsetComponent;\r\n\r\n @DesyContentChild({ onSetCallbackName: 'overrideSearchBarParams'})\r\n @ContentChildren(SearchBarComponent) searchBarComponent: SearchBarComponent;\r\n\r\n @ViewChild('innerHtml', { static: true }) innerHtml: TemplateRef<any>;\r\n\r\n private rootItems: TreeItemComponent[] = [];\r\n private _itemListSubscription: Subscription;\r\n private _allItemListSubscription: Subscription;\r\n private _itemListCheckedSubscriptions: Subscription[] = [];\r\n private _itemListQuitFocusSubscriptions: Subscription[] = [];\r\n private _alreadyConfiguringItems = false;\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearSubscriptions(this._itemListCheckedSubscriptions);\r\n this.clearSubscriptions(this._itemListQuitFocusSubscriptions);\r\n this._itemListSubscription?.unsubscribe();\r\n this._allItemListSubscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.configureAllItems();\r\n }\r\n\r\n /**\r\n * Se sobrescribe el valor para actualizar los items\r\n * @Override\r\n */\r\n writeValue(value: any): void {\r\n this.value = value;\r\n this.configureAllItems(true);\r\n this.onChange(this.value);\r\n }\r\n\r\n /*\r\n * Eventos\r\n */\r\n\r\n /**\r\n * Actualiza el valor del componente al checkquearse un ítem\r\n * @param originItem ítem modificado\r\n */\r\n updateValueFromItems(originItem?: TreeItemComponent): void {\r\n\r\n // Si es radio, se desactivan el resto de items cuando se activa otro item\r\n if (this.type !== 'checkbox') {\r\n const items = this.getAllItemsInOrder();\r\n items.forEach(item => {\r\n if (item !== originItem && item.checked) {\r\n item.setChecked(false, true);\r\n }\r\n });\r\n } else if (!this.decoupleChildFromParent) {\r\n this.rootItems.forEach(item => item.setCheckedAutomaticallyDependingOnChildren());\r\n }\r\n\r\n this.value = [];\r\n const items = this.getAllItemsInOrder();\r\n items.forEach(item => {\r\n if (item.checked) {\r\n this.value.push(item.value);\r\n }\r\n });\r\n this.onChange(this.value);\r\n }\r\n\r\n /**\r\n * Gestiona cuando el foco abandona un ítem desde un evento de teclado controlado\r\n * @param options\r\n */\r\n handleItemQuitFocus(options: QuitTreeItemFocusOptions): void {\r\n if (options && options.nextElement) {\r\n const items = this.getAllItemsInOrder();\r\n const focusableItems = items.filter(item => !item.isHidden() && !item.disabled && item.allParentsExpanded);\r\n switch (options.nextElement) {\r\n case \"first\":\r\n focusableItems[0].focus();\r\n break;\r\n case \"last\":\r\n focusableItems[focusableItems.length - 1].focus();\r\n break;\r\n case \"parent\":\r\n const currentSubLevel = options.currentItem.subLevel;\r\n if (currentSubLevel > 0) {\r\n const currentItemIndex = focusableItems.findIndex(item => item === options.currentItem);\r\n const parent = focusableItems.slice(0, currentItemIndex).reverse().find(item => item.subLevel < currentSubLevel);\r\n if (parent) {\r\n parent.focus();\r\n }\r\n }\r\n break;\r\n case \"firstChild\":\r\n case \"next\":\r\n if (options.currentItem) {\r\n let currentItemIndex = focusableItems.findIndex(item => item === options.currentItem);\r\n if (currentItemIndex < focusableItems.length - 1) {\r\n focusableItems[currentItemIndex + 1].focus();\r\n }\r\n }\r\n break;\r\n case \"previous\":\r\n if (options.currentItem) {\r\n const currentItemIndex = focusableItems.findIndex(item => item === options.currentItem);\r\n if (currentItemIndex > 0) {\r\n focusableItems[currentItemIndex - 1].focus();\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Realiza la búsqueda interna de los items en el componente\r\n * @param value texto de búsqueda\r\n */\r\n onSearch(value: string): void {\r\n if (!this.disableDefaultSearch) {\r\n if (value && value.length > 0) {\r\n this.searchMatchValues = this.allItems.filter(item => item.matchesText(value)).map(item => item.value);\r\n } else {\r\n this.searchMatchValues = null;\r\n }\r\n this.searchMatchValuesChange.emit(this.searchMatchValues);\r\n }\r\n }\r\n\r\n /*\r\n * Eventos al cambiar propiedades\r\n */\r\n\r\n /**\r\n * Configura los items del árbol\r\n */\r\n configureAllItems(isValueChange = false): void {\r\n\r\n if (!this._alreadyConfiguringItems) {\r\n this._alreadyConfiguringItems = true;\r\n\r\n // Lo realizamos desde un setTimeout para que todos los inputs, values y demás vivan en paz y armonía\r\n setTimeout(() => {\r\n if (this.allItems?.length > 0) {\r\n this.clearSubscriptions(this._itemListCheckedSubscriptions);\r\n this.clearSubscriptions(this._itemListQuitFocusSubscriptions);\r\n this.allItems.forEach(item => {\r\n item.parentName = this.name;\r\n item.type = this.type;\r\n item.inheritedDescribedBy = this.getDescribedByForItems();\r\n item.inheritedExpandedFirstLevel = this.expandedFirstLevel;\r\n item.inheritedDecoupleChildFromParent = this.decoupleChildFromParent;\r\n if ((this.value && this.value.length > 0) || isValueChange) {\r\n const valueList = this.value ? this.value : [];\r\n item.setChecked(!!valueList.find(v => v === item.value), true);\r\n }\r\n item.detectChanges();\r\n\r\n const checkedSubscription = item.checkedChangeForTree.subscribe(() => this.updateValueFromItems(item));\r\n this._itemListCheckedSubscriptions.push(checkedSubscription);\r\n\r\n const quitFocusSubscription = item.quitFocus.subscribe(options => this.handleItemQuitFocus(options));\r\n this._itemListQuitFocusSubscriptions.push(quitFocusSubscription);\r\n });\r\n\r\n this.setErrorInItems(this.hasErrorMessageComponent());\r\n\r\n this.buildTree();\r\n if (!this.value) {\r\n this.updateValueFromItems();\r\n }\r\n\r\n if (this.searchMatchValues) {\r\n this.onSearchMatchValuesChange();\r\n }\r\n }\r\n\r\n if (this.allItems && !this._allItemListSubscription) {\r\n this._allItemListSubscription = this.allItems.changes.subscribe(() => this.configureAllItems());\r\n }\r\n\r\n this.changeDetector.detectChanges();\r\n this._alreadyConfiguringItems = false;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Modifica los items visibles según el filtro de búsqueda\r\n */\r\n onSearchMatchValuesChange(): void {\r\n if (this.allItems) {\r\n this.allItems.forEach(item => {\r\n item.inheritedMatchesSearch = true;\r\n });\r\n\r\n if (this.searchMatchValues !== null && this.searchMatchValues !== undefined) {\r\n this.allItems.forEach(item => {\r\n if (this.searchMatchValues.findIndex(value => item.value === value) < 0) {\r\n item.inheritedMatchesSearch = false;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n /*\r\n * Getters and setters\r\n */\r\n\r\n getIdPrefix(): string {\r\n return this.idPrefix ? this.idPrefix : this.name;\r\n }\r\n\r\n getDescribedBy(): string {\r\n let describedBy = '';\r\n if (this.describedBy) {\r\n describedBy = this.describedBy;\r\n }\r\n\r\n if (this.hasHintComponent() && this.hintComponent.id) {\r\n describedBy = describedBy + ' ' + this.hintComponent.id;\r\n }\r\n\r\n if (this.hasErrorMessageComponent() && this.errorMessageComponent.id) {\r\n describedBy = describedBy + ' ' + this.errorMessageComponent.id;\r\n }\r\n\r\n return describedBy;\r\n }\r\n\r\n /**\r\n * Devuelve el valor de describedBy que se transmitirá a los items\r\n */\r\n getDescribedByForItems(): string {\r\n let describedBy;\r\n if (this.hasFieldsetComponent()) {\r\n describedBy = this.fieldsetComponent.describedBy;\r\n } else {\r\n describedBy = this.getDescribedBy();\r\n }\r\n\r\n return describedBy;\r\n }\r\n\r\n hasFieldsetComponent(): boolean {\r\n return !!this.fieldsetComponent;\r\n }\r\n\r\n /**\r\n * Overrides super.getHintId();\r\n */\r\n getHintId(): string {\r\n return this.idPrefix ? this.idPrefix + '-hint' : this.hintComponent?.id;\r\n }\r\n\r\n /**\r\n * Overrides super.getHintId();\r\n */\r\n getErrorId(): string {\r\n return this.idPrefix ? this.idPrefix + '-error' : this.errorMessageComponent?.id;\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 = this.getDescribedBy();\r\n fieldset.detectChanges();\r\n }\r\n\r\n overrideSearchBarParams(searchbar: SearchBarComponent): void {\r\n const defaultOnChange = searchbar.onChange;\r\n const newOnChange = value => {\r\n this.onSearch(value);\r\n defaultOnChange(value);\r\n }\r\n searchbar.registerOnChange(newOnChange);\r\n }\r\n\r\n /**\r\n * Se llama desde FormField\r\n */\r\n overrideHintParams(hint): void {\r\n hint.id = this.getHintId();\r\n hint.detectChanges();\r\n }\r\n\r\n /**\r\n * Se llama desde FormField\r\n */\r\n overrideErrorMessageParams(errorMessage): void {\r\n errorMessage.id = this.getErrorId();\r\n this.setErrorInItems(this.hasErrorMessageComponent());\r\n errorMessage.detectChanges();\r\n }\r\n\r\n /**\r\n * Se llama desde FormField\r\n */\r\n onDeleteErrorMessage(errorMessage): void {\r\n this.setErrorInItems(this.hasErrorMessageComponent());\r\n }\r\n\r\n /*\r\n * Métodos privados\r\n */\r\n\r\n /**\r\n * Configura la estructura del árbol\r\n * @private\r\n */\r\n private buildTree(): void {\r\n\r\n // Se crea un mapa para tener accesibles los items por key y se borran los listados existentes\r\n const itemMap = {}\r\n this.rootItems = [];\r\n this.allItems.forEach(item => {\r\n const key = item.getKey();\r\n itemMap[key] = item;\r\n if (item.sub) {\r\n item.sub.itemList = [];\r\n }\r\n });\r\n\r\n // Se añaden los items a los listados correspondientes\r\n this.allItems.forEach(item => {\r\n const parentKey = item.getParentKey();\r\n if (parentKey === 'root') {\r\n this.rootItems.push(item);\r\n } else if (parentKey) {\r\n const sub = itemMap[parentKey].sub;\r\n if (sub) {\r\n sub.itemList.push(item);\r\n }\r\n }\r\n });\r\n\r\n // Se configuran los items desde root\r\n let order = 0;\r\n this.rootItems.forEach((item, index) => {\r\n item.setSubLevel(0);\r\n item.setDefaultId(`${this.idPrefix}-${index}`);\r\n item.refreshAllParentsExpandedRecursive(true);\r\n if (!this.decoupleChildFromParent) {\r\n item.setCheckedAutomaticallyDependingOnChildren();\r\n }\r\n order = item.setOrderRecursively(order);\r\n });\r\n }\r\n\r\n /**\r\n * Si tiene un mensaje de error, se indica a los items\r\n * @param hasError\r\n * @private\r\n */\r\n private setErrorInItems(hasError: boolean): void {\r\n if (this.allItems?.length > 0) {\r\n this.allItems.forEach(item => {\r\n item.inheritedHasError = hasError;\r\n item.detectChanges();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Limpia un listado de subscripciones\r\n * @param subscriptionList\r\n * @private\r\n */\r\n private clearSubscriptions(subscriptionList: Subscription[]): void {\r\n if (subscriptionList.length > 0) {\r\n subscriptionList.forEach(s => s.unsubscribe());\r\n subscriptionList.splice(0, subscriptionList.length)\r\n }\r\n }\r\n\r\n /**\r\n * Devuelve los items del árbol ordenados\r\n * @private\r\n */\r\n private getAllItemsInOrder(): TreeItemComponent[] {\r\n let list = [];\r\n if (this.allItems) {\r\n list = this.allItems.toArray().sort((a, b) => a.orderInTree > b.orderInTree ? 1 : -1)\r\n }\r\n return list\r\n }\r\n}\r\n","import { Directive, Input, OnChanges, 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(): 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 }\r\n }\r\n\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n OnInit,\r\n TemplateRef,\r\n ViewChild,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport {TreeItemComponent} from \"../tree-item/tree-item.component\";\r\n\r\n@Component({\r\n selector: 'desy-tree-items-generator',\r\n templateUrl: './tree-items-generator.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TreeItemsGeneratorComponent implements OnInit {\r\n\r\n @ViewChild('content', { static: true }) content: TemplateRef<any>;\r\n\r\n @Input() items: any[];\r\n @Input() itemTemplate: TemplateRef<TreeItemComponent>;\r\n\r\n constructor(private viewContainerRef: ViewContainerRef) { }\r\n\r\n ngOnInit(): void {\r\n this.viewContainerRef.createEmbeddedView(this.content);\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 Output,\r\n QueryList,\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 {\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 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 }\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 \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 if (dialog) {\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\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\r\n return itemList;\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-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\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-button',\r\n ariaModal: 'true',\r\n ariaLabelledBy: 'header-offcanvas-button-text',\r\n role: 'dialog'\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 const elementToFocus = document.getElementById('header-offcanvas-button');\r\n elementToFocus?.focus()\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","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 }\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 Output,\r\n QueryList\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 {\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 getItemList(): NavItemData[] {\r\n const itemList = this.itemComponentList && this.itemComponentList.length > 0 ? this.itemComponentList.toArray() : this.items;\r\n \r\n return itemList;\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 movePrevious(event: KeyboardEvent, currentIndex: number): void {\r\n event.preventDefault();\r\n const items = this.getItemList();\r\n let nextIndex = currentIndex - 1;\r\n while (nextIndex >= 0 && !this.isFocusableItem(items[nextIndex])) {\r\n nextIndex--;\r\n }\r\n\r\n if (nextIndex < items.length) {\r\n const itemElem = document.getElementById(this.getItemId(items[nextIndex], nextIndex));\r\n if (itemElem) {\r\n itemElem.focus();\r\n }\r\n }\r\n }\r\n\r\n moveNext(event: KeyboardEvent, currentIndex: number): void {\r\n event.preventDefault();\r\n const items = this.getItemList();\r\n let nextIndex = currentIndex + 1;\r\n while (nextIndex < items.length && !this.isFocusableItem(items[nextIndex])) {\r\n nextIndex++;\r\n }\r\n\r\n if (nextIndex < items.length) {\r\n const itemElem = document.getElementById(this.getItemId(items[nextIndex], nextIndex));\r\n if (itemElem) {\r\n itemElem.focus();\r\n }\r\n }\r\n }\r\n\r\n simulateClick(event: KeyboardEvent, item: NavItemData, index: number): void {\r\n event.preventDefault();\r\n const element = document.getElementById(this.getItemId(item, index));\r\n element?.click();\r\n }\r\n\r\n\r\n private isFocusableItem(item: NavItemData): boolean {\r\n return !item.active && !item.disabled;\r\n }\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\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\nimport {ContentComponent} from \"../../../../desy-commons/components/content/content.component\";\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 @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\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","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}\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 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 ? this.errorList : null;\r\n }\r\n\r\n const lastLength = this.lastErrorItemCount;\r\n this.lastErrorItemCount = errorItemList ? errorItemList.length : null;\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 {\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 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 return itemList;\r\n }\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 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 + '-0';\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 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 \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\r\n\r\n const items = this.getItems();\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\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 {\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","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 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}\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\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\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, QueryList, 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 {\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 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 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}\r\n","import { Component, Input } from '@angular/core';\r\nimport { ContentBaseComponent } from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-accordion-history-item-hide-button',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class AccordionHistoryItemHideButtonComponent extends ContentBaseComponent {\r\n\r\n @Input() classes: string;\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-accordion-history-item-show-button',\r\n template: '<ng-template #contentTemplate><ng-content></ng-content></ng-template>'\r\n})\r\nexport class AccordionHistoryItemShowButtonComponent extends ContentBaseComponent {\r\n\r\n @Input() classes: string;\r\n}\r\n","import { Component, ContentChildren, Input } from '@angular/core';\r\nimport { DesyContentChild } from '../../../../shared/decorators/desy-content-child.decorator';\r\nimport { AccordionItemComponent } from '../../accordion/accordion-item/accordion-item.component';\r\nimport { AccordionHistoryItemHideButtonComponent } from '../accordion-history-item-hide-button/accordion-history-item-hide-button.component';\r\nimport { AccordionHistoryItemShowButtonComponent } from '../accordion-history-item-show-button/accordion-history-item-show-button.component';\r\n\r\n@Component({\r\n selector: 'desy-accordion-history-item',\r\n template: '',\r\n})\r\nexport class AccordionHistoryItemComponent extends AccordionItemComponent {\r\n\r\n @Input() status: 'current' | 'pending' | 'muted' | 'currentmuted' | any;\r\n @Input() disabled = false;\r\n\r\n @DesyContentChild()\r\n @ContentChildren(AccordionHistoryItemShowButtonComponent) showButton: AccordionHistoryItemShowButtonComponent;\r\n \r\n @DesyContentChild()\r\n @ContentChildren(AccordionHistoryItemHideButtonComponent) hideButton: AccordionHistoryItemHideButtonComponent;\r\n}\r\n","import { Component, ContentChildren, QueryList } from '@angular/core';\r\nimport { AccordionComponent } from '../accordion/accordion.component';\r\nimport { AccordionHistoryItemComponent } from './accordion-history-item/accordion-history-item.component';\r\n\r\n@Component({\r\n selector: 'desy-accordion-history',\r\n templateUrl: './accordion-history.component.html'\r\n})\r\nexport class AccordionHistoryComponent extends AccordionComponent {\r\n\r\n // Sobreescribe el tipo del listado de items\r\n @ContentChildren(AccordionHistoryItemComponent) itemComponentList: QueryList<AccordionHistoryItemComponent>;\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 } 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 {\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}\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\r\n getItems(): DescriptionItemData[]|DescriptionItemComponent[] {\r\n const items = (this.itemComponents.length > 0) ? this.itemComponents.toArray() : this.items;\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 } from '@angular/core';\r\nimport { AccessibilityAndContentRequiredComponent } 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 this.toggleOpen();\r\n }\r\n\r\n ngOnChanges(): void {\r\n this.toggleOpen();\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 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 {\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 constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n super();\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.changeDetectorRef.detectChanges();\r\n }\r\n\r\n getTitle(): TitleData {\r\n return this.titleComponent ? this.titleComponent : (this.title ? this.title : null);\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-media-object-figure',\r\n templateUrl: './media-object-figure.component.html'\r\n})\r\nexport class MediaObjectFigureComponent extends ContentBaseComponent {\r\n\r\n}\r\n","import { AccessibilityComponent } from '../../../shared/components';\r\nimport { Component, Input, TemplateRef, ContentChildren, ElementRef, ViewChild } from '@angular/core';\r\nimport { ContentComponent } from '../../../desy-commons/components/content/content.component';\r\nimport { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';\r\nimport { MediaObjectFigureComponent } from './media-object-figure/media-object-figure.component';\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 {\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 @DesyContentChild()\r\n @ContentChildren(ContentComponent) contentComponent: ContentComponent;\r\n \r\n @DesyContentChild()\r\n @ContentChildren(MediaObjectFigureComponent) mediaObjectFigureComponent: MediaObjectFigureComponent;\r\n\r\n @ViewChild('mediaFigureContent', { read: ElementRef, static: true }) mediaFigureContent: ElementRef;\r\n\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { 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 {\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 && 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","import { Component, ContentChildren, Input, QueryList, 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 {\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 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 QueryList,\r\n 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} 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 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 ngAfterViewInit(): void {\r\n if(this.items){\r\n const item = this.getItems();\r\n this.selectTab(item.findIndex(value => !value.disabled));\r\n }\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 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\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 if (alert) {\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\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&nbsp;</span>';\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\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\">:&nbsp;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 {\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 { 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 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 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\nimport { TreeComponent } from './components/tree/tree.component';\r\nimport { TreeCheckboxComponent } from './components/tree/tree-checkbox/tree-checkbox.component';\r\nimport { TreeSubComponent } from './components/tree/tree-sub/tree-sub.component';\r\nimport { TreeItemComponent } from './components/tree/tree-item/tree-item.component';\r\nimport { TreeItemsGeneratorComponent } from './components/tree/tree-items-generator/tree-items-generator.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 TreeComponent,\r\n TreeSubComponent,\r\n TreeItemComponent,\r\n TreeCheckboxComponent,\r\n TreeItemsGeneratorComponent,\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 TreeComponent,\r\n TreeSubComponent,\r\n TreeItemComponent,\r\n TreeItemsGeneratorComponent,\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 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 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 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\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 { AccordionHeaderComponent } from './components/accordion/accordion-header/accordion-header.component';\r\nimport { AccordionHistoryComponent } from './components/accordion-history/accordion-history.component';\r\nimport { AccordionHistoryItemComponent } from './components/accordion-history/accordion-history-item/accordion-history-item.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 { PanelComponent } from './components/tabs/panel/panel.component';\r\nimport { TabItemComponent } from './components/tabs/tab-item/tab-item.component';\r\nimport { MediaObjectFigureComponent } from './components/media-object/media-object-figure/media-object-figure.component';\r\nimport { AccordionHistoryItemShowButtonComponent } from './components/accordion-history/accordion-history-item-show-button/accordion-history-item-show-button.component';\r\nimport { AccordionHistoryItemHideButtonComponent } from './components/accordion-history/accordion-history-item-hide-button/accordion-history-item-hide-button.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AlertComponent,\r\n AccordionComponent,\r\n AccordionHeaderComponent,\r\n AccordionHistoryComponent,\r\n AccordionHistoryItemComponent,\r\n AccordionHistoryItemShowButtonComponent,\r\n AccordionHistoryItemHideButtonComponent,\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 MediaObjectFigureComponent,\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 AccordionHistoryComponent,\r\n AccordionHistoryItemComponent,\r\n AccordionHistoryItemShowButtonComponent,\r\n AccordionHistoryItemHideButtonComponent,\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 MediaObjectFigureComponent,\r\n ]\r\n})\r\nexport class DesyViewsModule { }\r\n","import { Component, Input, ViewChild } from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-toggle-off-state',\r\n templateUrl: './toggle-off-state.component.html'\r\n})\r\nexport class ToggleOffStateComponent extends AccessibilityComponent {\r\n \r\n @ViewChild('contentTemplateOffState', { static: true }) content;\r\n\r\n @Input() classes: string;\r\n\r\n}","import { Component, Input, ViewChild } from '@angular/core';\r\nimport {AccessibilityComponent} from '../../../../shared/components';\r\n\r\n@Component({\r\n selector: 'desy-toggle-on-state',\r\n templateUrl: './toggle-on-state.component.html'\r\n})\r\nexport class ToggleOnStateComponent extends AccessibilityComponent {\r\n\r\n @ViewChild('contentTemplateOnState', { static: true }) content;\r\n\r\n @Input() classes: string;\r\n\r\n}\r\n","import { Component, ContentChildren, EventEmitter, Input, Output } from '@angular/core';\r\nimport { AccessibilityComponent } from '../../../shared/components';\r\nimport { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';\r\nimport { ToggleOffStateComponent } from './toggle-off-state/toggle-off-state.component';\r\nimport { ToggleOnStateComponent } from './toggle-on-state/toggle-on-state.component';\r\n\r\n@Component({\r\n selector: 'desy-toggle',\r\n templateUrl: './toggle.component.html'\r\n})\r\nexport class ToggleComponent extends AccessibilityComponent {\r\n \r\n @Input() id: string;\r\n @Input() isSwitch: boolean;\r\n @Input() pressed: boolean;\r\n @Input() classes: string;\r\n \r\n @Output() clickEvent = new EventEmitter();\r\n @Output() pressedChange: EventEmitter<any> = new EventEmitter<any>();\r\n \r\n @DesyContentChild()\r\n @ContentChildren(ToggleOnStateComponent) contentTemplateOnState: ToggleOnStateComponent;\r\n \r\n @DesyContentChild()\r\n @ContentChildren(ToggleOffStateComponent) contentTemplateOffState: ToggleOffStateComponent;\r\n\r\n onClick(event: any): void {\r\n this.pressed = !this.pressed;\r\n this.pressedChange.emit(this.pressed);\r\n this.clickEvent.emit(event);\r\n }\r\n\r\n}\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\nimport { ToggleComponent } from './components/toggle/toggle.component';\r\nimport { ToggleOnStateComponent } from './components/toggle/toggle-on-state/toggle-on-state.component';\r\nimport { ToggleOffStateComponent } from './components/toggle/toggle-off-state/toggle-off-state.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 ToggleComponent,\r\n ToggleOnStateComponent,\r\n ToggleOffStateComponent\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 ToggleComponent,\r\n ToggleOnStateComponent,\r\n ToggleOffStateComponent\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"]}