@ifsworld/granite-components 14.2.3 → 15.0.0-beta.1

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 (164) hide show
  1. package/date-picker/lib/date-picker-base.d.ts +3 -3
  2. package/date-picker/lib/date-picker.module.d.ts +2 -2
  3. package/fesm2022/ifsworld-granite-components-carousel.mjs +9 -9
  4. package/fesm2022/ifsworld-granite-components-carousel.mjs.map +1 -1
  5. package/fesm2022/ifsworld-granite-components-date-picker.mjs +34 -30
  6. package/fesm2022/ifsworld-granite-components-date-picker.mjs.map +1 -1
  7. package/fesm2022/ifsworld-granite-components-file-upload.mjs +13 -12
  8. package/fesm2022/ifsworld-granite-components-file-upload.mjs.map +1 -1
  9. package/fesm2022/ifsworld-granite-components-table.mjs +32 -29
  10. package/fesm2022/ifsworld-granite-components-table.mjs.map +1 -1
  11. package/fesm2022/ifsworld-granite-components-tooltip.mjs +16 -15
  12. package/fesm2022/ifsworld-granite-components-tooltip.mjs.map +1 -1
  13. package/fesm2022/ifsworld-granite-components.mjs +340 -322
  14. package/fesm2022/ifsworld-granite-components.mjs.map +1 -1
  15. package/lib/contacts/contacts-trigger/contacts-trigger-data.d.ts +1 -1
  16. package/lib/core/overlay-base.d.ts +1 -1
  17. package/lib/core/radio-checkbox-base.d.ts +1 -1
  18. package/lib/menu/menu-base.d.ts +1 -1
  19. package/lib/progress-bar/progress-bar-legend-base.d.ts +1 -1
  20. package/package.json +9 -21
  21. package/src/lib/core/style/_mixins.scss +16 -11
  22. package/src/lib/core/style/_range-functions.scss +6 -4
  23. package/src/lib/core/style/_z-index.scss +6 -4
  24. package/table/lib/cell/cell.d.ts +1 -1
  25. package/esm2022/carousel/ifsworld-granite-components-carousel.mjs +0 -5
  26. package/esm2022/carousel/index.mjs +0 -3
  27. package/esm2022/carousel/lib/carousel.component.mjs +0 -156
  28. package/esm2022/carousel/lib/carousel.module.mjs +0 -31
  29. package/esm2022/date-picker/ifsworld-granite-components-date-picker.mjs +0 -5
  30. package/esm2022/date-picker/index.mjs +0 -5
  31. package/esm2022/date-picker/lib/date-picker-base.mjs +0 -53
  32. package/esm2022/date-picker/lib/date-picker-trigger-for.directive.mjs +0 -228
  33. package/esm2022/date-picker/lib/date-picker.component.mjs +0 -30
  34. package/esm2022/date-picker/lib/date-picker.module.mjs +0 -58
  35. package/esm2022/date-picker/lib/date-range-picker.component.mjs +0 -46
  36. package/esm2022/file-upload/ifsworld-granite-components-file-upload.mjs +0 -5
  37. package/esm2022/file-upload/index.mjs +0 -3
  38. package/esm2022/file-upload/lib/directives/file-drag-and-drop.directive.mjs +0 -102
  39. package/esm2022/file-upload/lib/file-upload.component.mjs +0 -182
  40. package/esm2022/file-upload/lib/file-upload.constants.mjs +0 -45
  41. package/esm2022/file-upload/lib/file-upload.module.mjs +0 -32
  42. package/esm2022/file-upload/lib/file-upload.utils.mjs +0 -13
  43. package/esm2022/ifsworld-granite-components.mjs +0 -5
  44. package/esm2022/index.mjs +0 -90
  45. package/esm2022/lib/arrange-grid/arrange-grid-item.component.mjs +0 -44
  46. package/esm2022/lib/arrange-grid/arrange-grid.component.mjs +0 -125
  47. package/esm2022/lib/arrange-grid/arrange-grid.module.mjs +0 -19
  48. package/esm2022/lib/avatar/avatar-default-status/avatar-default-status.component.mjs +0 -36
  49. package/esm2022/lib/avatar/avatar.component.mjs +0 -68
  50. package/esm2022/lib/avatar/avatar.component.public-types.mjs +0 -7
  51. package/esm2022/lib/avatar/avatar.module.mjs +0 -37
  52. package/esm2022/lib/avatar/custom-avatar-status.directive.mjs +0 -18
  53. package/esm2022/lib/avatar/empty-avatar/empty-avatar.component.mjs +0 -37
  54. package/esm2022/lib/badge/badge.component.mjs +0 -39
  55. package/esm2022/lib/badge/badge.module.mjs +0 -18
  56. package/esm2022/lib/badge/testing/badge.harness.mjs +0 -25
  57. package/esm2022/lib/button/button.component.mjs +0 -87
  58. package/esm2022/lib/button/button.module.mjs +0 -16
  59. package/esm2022/lib/card-list/card/card-avatar.component.mjs +0 -11
  60. package/esm2022/lib/card-list/card/card-content/card-actions.component.mjs +0 -11
  61. package/esm2022/lib/card-list/card/card-content/card-body.component.mjs +0 -11
  62. package/esm2022/lib/card-list/card/card-content/card-content.component.mjs +0 -11
  63. package/esm2022/lib/card-list/card/card-content/card-footer.component.mjs +0 -11
  64. package/esm2022/lib/card-list/card/card-content/card-header-subtitle.component.mjs +0 -11
  65. package/esm2022/lib/card-list/card/card-content/card-header-title.component.mjs +0 -11
  66. package/esm2022/lib/card-list/card/card-content/card-header.component.mjs +0 -11
  67. package/esm2022/lib/card-list/card/card.component.mjs +0 -11
  68. package/esm2022/lib/card-list/card-list.component.mjs +0 -24
  69. package/esm2022/lib/card-list/card-list.module.mjs +0 -68
  70. package/esm2022/lib/checkbox/checkbox-group.component.mjs +0 -17
  71. package/esm2022/lib/checkbox/checkbox.component.mjs +0 -99
  72. package/esm2022/lib/checkbox/checkbox.module.mjs +0 -17
  73. package/esm2022/lib/chips/chip-input.mjs +0 -195
  74. package/esm2022/lib/chips/chip-list.component.mjs +0 -567
  75. package/esm2022/lib/chips/chip.component.mjs +0 -287
  76. package/esm2022/lib/chips/chips.module.mjs +0 -31
  77. package/esm2022/lib/collapsible-group/collapsible-group-body.directive.mjs +0 -17
  78. package/esm2022/lib/collapsible-group/collapsible-group-header.directive.mjs +0 -17
  79. package/esm2022/lib/collapsible-group/collapsible-group.component.mjs +0 -46
  80. package/esm2022/lib/collapsible-group/collapsible-group.module.mjs +0 -33
  81. package/esm2022/lib/contacts/contact-item/contact-item.component.mjs +0 -27
  82. package/esm2022/lib/contacts/contact-item-default-status/contact-item-default-status.component.mjs +0 -20
  83. package/esm2022/lib/contacts/contact-item-title/contact-item-title.component.mjs +0 -15
  84. package/esm2022/lib/contacts/contacts-profile/contacts-profile.component.mjs +0 -18
  85. package/esm2022/lib/contacts/contacts-trigger/contacts-trigger-data.mjs +0 -24
  86. package/esm2022/lib/contacts/contacts-trigger/contacts-trigger-for.directive.mjs +0 -231
  87. package/esm2022/lib/contacts/contacts-types/contacts.component.private-types.mjs +0 -2
  88. package/esm2022/lib/contacts/contacts-types/contacts.component.public-types.mjs +0 -9
  89. package/esm2022/lib/contacts/contacts.component.mjs +0 -92
  90. package/esm2022/lib/contacts/contacts.module.mjs +0 -53
  91. package/esm2022/lib/contacts/custom-profile.directive.mjs +0 -16
  92. package/esm2022/lib/contacts/custom-status.directive.mjs +0 -18
  93. package/esm2022/lib/core/animation.mjs +0 -34
  94. package/esm2022/lib/core/client-environment.mjs +0 -20
  95. package/esm2022/lib/core/common-behaviors/disabled.mjs +0 -27
  96. package/esm2022/lib/core/core.module.mjs +0 -44
  97. package/esm2022/lib/core/devices/client-input-desktop.directive.mjs +0 -29
  98. package/esm2022/lib/core/devices/client-input-touch.directive.mjs +0 -29
  99. package/esm2022/lib/core/devices/client-output-desktop.directive.mjs +0 -29
  100. package/esm2022/lib/core/devices/client-output-touch.directive.mjs +0 -29
  101. package/esm2022/lib/core/hide-on-overflow.directive.mjs +0 -83
  102. package/esm2022/lib/core/overlay-base.mjs +0 -18
  103. package/esm2022/lib/core/overlay-position-config.mjs +0 -2
  104. package/esm2022/lib/core/overlay-trigger-for-base.directive.mjs +0 -121
  105. package/esm2022/lib/core/overlay.service.mjs +0 -90
  106. package/esm2022/lib/core/pipes/pure-pipes.module.mjs +0 -16
  107. package/esm2022/lib/core/pipes/title.pipe.mjs +0 -21
  108. package/esm2022/lib/core/radio-checkbox-base.mjs +0 -19
  109. package/esm2022/lib/core/services/names-utils-service.mjs +0 -51
  110. package/esm2022/lib/core/theme.library.mjs +0 -59
  111. package/esm2022/lib/core/types.mjs +0 -2
  112. package/esm2022/lib/grid/grid.component.mjs +0 -128
  113. package/esm2022/lib/grid/grid.module.mjs +0 -18
  114. package/esm2022/lib/icon/icon.component.mjs +0 -43
  115. package/esm2022/lib/icon/icon.module.mjs +0 -16
  116. package/esm2022/lib/input-field/input-field.component.mjs +0 -167
  117. package/esm2022/lib/input-field/input-field.module.mjs +0 -20
  118. package/esm2022/lib/label/label.component.mjs +0 -31
  119. package/esm2022/lib/label/label.module.mjs +0 -18
  120. package/esm2022/lib/menu/divider.directive.mjs +0 -23
  121. package/esm2022/lib/menu/menu-base.mjs +0 -354
  122. package/esm2022/lib/menu/menu-desktop-animations.mjs +0 -23
  123. package/esm2022/lib/menu/menu-errors.mjs +0 -37
  124. package/esm2022/lib/menu/menu-item.component.mjs +0 -89
  125. package/esm2022/lib/menu/menu-panel.mjs +0 -7
  126. package/esm2022/lib/menu/menu-positions.mjs +0 -9
  127. package/esm2022/lib/menu/menu-touch-animations.mjs +0 -137
  128. package/esm2022/lib/menu/menu-touch-close.component.mjs +0 -13
  129. package/esm2022/lib/menu/menu-touch-title.component.mjs +0 -59
  130. package/esm2022/lib/menu/menu-trigger-for.directive.mjs +0 -738
  131. package/esm2022/lib/menu/menu.component.mjs +0 -30
  132. package/esm2022/lib/menu/menu.module.mjs +0 -55
  133. package/esm2022/lib/menu/testing/menu.harness.mjs +0 -109
  134. package/esm2022/lib/menu/title.directive.mjs +0 -17
  135. package/esm2022/lib/progress-bar/progress-bar-legend/progress-bar-legend.component.mjs +0 -19
  136. package/esm2022/lib/progress-bar/progress-bar-legend-base.mjs +0 -17
  137. package/esm2022/lib/progress-bar/progress-bar-legend-trigger-for.directive.mjs +0 -54
  138. package/esm2022/lib/progress-bar/progress-bar.component.mjs +0 -92
  139. package/esm2022/lib/progress-bar/progress-bar.model.mjs +0 -2
  140. package/esm2022/lib/progress-bar/progress-bar.module.mjs +0 -44
  141. package/esm2022/lib/radio-button/radio-button.component.mjs +0 -119
  142. package/esm2022/lib/radio-button/radio-button.module.mjs +0 -17
  143. package/esm2022/lib/radio-button/radio-group.component.mjs +0 -17
  144. package/esm2022/lib/toggle-switch/toggle-switch.component.mjs +0 -100
  145. package/esm2022/lib/toggle-switch/toggle-switch.module.mjs +0 -16
  146. package/esm2022/table/ifsworld-granite-components-table.mjs +0 -5
  147. package/esm2022/table/index.mjs +0 -5
  148. package/esm2022/table/lib/cell/cell-align/cell-align-classes.directive.mjs +0 -26
  149. package/esm2022/table/lib/cell/cell.mjs +0 -15
  150. package/esm2022/table/lib/cell/table-data-cell.component.mjs +0 -25
  151. package/esm2022/table/lib/cell/table-header-cell.component.mjs +0 -14
  152. package/esm2022/table/lib/column/table-column.directive.mjs +0 -33
  153. package/esm2022/table/lib/column-size/column-size.directive.mjs +0 -34
  154. package/esm2022/table/lib/table-constants.library.mjs +0 -7
  155. package/esm2022/table/lib/table.component.mjs +0 -62
  156. package/esm2022/table/lib/table.model.mjs +0 -2
  157. package/esm2022/table/lib/table.module.mjs +0 -38
  158. package/esm2022/tooltip/ifsworld-granite-components-tooltip.mjs +0 -5
  159. package/esm2022/tooltip/index.mjs +0 -4
  160. package/esm2022/tooltip/lib/Services/granite-tooltip.service.mjs +0 -28
  161. package/esm2022/tooltip/lib/tooltip-constants.library.mjs +0 -4
  162. package/esm2022/tooltip/lib/tooltip-trigger-for.directive.mjs +0 -147
  163. package/esm2022/tooltip/lib/tooltip.component.mjs +0 -14
  164. package/esm2022/tooltip/lib/tooltip.module.mjs +0 -19
@@ -1 +1 @@
1
- {"version":3,"file":"ifsworld-granite-components.mjs","sources":["../../../../libs/granite-components/src/lib/arrange-grid/arrange-grid-item.component.ts","../../../../libs/granite-components/src/lib/arrange-grid/arrange-grid.component.ts","../../../../libs/granite-components/src/lib/arrange-grid/arrange-grid.component.html","../../../../libs/granite-components/src/lib/arrange-grid/arrange-grid.module.ts","../../../../libs/granite-components/src/lib/grid/grid.component.ts","../../../../libs/granite-components/src/lib/grid/grid.module.ts","../../../../libs/granite-components/src/lib/core/theme.library.ts","../../../../libs/granite-components/src/lib/badge/badge.component.ts","../../../../libs/granite-components/src/lib/badge/badge.component.html","../../../../libs/granite-components/src/lib/badge/badge.module.ts","../../../../libs/granite-components/src/lib/badge/testing/badge.harness.ts","../../../../libs/granite-components/src/lib/core/animation.ts","../../../../libs/granite-components/src/lib/menu/menu-desktop-animations.ts","../../../../libs/granite-components/src/lib/menu/menu-touch-animations.ts","../../../../libs/granite-components/src/lib/menu/menu-panel.ts","../../../../libs/granite-components/src/lib/menu/menu-errors.ts","../../../../libs/granite-components/src/lib/icon/icon.component.ts","../../../../libs/granite-components/src/lib/menu/menu-item.component.ts","../../../../libs/granite-components/src/lib/menu/menu-base.ts","../../../../libs/granite-components/src/lib/menu/menu-touch-close.component.ts","../../../../libs/granite-components/src/lib/menu/menu-touch-title.component.ts","../../../../libs/granite-components/src/lib/menu/menu.component.ts","../../../../libs/granite-components/src/lib/menu/menu.component.html","../../../../libs/granite-components/src/lib/core/client-environment.ts","../../../../libs/granite-components/src/lib/menu/menu-trigger-for.directive.ts","../../../../libs/granite-components/src/lib/menu/divider.directive.ts","../../../../libs/granite-components/src/lib/icon/icon.module.ts","../../../../libs/granite-components/src/lib/menu/title.directive.ts","../../../../libs/granite-components/src/lib/menu/menu.module.ts","../../../../libs/granite-components/src/lib/menu/testing/menu.harness.ts","../../../../libs/granite-components/src/lib/toggle-switch/toggle-switch.component.ts","../../../../libs/granite-components/src/lib/toggle-switch/toggle-switch.component.html","../../../../libs/granite-components/src/lib/toggle-switch/toggle-switch.module.ts","../../../../libs/granite-components/src/lib/radio-button/radio-button.component.ts","../../../../libs/granite-components/src/lib/radio-button/radio-button.component.html","../../../../libs/granite-components/src/lib/core/radio-checkbox-base.ts","../../../../libs/granite-components/src/lib/radio-button/radio-group.component.ts","../../../../libs/granite-components/src/lib/radio-button/radio-button.module.ts","../../../../libs/granite-components/src/lib/checkbox/checkbox.component.ts","../../../../libs/granite-components/src/lib/checkbox/checkbox.component.html","../../../../libs/granite-components/src/lib/checkbox/checkbox-group.component.ts","../../../../libs/granite-components/src/lib/checkbox/checkbox.module.ts","../../../../libs/granite-components/src/lib/core/common-behaviors/disabled.ts","../../../../libs/granite-components/src/lib/button/button.component.ts","../../../../libs/granite-components/src/lib/button/button.module.ts","../../../../libs/granite-components/src/lib/input-field/input-field.component.ts","../../../../libs/granite-components/src/lib/input-field/input-field.component.html","../../../../libs/granite-components/src/lib/input-field/input-field.module.ts","../../../../libs/granite-components/src/lib/chips/chip.component.ts","../../../../libs/granite-components/src/lib/chips/chip.component.html","../../../../libs/granite-components/src/lib/chips/chip-list.component.ts","../../../../libs/granite-components/src/lib/chips/chip-input.ts","../../../../libs/granite-components/src/lib/chips/chips.module.ts","../../../../libs/granite-components/src/lib/label/label.component.ts","../../../../libs/granite-components/src/lib/label/label.component.html","../../../../libs/granite-components/src/lib/label/label.module.ts","../../../../libs/granite-components/src/lib/contacts/contacts-trigger/contacts-trigger-data.ts","../../../../libs/granite-components/src/lib/contacts/custom-status.directive.ts","../../../../libs/granite-components/src/lib/contacts/custom-profile.directive.ts","../../../../libs/granite-components/src/lib/core/services/names-utils-service.ts","../../../../libs/granite-components/src/lib/avatar/custom-avatar-status.directive.ts","../../../../libs/granite-components/src/lib/avatar/avatar.component.public-types.ts","../../../../libs/granite-components/src/lib/avatar/avatar-default-status/avatar-default-status.component.ts","../../../../libs/granite-components/src/lib/avatar/empty-avatar/empty-avatar.component.ts","../../../../libs/granite-components/src/lib/avatar/avatar.component.ts","../../../../libs/granite-components/src/lib/avatar/avatar.component.html","../../../../libs/granite-components/src/lib/contacts/contacts-profile/contacts-profile.component.ts","../../../../libs/granite-components/src/lib/contacts/contacts-profile/contacts-profile.component.html","../../../../libs/granite-components/src/lib/contacts/contacts-types/contacts.component.public-types.ts","../../../../libs/granite-components/src/lib/contacts/contact-item-default-status/contact-item-default-status.component.ts","../../../../libs/granite-components/src/lib/contacts/contact-item-default-status/contact-item-default-status.component.html","../../../../libs/granite-components/src/lib/contacts/contact-item-title/contact-item-title.component.ts","../../../../libs/granite-components/src/lib/contacts/contact-item-title/contact-item-title.component.html","../../../../libs/granite-components/src/lib/contacts/contact-item/contact-item.component.ts","../../../../libs/granite-components/src/lib/contacts/contact-item/contact-item.component.html","../../../../libs/granite-components/src/lib/contacts/contacts.component.ts","../../../../libs/granite-components/src/lib/contacts/contacts.component.html","../../../../libs/granite-components/src/lib/contacts/contacts-trigger/contacts-trigger-for.directive.ts","../../../../libs/granite-components/src/lib/avatar/avatar.module.ts","../../../../libs/granite-components/src/lib/contacts/contacts.module.ts","../../../../libs/granite-components/src/lib/core/hide-on-overflow.directive.ts","../../../../libs/granite-components/src/lib/core/overlay-base.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar-legend-base.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar-legend/progress-bar-legend.component.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar-legend/progress-bar-legend.component.html","../../../../libs/granite-components/src/lib/core/overlay.service.ts","../../../../libs/granite-components/src/lib/core/overlay-trigger-for-base.directive.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar-legend-trigger-for.directive.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar.component.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar.component.html","../../../../libs/granite-components/src/lib/core/devices/client-output-desktop.directive.ts","../../../../libs/granite-components/src/lib/core/devices/client-output-touch.directive.ts","../../../../libs/granite-components/src/lib/core/devices/client-input-desktop.directive.ts","../../../../libs/granite-components/src/lib/core/devices/client-input-touch.directive.ts","../../../../libs/granite-components/src/lib/core/core.module.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar.module.ts","../../../../libs/granite-components/src/lib/core/pipes/title.pipe.ts","../../../../libs/granite-components/src/lib/core/pipes/pure-pipes.module.ts","../../../../libs/granite-components/src/lib/card-list/card/card.component.ts","../../../../libs/granite-components/src/lib/card-list/card-list.component.ts","../../../../libs/granite-components/src/lib/card-list/card-list.component.html","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-content.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-header.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-header.component.html","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-actions.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-body.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-footer.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-avatar.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-header-title.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-header-subtitle.component.ts","../../../../libs/granite-components/src/lib/card-list/card-list.module.ts","../../../../libs/granite-components/src/lib/collapsible-group/collapsible-group-body.directive.ts","../../../../libs/granite-components/src/lib/collapsible-group/collapsible-group-header.directive.ts","../../../../libs/granite-components/src/lib/collapsible-group/collapsible-group.component.ts","../../../../libs/granite-components/src/lib/collapsible-group/collapsible-group.component.html","../../../../libs/granite-components/src/lib/collapsible-group/collapsible-group.module.ts","../../../../libs/granite-components/src/index.ts","../../../../libs/granite-components/src/ifsworld-granite-components.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, ElementRef } from '@angular/core';\n\n@Component({\n selector: 'granite-arrange-grid-item',\n template: '<ng-content></ng-content>',\n styleUrls: ['arrange-grid-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteArrangeGridItemComponent {\n /**\n * Column span to render.\n * For use in template only. Do not use outside of this component.\n * @ignore\n */\n _columnSpan: number | null = null;\n\n constructor(private element: ElementRef<HTMLElement>) {\n /* no-op */\n }\n\n /**\n * Number of cells the item would span. Used by arrange grid in column\n * orientation to fill any unused space caused by wrapped items.\n */\n set columnSpan(value: number | null) {\n this._columnSpan = value;\n this.updateStyles();\n }\n\n /**\n * Update element styles\n */\n updateStyles(): void {\n this.setCssProperty(\n '--column-span',\n this._columnSpan ? this._columnSpan.toString() : null\n );\n }\n\n /**\n * Set CSS variable value or remove it if a null value is given.\n * Would of course rather have used property binding but that is not\n * supported until (perhaps) Angular 9.\n * See: https://github.com/angular/angular/issues/9343\n */\n protected setCssProperty(variable: string, value: string | null): void {\n this.element.nativeElement.style.setProperty(variable, value);\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n QueryList,\n SimpleChanges,\n} from '@angular/core';\n\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { GraniteArrangeGridItemComponent } from './arrange-grid-item.component';\n\nexport enum GraniteArrangeGridOrientation {\n columns = 'columns',\n rows = 'rows',\n}\n\n@Component({\n selector: 'granite-arrange-grid',\n templateUrl: 'arrange-grid.component.html',\n styleUrls: ['arrange-grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteArrangeGridComponent\n implements OnChanges, AfterContentInit, OnDestroy\n{\n /** How to present grid items; `columns` (default) or `rows` */\n @Input()\n orientation: GraniteArrangeGridOrientation =\n GraniteArrangeGridOrientation.columns;\n\n /** Exposes column orientation to template */\n @HostBinding('class.column-orientation')\n classColumnOrientation = false;\n\n /** Exposes row orientation to template */\n @HostBinding('class.row-orientation')\n classRowOrientation = false;\n\n @ContentChildren(GraniteArrangeGridItemComponent)\n arrangeGridItemComponents: QueryList<GraniteArrangeGridItemComponent>;\n\n /** Default number of columns to use in column orientation */\n static readonly defaultCols: number = 2;\n\n /**\n * Number of grid columns to use when orientation is set to `column`. The\n * default is two columns.\n */\n @Input()\n set cols(value: number) {\n this._cols = Math.max(1, Math.round(coerceNumberProperty(value)));\n }\n\n get cols(): number {\n return this._cols;\n }\n\n /** Number of columns to render */\n protected _cols: number = GraniteArrangeGridComponent.defaultCols;\n\n /**\n * Number of rows to render. Will be set internally taking column count,\n * the number of items and any cell wrapping into consideration.\n */\n protected _rows: number;\n\n set rows(value: number) {\n // Prevent pointless usage\n throw Error(\n 'Explicitly setting rows value for arrange grid is unsupported'\n );\n }\n\n get rows(): number {\n return this._rows;\n }\n\n /** Nexted on component destruction to complete other observables. */\n private destroy$: Subject<void> = new Subject();\n\n constructor(private element: ElementRef<HTMLElement>) {\n /* no-op */\n }\n\n ngAfterContentInit(): void {\n // Update style whenever grid item components change in content\n this.arrangeGridItemComponents.changes\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.updateStyles());\n\n this.updateStyles();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n (changes.orientation && !changes.orientation.isFirstChange()) ||\n (changes.cols && !changes.cols.isFirstChange())\n ) {\n this.updateStyles();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n /**\n * Update grid row template style.\n *\n * Use content height of all but last row and let the last grow\n * to take up any remaining space.\n */\n updateStyles(): void {\n const children: number = (this.arrangeGridItemComponents || []).length;\n\n if (this.orientation === GraniteArrangeGridOrientation.columns) {\n // If too many items was placed into too few colums, there would\n // be some wrapping. Take that into account when calculating the\n // number of rows.\n this._rows = Math.trunc((children - 1) / (this._cols || 1)) + 1;\n this.classColumnOrientation = true;\n this.classRowOrientation = false;\n\n if (children > 0) {\n // Fill any unused space caused by wrapped items by making the\n // last item also span over remaining cells.\n this.arrangeGridItemComponents.forEach((c) => (c.columnSpan = null));\n this.arrangeGridItemComponents.last.columnSpan =\n this._rows * this._cols - children + 1;\n }\n } else {\n this._cols = 1; // In row orientation, there is just a single column\n this._rows = children;\n this.classColumnOrientation = false;\n this.classRowOrientation = true;\n }\n\n this.setCssProperty('--cols', this._cols.toString());\n this.setCssProperty('--rows', this._rows.toString());\n }\n\n /**\n * Set CSS variable value or remove it if a null value is given.\n * Would of course rather have used property binding but that is not\n * supported until (perhaps) Angular 9.\n * See: https://github.com/angular/angular/issues/9343\n *\n * TODO: Replace with property binding with Angular 9 upgrade\n */\n protected setCssProperty(variable: string, value: string | null): void {\n this.element.nativeElement.style.setProperty(variable, value);\n }\n}\n","<ng-content select=\"granite-arrange-grid-item\"></ng-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { GraniteArrangeGridComponent } from './arrange-grid.component';\nimport { GraniteArrangeGridItemComponent } from './arrange-grid-item.component';\n\n@NgModule({\n declarations: [GraniteArrangeGridComponent, GraniteArrangeGridItemComponent],\n imports: [CommonModule],\n exports: [GraniteArrangeGridComponent, GraniteArrangeGridItemComponent],\n})\nexport class GraniteArrangeGridModule {}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\n\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\n\n/**\n * Grid item component\n *\n * Merely a wrapper for CSS Grid items, accepting item style as input parameters.\n */\n@Component({\n selector: 'granite-grid-item',\n template: '<ng-content></ng-content>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteGridItemComponent implements OnChanges {\n @Input()\n columnStart: number;\n\n @Input()\n columnEnd: number;\n\n @Input()\n rowStart: number;\n\n @Input()\n rowEnd: number;\n\n constructor(\n private element: ElementRef<HTMLElement>,\n private renderer: Renderer2\n ) {}\n\n ngOnChanges(): void {\n this.updateStyles();\n }\n\n /**\n * Update element styles\n */\n updateStyles(): void {\n this.setStyle('gridColumnStart', this.columnStart);\n this.setStyle('gridColumnEnd', this.columnEnd);\n this.setStyle('gridRowStart', this.rowStart);\n this.setStyle('gridRowEnd', this.rowEnd);\n }\n\n /**\n * Sets the element style. Needs to be set manually to avoid \"Changed after\n * checked\" errors that would occur with HostBinding.\n */\n private setStyle(property: string, value: any): void {\n this.renderer.setStyle(this.element.nativeElement, property, value || '');\n }\n}\n\n/**\n * Grid\n *\n * A wrapper around a native CSS Grid. Anything can be used for grid items, but\n * `GridItemComponent` is recommended for common cases.\n */\n@Component({\n selector: 'granite-grid',\n template: '<ng-content></ng-content>',\n styleUrls: ['grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteGridComponent implements AfterContentInit, OnChanges {\n /**\n * Number of grid columns, unless set via styling (grid-template-columns)\n *\n * Setting this value will produce equally sized columns\n */\n @Input()\n set cols(value: number) {\n this._cols = Math.max(1, Math.round(coerceNumberProperty(value)));\n }\n\n get cols(): number {\n return this._cols;\n }\n\n /** Number of columns to render */\n protected _cols: number;\n\n /**\n * Number of grid rows, unless set via styling (grid-template-rows)\n *\n * Setting this value will produce equally sized rows\n */\n @Input()\n set rows(value: number) {\n this._rows = Math.max(1, Math.round(coerceNumberProperty(value)));\n }\n\n get rows(): number {\n return this._rows;\n }\n\n /** Number of rows to render */\n protected _rows: number;\n\n constructor(private element: ElementRef<HTMLElement>) {}\n\n ngAfterContentInit(): void {\n this.updateStyles();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n (changes.cols && !changes.cols.isFirstChange()) ||\n (changes.rows && !changes.rows.isFirstChange())\n ) {\n this.updateStyles();\n }\n }\n\n /** Update element styles */\n updateStyles(): void {\n this.updateColumnStyles();\n this.updateRowStyles();\n }\n\n /**\n * Set CSS variable value or remove it if a null value is given.\n * Would of course rather have used property binding but that is not\n * supported until (perhaps) Angular 9.\n * See: https://github.com/angular/angular/issues/9343\n *\n * TODO: Replace with property binding with Angular 9 upgrade\n */\n protected setCssProperty(variable: string, value: string | null): void {\n this.element.nativeElement.style.setProperty(variable, value);\n }\n\n /** Update grid column template style */\n protected updateColumnStyles(): void {\n this.setCssProperty(\n '--cols',\n (this._cols && this._cols.toString()) || null\n );\n }\n\n /** Update grid row template style */\n protected updateRowStyles(): void {\n this.setCssProperty(\n '--rows',\n (this._rows && this._rows.toString()) || null\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport {\n GraniteGridComponent,\n GraniteGridItemComponent,\n} from './grid.component';\n\n@NgModule({\n declarations: [GraniteGridComponent, GraniteGridItemComponent],\n imports: [CommonModule],\n exports: [GraniteGridComponent, GraniteGridItemComponent],\n})\nexport class GraniteGridModule {}\n","import { Theme, Tokens } from '@ifsworld/granite-tokens';\n\nexport const TOKEN_PREFIX = 'granite-';\nexport const TOKEN_PREFIX_OLD = 'fnd-'; // TODO: Remove this when all tokens have 'granite-' as the prefix\n\n/**\n * Get the theme that corresponds to a given ID\n */\nexport function getThemeById(themes: Theme[], id: string): Theme | undefined {\n const theme: Theme | undefined =\n id !== undefined ? themes.find((t) => t.id === id) : undefined;\n\n return theme;\n}\n\n/**\n * Apply a theme to a DOM element by iterating though all tokens,\n * setting a CSS variable for each one.\n *\n * @param theme Theme to set\n * @param element Target element\n */\nexport function applyTheme(theme: Theme, element: HTMLElement): void {\n applyTokens(theme.tokens, element);\n}\n\n/**\n * Set a CSS variable for each token on the specified element.\n *\n * @param theme Theme to set\n * @param element Target element\n */\nexport function applyTokens(tokens: Tokens, element: HTMLElement): void {\n for (const token of Object.keys(tokens)) {\n element.style.setProperty(token, tokens[token]);\n }\n}\n\n/**\n * Remove theme token CSS variables from an element using the specified keys\n *\n * @param theme Theme with tokens to clear\n * @param element Target element\n */\nexport function clearTheme(theme: Theme, element: HTMLElement): void {\n clearTokens(Object.keys(theme.tokens), element);\n}\n\n/**\n * Remove token CSS variables from an element using the specified keys.\n *\n * @param keys Token keys\n * @param element Target element\n */\nexport function clearTokens(keys: string[], element: HTMLElement): void {\n for (const token of keys) {\n element.style.removeProperty(token);\n }\n}\n\nexport function isValidToken(key: string): boolean {\n return (\n key && (key.startsWith(TOKEN_PREFIX) || key.startsWith(TOKEN_PREFIX_OLD))\n );\n}\n\nexport function setPropertyValue(\n name: string,\n value: string,\n element: HTMLElement\n): void {\n if (element && element.style && value != null) {\n element.style.setProperty(\n name,\n isValidToken(value) ? `var(--${value})` : value\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n ElementRef,\n} from '@angular/core';\nimport { setPropertyValue } from '../core/theme.library';\n\n@Component({\n selector: 'granite-badge',\n exportAs: 'graniteBadge',\n host: {\n class: 'granite-badge',\n '[class.granite-badge-pill]': 'pill',\n },\n templateUrl: './badge.component.html',\n styleUrls: ['./badge.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteBadgeComponent implements OnChanges {\n /**\n * Design token name to get the value for the Background color\n */\n @Input()\n backgroundColor: string;\n\n /**\n * Design token name to get the value for the Font color\n */\n @Input()\n color: string;\n\n /** Pill style badge */\n @Input()\n pill: boolean = false;\n\n constructor(private elementRef: ElementRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.backgroundColor) {\n if (\n changes.backgroundColor.previousValue !==\n changes.backgroundColor.currentValue\n ) {\n setPropertyValue(\n 'background-color',\n changes.backgroundColor.currentValue,\n this.elementRef.nativeElement\n );\n }\n }\n if (changes.color) {\n if (changes.color.previousValue !== changes.color.currentValue) {\n setPropertyValue(\n 'color',\n changes.color.currentValue,\n this.elementRef.nativeElement\n );\n }\n }\n }\n}\n","<div class=\"granite-badge-content\">\n <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteBadgeComponent } from './badge.component';\n\n@NgModule({\n declarations: [GraniteBadgeComponent],\n imports: [CommonModule],\n exports: [GraniteBadgeComponent],\n})\nexport class GraniteBadgeModule {}\n","import {\n ComponentHarness,\n BaseHarnessFilters,\n HarnessPredicate,\n} from '@angular/cdk/testing';\n\nexport class GraniteBadgeHarness extends ComponentHarness {\n static hostSelector = 'granite-badge';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `GraniteBadgeHarness` that meets\n * certain criteria.\n * @param options Options for filtering which badge instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(\n options: GraniteBadgeHarnessFilters = {}\n ): HarnessPredicate<GraniteBadgeHarness> {\n const predicate: HarnessPredicate<GraniteBadgeHarness> =\n new HarnessPredicate(GraniteBadgeHarness, options);\n predicate.addOption('text', options.text, (harness, label) =>\n HarnessPredicate.stringMatches(harness.getText(), label)\n );\n predicate.addOption(\n 'pill',\n options.pill,\n async (harness, pill) => (await harness.isPill()) === pill\n );\n return predicate;\n }\n\n /** Gets the Badge text. */\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n\n /** Whether it's a Pill type badge. */\n async isPill(): Promise<boolean> {\n return (await this.host()).hasClass('granite-badge-pill');\n }\n}\n\n/** A set of criteria that can be used to filter a list of `GraniteBadgeHarness` instances. */\nexport interface GraniteBadgeHarnessFilters extends BaseHarnessFilters {\n /** Only find instances whose text matches the given value. */\n text?: string | RegExp;\n pill?: boolean;\n}\n","/**\n * Returns an ease-out CSS animation string with a slightly steeper curve\n * than usual.\n *\n * @param duration Duration in milliseconds\n * @param delay Delay in milliseconds\n */\nexport function getEaseOutSteep(duration: number, delay?: number): string {\n return (\n `${duration}ms ` +\n (delay !== undefined ? ` ${delay}ms ` : '') +\n 'cubic-bezier(0, 0, 0.2, 1)'\n );\n}\n\n/**\n * Returns an ease-out-back CSS animation string with a slightly steeper\n * curve than usual.\n *\n * @param duration Duration in milliseconds\n * @param delay Delay in milliseconds\n */\nexport function getEaseOutSteepBack(duration: number, delay?: number): string {\n return (\n `${duration}ms ` +\n (delay !== undefined ? ` ${delay}ms ` : '') +\n 'cubic-bezier(.37,1.3,.77,1)'\n );\n}\n\n/**\n * Returns a linear CSS animation string\n *\n * @param duration Duration in milliseconds\n * @param delay Delay in milliseconds\n */\nexport function getEaseLinear(duration: number, delay?: number): string {\n return (\n `${duration}ms ` + (delay !== undefined ? ` ${delay}ms ` : '') + 'linear'\n );\n}\n","import {\n trigger,\n state,\n style,\n AnimationTriggerMetadata,\n animate,\n group,\n query,\n transition,\n} from '@angular/animations';\nimport { getEaseLinear, getEaseOutSteep } from '../core/animation';\n\nconst easeOut120 = getEaseOutSteep(120);\n\n/**\n * Animations used by the `granite-menu` component, showing the desktop interface.\n * @docs-private\n */\nexport const graniteMenuDesktopAnimations: {\n /**\n * This animation trigger controls the menu panel's entry and exit from the\n * stage on desktop output devices.\n */\n readonly transformMenuDesktop: AnimationTriggerMetadata;\n} = {\n transformMenuDesktop: trigger('transformMenuDesktop', [\n state(\n 'void',\n style({\n opacity: 0,\n transform: 'scale(0.9)',\n })\n ),\n transition(\n 'void => enter',\n group([\n query(\n '.granite-menu-content',\n animate(\n getEaseLinear(100),\n style({\n opacity: 1,\n })\n )\n ),\n animate(easeOut120, style({ transform: 'scale(1)' })),\n ])\n ),\n transition(\n '* => void',\n animate(getEaseLinear(100, 25), style({ opacity: 0 }))\n ),\n ]),\n};\n","import {\n trigger,\n state,\n style,\n animate,\n transition,\n AnimationTriggerMetadata,\n sequence,\n} from '@angular/animations';\nimport { getEaseOutSteep, getEaseLinear } from '../core/animation';\n\nconst defaultDuration = 300;\nconst defaultDelay = 200;\n\nconst easeOut = getEaseOutSteep(defaultDuration);\nconst linear = getEaseLinear(defaultDuration);\nconst linearDelayed = getEaseLinear(defaultDuration, defaultDelay);\n\n/**\n * Insanely fast travel somewhere on or off the stage,\n * to set a great starting position.\n *\n * For some reason this has to be animated with > 0ms time.\n * Setting style directly gets ignored.\n */\nconst teleport = '1ms linear';\n\n/**\n * Style used by our menu stars to make grand entrée et sortie from/to below\n * the viewport stage.\n */\nconst inTheOrchestraPit = style({\n transform: 'translateX(0) translateY(100%)',\n opacity: 0,\n});\n\n/** Style for a menu at the center of attention, on the viewport stage */\nconst onStage = style({\n opacity: 1,\n transform: 'translateX(0) translateY(0)',\n});\n\n/**\n * Style for a (sub) menu starting position at the side of the stage, waiting\n * to make an entrance by sliding into view, pushing the previous (parent)\n * menu off.\n */\nconst awaitingCue = style({\n opacity: 0,\n transform: 'translateX(100vw) translateY(0)',\n});\n\n/**\n * Style for a (parent) menu that has been pushed aside by a debutant\n * (sub) menu and therefore, although maybe temporarily, left the spotlight.\n *\n * @param translateY Where to place on Y axis\n */\nconst retired = style({\n opacity: 1,\n transform: `translateX(-100vw) translateY(0)`,\n});\n\n/**\n * Style for an active (sub) menu that dances across the stage, along with its\n * parent menu, as a result of the user panning. Requires an `xOffset`\n * parameter for the distance.\n */\nconst futsalShuffle = style({\n transform: 'translateX({{ xOffset }}px)',\n});\n\n/**\n * Style for a parent menu sweeping across the stage, right beside the\n * starlet sub menu, either off the stage or back onto it (for a great comeback).\n * Requires an `xOffset` parameter for the distance.\n */\nconst moonwalk = style({\n transform: 'translateX(calc(-100vw + {{ xOffset }}px))',\n});\n\nconst onStageHidden = style({\n opacity: 0,\n transform: 'translateX(0) translateY(0)',\n});\n\n/**\n * Animations used by the `granite-menu` component, showing the touch interface.\n * @docs-private\n */\nexport const graniteMenuTouchAnimations: {\n /**\n * This animation trigger controls the menu panel's entry and exit from the\n * stage on touch output devices.\n */\n readonly transformMenuTouch: AnimationTriggerMetadata;\n /**\n * This animation trigger controls the close button's entry and exit from the\n * stage on touch output devices, using the same states as the menu panel.\n */\n readonly transformCloseButton: AnimationTriggerMetadata;\n} = {\n transformMenuTouch: trigger('transformMenuTouch', [\n // Set up cast positions\n state('void', awaitingCue),\n state('enter, enter-from-below', onStage),\n state('pan-hidden', moonwalk, { params: { xOffset: 0 } }),\n state('pan', futsalShuffle, { params: { xOffset: 0 } }),\n state('below-with-delay', inTheOrchestraPit),\n state('hide', retired),\n\n // General movement across the stage. Transitions to 'pan' and 'pan-hidden'\n // states are intentionally left out as we want the menu position to update\n // instantly as the user moves their finger.\n transition(\n 'pan => enter, ' +\n 'pan => enter-from-below, ' +\n 'pan => void, ' +\n 'enter <=> hide, ' +\n 'enter-from-below <=> hide, ' +\n 'pan-hidden => hide, ' +\n 'pan-hidden => enter',\n animate(easeOut)\n ),\n\n transition(\n // Jump straight onto the stage, from the orchestra pit.\n // Excitement fills the air. Spotlight. Showtime.\n 'void => enter-from-below',\n sequence([\n animate(teleport, inTheOrchestraPit),\n animate(easeOut, onStage),\n ])\n ),\n transition(\n // Go stand in the curtains, then make a grand entrance from the side\n 'void => enter',\n sequence([animate(teleport, awaitingCue), animate(easeOut, onStage)])\n ),\n transition(\n // Get off the stage, back into the curtains on the side\n 'enter => void',\n animate(easeOut, awaitingCue)\n ),\n transition(\n // Take the side stairs down from the stage\n 'hide => below',\n animate(linear, retired)\n ),\n transition(\n // Wait for a bit, then take the side stairs down from the stage\n 'hide => below-with-delay',\n sequence([animate(teleport, retired), animate(linearDelayed, retired)])\n ),\n transition(\n // Stage dive into the orchestra pit\n 'enter => below, enter-from-below => below',\n sequence([animate(teleport, onStage), animate(linear, inTheOrchestraPit)])\n ),\n transition(\n // Receive the standing ovations, then stage dive into the orchestra pit\n 'enter => below-with-delay, enter-from-below => below-with-delay',\n sequence([\n animate(teleport, onStage),\n animate(linearDelayed, inTheOrchestraPit),\n ])\n ),\n ]),\n transformCloseButton: trigger('transformCloseButton', [\n state('void, below, below-with-delay', onStageHidden),\n state('enter, enter-from-below, pan-hidden, pan, hide', onStage),\n transition(\n 'void => enter-from-below',\n sequence([\n animate(teleport, onStageHidden),\n animate(getEaseLinear(50, defaultDuration / 2), onStage),\n ])\n ),\n transition(\n 'enter => below, enter-from-below => below',\n sequence([\n animate(teleport, onStage),\n animate(getEaseLinear(25), onStageHidden),\n ])\n ),\n transition(\n 'enter => below-with-delay, enter-from-below => below-with-delay',\n sequence([\n animate(teleport, onStage),\n animate(getEaseLinear(50, defaultDelay), onStageHidden),\n ])\n ),\n ]),\n};\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { Direction } from '@angular/cdk/bidi';\nimport { EventEmitter, InjectionToken, TemplateRef } from '@angular/core';\nimport { MenuPositionX, MenuPositionY } from './menu-positions';\n\n/**\n * Injection token used to provide the parent menu to menu-specific components.\n * @docs-private\n */\nexport const GRANITE_MENU_PANEL = new InjectionToken<GraniteMenuPanelInterface>(\n 'GRANITE_MENU_PANEL'\n);\n\nexport type ClosedEventType = void | 'click' | 'keydown' | 'tab';\nexport type OpenedEventType = void | 'click' | 'keydown';\n\nexport interface GraniteMenuPanelInterface {\n xPosition: MenuPositionX;\n yPosition: MenuPositionY;\n templateRef: TemplateRef<any>;\n parentMenu?: GraniteMenuPanelInterface | undefined;\n direction?: Direction;\n focusFirstItem: (origin?: FocusOrigin) => void;\n closed: EventEmitter<ClosedEventType>;\n opened: EventEmitter<OpenedEventType>;\n readonly panelId?: string;\n showBackButton: boolean;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Throws an exception for the case when menu trigger doesn't have a valid granite-menu instance\n * @docs-private\n */\nexport function throwGraniteMenuMissingError(): void {\n throw Error(`graniteMenuTriggerFor: must pass in an granite-menu instance.\n\n Example:\n <granite-menu #menu=\"graniteMenu\"></granite-menu>\n <button [graniteMenuTriggerFor]=\"menu\"></button>`);\n}\n\n/**\n * Throws an exception for the case when menu's x-position value isn't valid.\n * In other words, it doesn't match 'before' or 'after'.\n * @docs-private\n */\nexport function throwGraniteMenuInvalidPositionX(): void {\n throw Error(`xPosition value must be either 'before' or after'.\n Example: <granite-menu xPosition=\"before\" #menu=\"graniteMenu\"></granite-menu>`);\n}\n\n/**\n * Throws an exception for the case when menu's y-position value isn't valid.\n * In other words, it doesn't match 'above' or 'below'.\n * @docs-private\n */\nexport function throwGraniteMenuInvalidPositionY(): void {\n throw Error(`yPosition value must be either 'above' or below'.\n Example: <granite-menu yPosition=\"above\" #menu=\"graniteMenu\"></granite-menu>`);\n}\n","import {\n Attribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\n\n@Component({\n selector: 'granite-icon',\n template: '<ng-content></ng-content>',\n styleUrls: ['./icon.component.scss'],\n host: {\n role: 'img',\n class: 'granite-icon',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteIconComponent implements OnChanges {\n @Input()\n fontIcon: string;\n\n private _previousFontIconClass: string;\n\n constructor(\n public _elementRef: ElementRef,\n private renderer: Renderer2,\n @Attribute('aria-hidden') ariaHidden: string\n ) {\n // aria-hidden will be set to true by default, unless it's overridden by the developer\n if (!ariaHidden) {\n this.renderer.setAttribute(\n _elementRef.nativeElement,\n 'aria-hidden',\n 'true'\n );\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.fontIcon) {\n this._updateFontIcon();\n }\n }\n\n private _updateFontIcon(): void {\n if (this.fontIcon !== this._previousFontIconClass) {\n if (this._previousFontIconClass) {\n this.renderer.removeClass(\n this._elementRef.nativeElement,\n this._previousFontIconClass\n );\n }\n if (this.fontIcon) {\n this.renderer.addClass(this._elementRef.nativeElement, this.fontIcon);\n }\n this._previousFontIconClass = this.fontIcon;\n }\n }\n}\n","import { FocusableOption, FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport {\n Component,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n Optional,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport {\n ClientInputInterface,\n ClientOutputInterface,\n} from '../core/client-environment';\nimport { GRANITE_MENU_PANEL, GraniteMenuPanelInterface } from './menu-panel';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[graniteMenuItem]',\n template: `<ng-content></ng-content>\n <ng-container *ngIf=\"_triggersSubmenu\">\n <granite-icon\n class=\"caret-left\"\n [fontIcon]=\"'icon-caret-left'\"\n ></granite-icon>\n <granite-icon\n class=\"caret-right\"\n [fontIcon]=\"'icon-caret-right'\"\n ></granite-icon>\n </ng-container>`,\n exportAs: 'graniteMenuItem',\n styleUrls: ['./menu-item.component.scss'],\n host: {\n '[attr.role]': 'role',\n '[class.granite-menu-item]': 'true',\n '[class.granite-menu-item-highlighted]': '_highlighted',\n '[class.granite-menu-item-submenu-trigger]': '_triggersSubmenu',\n //#region --- Touch device customizations ---\n '[class.granite-device-output-touch]': '_clientOutput?.device === \"touch\"',\n //#endregion --- Touch device customizations ---\n '(mouseenter)': '_hovered.next(this)',\n },\n})\nexport class GraniteMenuItemComponent implements OnDestroy, FocusableOption {\n /** ARIA role for the menu item. */\n @Input() role: 'menuitem' | 'menuitemradio' | 'menuitemcheckbox' = 'menuitem';\n\n /** Stream that emits when the menu item is hovered. */\n readonly _hovered: Subject<this> = new Subject<this>();\n\n /** Stream that emits when the menu item is focused. */\n readonly _focused = new Subject<this>();\n\n /** Whether the menu item acts as a trigger for a sub-menu (used for styling) */\n _triggersSubmenu: boolean = false;\n\n /**\n * Whether the menu item is highlighted, e.g. in the \"breadcrumb\" parent chain\n * of sub menu trigger items\n */\n _highlighted: boolean = false;\n\n /** Client input device information */\n _clientInput: ClientInputInterface;\n\n /** Client output device information */\n _clientOutput: ClientOutputInterface;\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _focusMonitor: FocusMonitor,\n\n @Inject(GRANITE_MENU_PANEL)\n @Optional()\n public _parentMenu?: GraniteMenuPanelInterface\n ) {\n // Start monitoring the element so it gets the appropriate focused classes. We want\n // to show the focus style for menu items only when the focus was not caused by a\n // mouse or touch interaction.\n _focusMonitor.monitor(this._elementRef, false);\n }\n\n ngOnDestroy(): void {\n this._focusMonitor.stopMonitoring(this._elementRef);\n\n this._hovered.complete();\n this._focused.complete();\n }\n\n /** Focuses the menu item. */\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n this._focusMonitor.focusVia(this._getHostElement(), origin, options);\n this._focused.next(this);\n }\n\n /** Returns the host DOM element. */\n _getHostElement(): HTMLElement {\n return this._elementRef.nativeElement;\n }\n}\n","import {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectorRef,\n ContentChildren,\n Directive,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { FocusKeyManager, FocusOrigin } from '@angular/cdk/a11y';\nimport { Direction } from '@angular/cdk/bidi';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport { AnimationEvent } from '@angular/animations';\nimport {\n BehaviorSubject,\n combineLatest,\n merge,\n Observable,\n Subject,\n Subscription,\n} from 'rxjs';\nimport { filter, map, startWith, switchMap } from 'rxjs/operators';\n\nimport {\n ClientInputInterface,\n ClientOutputInterface,\n} from '../core/client-environment';\nimport {\n throwGraniteMenuInvalidPositionX,\n throwGraniteMenuInvalidPositionY,\n} from './menu-errors';\nimport { GraniteMenuItemComponent } from './menu-item.component';\nimport {\n ClosedEventType,\n OpenedEventType,\n GraniteMenuPanelInterface,\n} from './menu-panel';\nimport { MenuPositionX, MenuPositionY } from './menu-positions';\n\n/** Counter for panel ID generation */\nlet menuPanelUid = 0;\n\n/** Menu panel animation states */\ntype TransformMenuStates =\n // Touch device\n | 'void'\n | 'enter'\n | 'enter-from-below'\n | 'below-with-delay'\n | 'below'\n | 'pan'\n | 'hide'\n | 'pan-hidden';\n\n/**\n * Menu panel animation transform/state object. Has to be an object as we supply\n * the `xOffset` parameter and not just the state name.\n */\ntype TransformMenu = {\n /** Current animation state name */\n value: TransformMenuStates;\n params: {\n /** How far the menu has been panned/swiped by the user */\n xOffset: number;\n };\n};\n\n/** Menu panel animation default transform values */\nconst transformMenuDefault: TransformMenu = {\n value: 'void',\n params: {\n xOffset: 0,\n },\n};\n\n/** Base class with all of the menu functionality. */\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class _MenuBaseComponent\n implements\n AfterContentInit,\n OnDestroy,\n AfterContentChecked,\n GraniteMenuPanelInterface\n{\n /** Position of the menu in the X axis. */\n @Input()\n get xPosition(): MenuPositionX {\n return this._xPosition;\n }\n set xPosition(value: MenuPositionX) {\n if (value !== 'before' && value !== 'after') {\n throwGraniteMenuInvalidPositionX();\n }\n this._xPosition = value;\n }\n\n /** Position of the menu in the Y axis. */\n @Input()\n get yPosition(): MenuPositionY {\n return this._yPosition;\n }\n set yPosition(value: MenuPositionY) {\n if (value !== 'above' && value !== 'below') {\n throwGraniteMenuInvalidPositionY();\n }\n this._yPosition = value;\n }\n\n /** Optional touch menu panel title */\n @Input()\n title: string;\n\n /**\n * Touch menu close button label. If not set, any label set by parent will\n * be used.\n */\n @Input()\n closeLabel: string;\n\n @Input()\n openOnHover: boolean = true;\n\n @Input()\n scrollStrategy: 'reposition' | 'close' = 'reposition';\n\n @ViewChild(TemplateRef) templateRef: TemplateRef<any>;\n\n /** All items inside the menu. Includes items nested inside another menu. */\n @ContentChildren(GraniteMenuItemComponent, { descendants: true })\n _allItems: QueryList<GraniteMenuItemComponent>;\n\n /**\n * Event emitted when the menu is closed\n */\n @Output() readonly closed: EventEmitter<ClosedEventType> = new EventEmitter();\n\n /**\n * Event emitted when the menu is opened\n */\n @Output() readonly opened: EventEmitter<OpenedEventType> = new EventEmitter();\n\n /**\n * Used for locating the panel in tests and setting the aria-control attribute\n * for the menu trigger.\n */\n readonly panelId = `granite-menu-panel-${menuPanelUid++}`;\n\n /** Parent menu of the current menu panel. */\n parentMenu: GraniteMenuPanelInterface | undefined;\n\n /** Layout direction of the menu. */\n direction: Direction;\n\n /** Whether to show back button in touch menu title bar */\n showBackButton: boolean = false;\n\n /** Whether to show touch menu title bar */\n showTitle: boolean = false;\n\n /** Whether to add a close button below the menu */\n showCloseButton: boolean = false;\n\n /** Observable current state of the panel animation. */\n _transformMenu: BehaviorSubject<TransformMenu> = new BehaviorSubject(\n transformMenuDefault\n );\n\n /** Emits whenever an animation on the menu completes. */\n _animationDone = new Subject<AnimationEvent>();\n\n /** Whether the menu is animating. */\n _isAnimating: boolean;\n\n /** Whether the menu is about to be destroyed. */\n _isClosing: boolean;\n\n /** Client input device information */\n _clientInput: ClientInputInterface;\n\n /** Client output device information */\n _clientOutput: ClientOutputInterface;\n\n private _menuEmpty$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n // eslint-disable-next-line @typescript-eslint/member-ordering\n _isMenuEmpty$: Observable<boolean> = combineLatest([\n this._menuEmpty$,\n this._animationDone,\n ]).pipe(\n filter(([m, a]) => m && a != null),\n map(() => true)\n );\n\n /** Only the direct descendant menu items. */\n private _directDescendantItems = new QueryList<GraniteMenuItemComponent>();\n\n private _keyManager: FocusKeyManager<GraniteMenuItemComponent>;\n\n /** Subscription to tab events on the menu panel */\n private _tabSubscription = Subscription.EMPTY;\n\n private _xPosition: MenuPositionX = 'after';\n private _yPosition: MenuPositionY = 'below';\n\n /** Current state of the panel animation. */\n set _panelAnimationState(state: TransformMenuStates) {\n this._transformMenu.next({\n value: state,\n params: { xOffset: this.xOffset },\n });\n }\n\n /**\n * Current horizontal offset. Used with `pan` and `pan-hidden`\n * animation states.\n */\n private xOffset: number = 0;\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) {}\n\n ngAfterContentChecked(): void {\n this._menuEmpty$.next(this._allItems.length < 1 ? true : false);\n }\n\n ngAfterContentInit(): void {\n this._updateDirectDescendants();\n this._keyManager = new FocusKeyManager(this._directDescendantItems)\n .withWrap()\n .skipPredicate((menuItem) => {\n const hostElement: HTMLElement = menuItem._getHostElement();\n return hostElement instanceof HTMLButtonElement\n ? hostElement.disabled\n : hostElement.hasAttribute('graniteTitle');\n });\n this._tabSubscription = this._keyManager.tabOut.subscribe(() => {\n this.closed.emit('tab');\n });\n\n // If a user manually (programatically) focuses a menu item, we need to reflect that focus\n // change back to the key manager. Note that we don't need to unsubscribe here because _focused\n // is internal and we know that it gets completed on destroy.\n this._directDescendantItems.changes\n .pipe(\n startWith(this._directDescendantItems),\n switchMap((items) =>\n merge(...items.map((item: GraniteMenuItemComponent) => item._focused))\n )\n )\n .subscribe((focusedItem: GraniteMenuItemComponent) =>\n this._keyManager.updateActiveItem(focusedItem)\n );\n }\n\n ngOnDestroy(): void {\n this._directDescendantItems.destroy();\n this._tabSubscription.unsubscribe();\n this.closed.complete();\n }\n\n /**\n * Stream that combines the `_hovered` observables of all the menu's items\n * into a single observable. Emits whenever the hovered menu item changes.\n */\n _hovered(): Observable<GraniteMenuItemComponent> {\n // Coerce the `changes` property because Angular types it as `Observable<any>`\n const itemChanges = this._directDescendantItems.changes as Observable<\n QueryList<GraniteMenuItemComponent>\n >;\n\n return itemChanges.pipe(\n startWith(this._directDescendantItems),\n // Hovering is not applicable when producing touch output\n filter(() => {\n return this._clientOutput?.device !== 'touch';\n }),\n switchMap((items) =>\n merge(...items.map((item: GraniteMenuItemComponent) => item._hovered))\n )\n ) as Observable<GraniteMenuItemComponent>;\n }\n\n /** Handle a keyboard event from the menu, delegating to the appropriate action. */\n _handleKeydown(event: KeyboardEvent): void {\n const key = event.key;\n const manager = this._keyManager;\n\n switch (key) {\n case 'Escape':\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this.closed.emit('keydown');\n }\n break;\n case 'ArrowLeft':\n if (this.parentMenu && this.direction === 'ltr') {\n this.closed.emit('keydown');\n }\n break;\n case 'ArrowRight':\n if (this.parentMenu && this.direction === 'rtl') {\n this.closed.emit('keydown');\n }\n break;\n case 'Home':\n case 'End':\n if (!hasModifierKey(event)) {\n key === 'Home'\n ? manager.setFirstItemActive()\n : manager.setLastItemActive();\n event.preventDefault();\n }\n break;\n default:\n if (key === 'ArrowUp' || key === 'ArrowDown') {\n manager.setFocusOrigin('keyboard');\n }\n\n manager.onKeydown(event);\n }\n }\n\n /**\n * Focus the first item in the menu.\n * @param origin Action from which the focus originated. Used to set the correct styling.\n */\n focusFirstItem(origin: FocusOrigin = 'program'): void {\n this._keyManager.setFocusOrigin(origin).setFirstItemActive();\n }\n\n /** Updates the `showTitle` property for touch device UI */\n _updateShowTitle(): void {\n this.showTitle = !!this.title || this.showBackButton;\n }\n\n /** Starts the enter animation */\n _startAnimation(): void {\n this._panelAnimationState = 'enter';\n }\n\n /** Resets the panel animation to its initial state. */\n _resetAnimation(): void {\n this._panelAnimationState = 'void';\n }\n\n /**\n * Starts the 'below' animation, moving a menu down, out of view below the\n * viewport. Used to close the whole menu, for example when clicking\n * the backdrop.\n */\n _startTouchCloseDownAnimation(): void {\n this._panelAnimationState = 'below';\n }\n\n /**\n * Starts the 'below-with-delay' animation, moving a menu down, out of view below the\n * viewport. Used to close the whole menu as a response to the user tapping\n * a menu item. There is a short delay before the animation starts, to that\n * the user gets a visual feedback on what item was selected.\n */\n _startTouchCloseDownAnimationWithDelay(): void {\n this._panelAnimationState = 'below-with-delay';\n }\n\n /**\n * Starts the 'void' animation, moving a (sub) menu out of view to the side\n * of the viewport. Used when going \"back\" from a sub menu.\n */\n _startTouchCloseSideAnimation(): void {\n this._resetAnimation();\n }\n\n /**\n * Starts the enter-from-below animation, moving a (root) menu into view,\n * Animates upwards from a starting position below the viewport.\n */\n _startTouchRootEnterAnimation(): void {\n this._panelAnimationState = 'enter-from-below';\n this.xOffset = 0;\n }\n\n /** Starts the enter animation, moving a (sub) menu into view. */\n _startTouchSubmenuEnterAnimation(): void {\n this._panelAnimationState = 'enter';\n this.xOffset = 0;\n }\n\n /**\n * Starts the pan animation, to position a submenu in a response\n * to user dragging sideways (panning).\n */\n _startTouchPanAnimation(xOffset: number): void {\n this._panelAnimationState = 'pan';\n this.xOffset = xOffset;\n }\n\n /**\n * Starts the pan-hidden animation, to position a parent menu next to an\n * active submenu that the user is dragging sideways (panning).\n */\n _startTouchHidePanAnimation(xOffset: number): void {\n this._panelAnimationState = 'pan-hidden';\n this.xOffset = xOffset;\n }\n\n /**\n * Starts the hide animation, to make a parent menu slide out to leave\n * space for a submenu.\n */\n _startTouchHideAnimation(): void {\n this._panelAnimationState = 'hide';\n this.xOffset = 0;\n }\n\n /** Callback that is invoked when the panel animation completes. */\n _onAnimationDone(event: AnimationEvent): void {\n this._animationDone.next(event);\n this._isAnimating = false;\n }\n\n _onAnimationStart(event: AnimationEvent): void {\n this._isAnimating = true;\n\n // Scroll the content element to the top as soon as the animation starts. This is necessary,\n // because we move focus to the first item while it's still being animated, which can throw\n // the browser off when it determines the scroll position. Alternatively we can move focus\n // when the animation is done, however moving focus asynchronously will interrupt screen\n // readers which are in the process of reading out the menu already. We take the `element`\n // from the `event` since we can't use a `ViewChild` to access the pane.\n if (\n (event.toState === 'enter' || event.toState === 'enter-from-below') &&\n this._keyManager.activeItemIndex === 0\n ) {\n event.element.scrollTop = 0;\n }\n }\n\n /**\n * Handle click on the menu by emitting on the `closed` emitter\n * with a `click` reason\n */\n _handleClick(): void {\n this.closed.emit('click');\n }\n\n /**\n * Handle click on the close button by emitting on the `closed` emitter\n * without any particular reason\n */\n _handleCloseClick(): void {\n this.closed.emit();\n }\n\n /**\n * Handle click on the back icon by emitting on the `clicked` emitter\n */\n _handleBackClick(e: MouseEvent): void {\n if (this.showBackButton) {\n // Close submenu keydown-style: close only this menu and leave parents open\n this.closed.emit('keydown');\n }\n e.stopPropagation();\n }\n\n /**\n * Update client device information for the menu and its menu items.\n */\n _setDevice(\n clientInput: ClientInputInterface,\n clientOutput: ClientOutputInterface\n ): void {\n this._clientInput = clientInput;\n this._clientOutput = clientOutput;\n\n this._directDescendantItems.forEach((item) => {\n item._clientInput = clientInput;\n item._clientOutput = clientOutput;\n });\n\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Resets the active item in the menu. This is used when the menu is opened, allowing\n * the user to start from the first option when pressing the down arrow.\n */\n resetActiveItem(): void {\n this._keyManager.setActiveItem(-1);\n }\n\n /**\n * Sets up a stream that will keep track of any newly-added menu items and will update the list\n * of direct descendants. We collect the descendants this way, because `_allItems` can include\n * items that are part of child menus, and using a custom way of registering items is unreliable\n * when it comes to maintaining the item order.\n */\n private _updateDirectDescendants() {\n this._allItems.changes\n .pipe(startWith(this._allItems))\n .subscribe((items: QueryList<GraniteMenuItemComponent>) => {\n this._directDescendantItems.reset(\n items.filter((item) => item._parentMenu === this)\n );\n this._directDescendantItems.notifyOnChanges();\n });\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[graniteMenuTouchCloseItem]',\n template: '<ng-content></ng-content>',\n exportAs: 'graniteMenuTouchCloseItem',\n styleUrls: ['./menu-item.component.scss'],\n host: {\n '[class.granite-device-output-touch]': 'true',\n },\n})\nexport class GraniteMenuTouchCloseComponent {}\n","import { Component, Inject, Optional } from '@angular/core';\nimport { GRANITE_MENU_PANEL } from './menu-panel';\nimport { _MenuBaseComponent } from './menu-base';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[graniteMenuTouchTitleItem]',\n template: `\n <ng-container *ngIf=\"_triggersBack\">\n <granite-icon\n class=\"caret-left\"\n [fontIcon]=\"'icon-caret-left'\"\n ></granite-icon>\n <granite-icon\n class=\"caret-right\"\n [fontIcon]=\"'icon-caret-right'\"\n ></granite-icon>\n </ng-container>\n <ng-content></ng-content>\n `,\n exportAs: 'graniteMenuTouchTitleItem',\n styleUrls: ['./menu-item.component.scss'],\n host: {\n '[class.granite-menu-item-title]': 'true',\n '[class.granite-menu-item-back-trigger]': '_triggersBack',\n '[class.granite-device-output-touch]': 'true',\n },\n})\nexport class GraniteMenuTouchTitleItemComponent {\n /**\n * Whether the menu item acts as a trigger to return to a parent menu\n * (used for styling)\n */\n _triggersBack: boolean = false;\n\n constructor(\n /** If this is an item on a _submenu_, its parent menu will have a parent */\n @Inject(GRANITE_MENU_PANEL)\n @Optional()\n _parentMenu: _MenuBaseComponent\n ) {\n this._triggersBack = !!_parentMenu.parentMenu;\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nimport { graniteMenuDesktopAnimations } from './menu-desktop-animations';\nimport { graniteMenuTouchAnimations } from './menu-touch-animations';\nimport { GRANITE_MENU_PANEL } from './menu-panel';\nimport { _MenuBaseComponent } from './menu-base';\n\n@Component({\n selector: 'granite-menu',\n templateUrl: 'menu.component.html',\n styleUrls: ['menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'graniteMenu',\n animations: [\n graniteMenuDesktopAnimations.transformMenuDesktop,\n graniteMenuTouchAnimations.transformMenuTouch,\n graniteMenuTouchAnimations.transformCloseButton,\n ],\n providers: [\n { provide: GRANITE_MENU_PANEL, useExisting: GraniteMenuComponent },\n ],\n})\nexport class GraniteMenuComponent extends _MenuBaseComponent {}\n","<!--\n Using separate template part for desktop and touch output, because of\n animation triggers and slightly different content.\n-->\n<ng-template>\n <!-- Desktop -->\n <ng-container *ngIf=\"_clientOutput.device === 'desktop'\">\n <div\n #menu\n class=\"granite-menu\"\n [class.is-menu-empty]=\"_isMenuEmpty$ | async\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [@transformMenuDesktop]=\"_transformMenu | async\"\n (@transformMenuDesktop.start)=\"_onAnimationStart($event)\"\n (@transformMenuDesktop.done)=\"_onAnimationDone($event)\"\n (click)=\"_handleClick()\"\n (keydown)=\"_handleKeydown($event)\"\n >\n <div class=\"granite-menu-content\">\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Touch -->\n <ng-container *ngIf=\"_clientOutput?.device === 'touch'\">\n <div\n #menu\n class=\"granite-menu granite-device-output-touch\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [@transformMenuTouch]=\"_transformMenu | async\"\n (@transformMenuTouch.start)=\"_onAnimationStart($event)\"\n (@transformMenuTouch.done)=\"_onAnimationDone($event)\"\n (click)=\"_handleClick()\"\n (keydown)=\"_handleKeydown($event)\"\n >\n <div class=\"granite-menu-content\">\n <div *ngIf=\"showTitle\" class=\"header-container\">\n <button\n [disabled]=\"!showBackButton\"\n graniteMenuTouchTitleItem\n (click)=\"_handleBackClick($event)\"\n >\n {{ title }}\n </button>\n </div>\n\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n\n <div class=\"footer-container\"></div>\n </div>\n </div>\n\n <!-- Close button -->\n <div class=\"close\" [@transformCloseButton]=\"_transformMenu | async\">\n <button\n *ngIf=\"showCloseButton\"\n graniteMenuTouchCloseItem\n (click)=\"_handleCloseClick()\"\n >\n {{ closeLabel }}\n </button>\n </div>\n </ng-container>\n\n <!--\n Content template shared between desktop and touch parts, as <ng-content>\n can't be used in two places in the same template\n -->\n <ng-template #content>\n <ng-content></ng-content>\n </ng-template>\n</ng-template>\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Injection token used to provide components knowledge of what device types\n * are being used for input.\n */\nexport const GRANITE_CLIENT_INPUT = new InjectionToken<ClientInputInterface>(\n 'GRANITE_CLIENT_INPUT'\n);\n\n/**\n * Injection token used to provide components knowledge of what device type\n * is being used for output.\n */\nexport const GRANITE_CLIENT_OUTPUT = new InjectionToken<ClientOutputInterface>(\n 'GRANITE_CLIENT_OUTPUT'\n);\n\nexport type InputDeviceTypes =\n | void\n | 'touch'\n | 'mouse'\n | 'keyboard'\n | 'onscreen-keyboard';\n\nexport type OutputDeviceTypes =\n | void\n | 'touch' // TODO: Change to 'touch-screen' for touch\n | 'desktop'; // TODO: Change to 'screen' for desktop\n\nexport interface ClientInputInterface {\n devices: InputDeviceTypes[];\n}\n\nexport interface ClientOutputInterface {\n device: OutputDeviceTypes;\n}\n\ninterface DevicePrefabInterface {\n input: ClientInputInterface;\n output: ClientOutputInterface;\n}\n\nexport const deviceDesktop: DevicePrefabInterface = {\n input: { devices: ['mouse', 'keyboard'] },\n output: { device: 'desktop' },\n};\n\nexport const deviceTouch: DevicePrefabInterface = {\n input: { devices: ['touch', 'onscreen-keyboard'] },\n output: { device: 'touch' },\n};\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Self,\n SimpleChanges,\n ViewContainerRef,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport {\n FocusMonitor,\n FocusOrigin,\n isFakeMousedownFromScreenReader,\n} from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport {\n FlexibleConnectedPositionStrategy,\n HorizontalConnectionPos,\n Overlay,\n OverlayConfig,\n OverlayRef,\n PositionStrategy,\n ScrollStrategy,\n VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\n\nimport {\n asapScheduler,\n fromEvent,\n merge,\n Observable,\n of as observableOf,\n Subscription,\n} from 'rxjs';\nimport { delay, filter, take, takeUntil } from 'rxjs/operators';\n\nimport { _MenuBaseComponent } from './menu-base';\nimport { GraniteMenuItemComponent } from './menu-item.component';\nimport { ClosedEventType, GRANITE_MENU_PANEL } from './menu-panel';\n\n//#region --- Touch device customizations ---\nimport {\n ClientInputInterface,\n ClientOutputInterface,\n GRANITE_CLIENT_INPUT,\n GRANITE_CLIENT_OUTPUT,\n OutputDeviceTypes,\n} from '../core/client-environment';\nimport { throwGraniteMenuMissingError } from './menu-errors';\n\n/** Options for binding a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({\n passive: true,\n});\n//#endregion --- Touch device customizations ---\n\n/**\n * Directive used to turn a button element into a (popup) menu trigger\n *\n * Stripped-down version of Angular Material's menu trigger directive (.../menu/menu-trigger.ts)\n */\n@Directive({\n selector: `[graniteMenuTriggerFor]`,\n exportAs: 'graniteMenuTriggerFor',\n host: {\n class: 'granite-menu-trigger', // Required for test harness host selector\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'isMenuOpened || null',\n '[attr.aria-controls]': 'isMenuOpened ? menu.panelId : null',\n '(mousedown)': '_handleMousedown($event)',\n '(keydown)': '_handleKeydown($event)',\n '(click)': '_handleClick($event)',\n },\n})\nexport class GraniteMenuTriggerForDirective\n implements AfterContentInit, OnDestroy, OnChanges\n{\n /** References the menu instance that the trigger is associated with. */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('graniteMenuTriggerFor')\n menu: _MenuBaseComponent;\n\n @Input() openOnClick?: boolean = true;\n\n /** Whether the associated menu is open */\n isMenuOpened: boolean = false;\n\n // Tracking input type is necessary so it's possible to only auto-focus\n // the first item of the list when the menu is opened via the keyboard\n private openedBy: 'mouse' | 'touch' | null = null;\n\n private _hoverSubscription = Subscription.EMPTY;\n private _menuCloseSubscription = Subscription.EMPTY;\n private _closingActionsSubscription = Subscription.EMPTY;\n\n private _portal: TemplatePortal | null = null;\n private _overlayRef: OverlayRef | null = null;\n private _document?: Document;\n\n // ----------------------------------------- //\n // --- Here be poor man's touch gestures --- //\n // ----------------------------------------- //\n\n // TODO: Replace with Hammer or other gesture library\n\n private _touchStartTime: number;\n private _touchTimeTaken: number;\n private _touchStartX: number;\n private _touchStartY: number;\n private _touchCurrentX: number;\n private _touchCurrentY: number;\n private _touchTranslateX: number;\n private _touchLockedX: boolean | null;\n private _touchMaxX: number;\n private _touchTouchingElement: boolean = false;\n\n constructor(\n private _overlay: Overlay,\n private _element: ElementRef<HTMLElement>,\n private _viewContainerRef: ViewContainerRef,\n private _changeDetectionRef: ChangeDetectorRef,\n\n /** If this is a _submenu_ trigger, it will have a parent menu */\n @Inject(GRANITE_MENU_PANEL)\n @Optional()\n private _parentMenu: _MenuBaseComponent,\n\n //#region --- Touch device customizations ---\n /** Client input device information */\n @Inject(GRANITE_CLIENT_INPUT)\n @Optional()\n private _clientInput: ClientInputInterface,\n\n /** Client output device information */\n @Inject(GRANITE_CLIENT_OUTPUT)\n @Optional()\n private _clientOutput: ClientOutputInterface,\n //#endregion --- Touch device customizations ---\n\n /**\n * If this is a _submenu_ trigger, there should be a corresponding menu\n * item directive present as well:\n *\n * <button graniteMenuItem [graniteMenuTriggerFor]=\"...\">\n * ^-- This one\n */\n @Optional() @Self() private _menuItemInstance: GraniteMenuItemComponent,\n\n @Optional() private _dir: Directionality,\n private _focusMonitor: FocusMonitor,\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n @Inject(DOCUMENT) document?: any\n ) {\n _element.nativeElement.addEventListener(\n 'touchstart',\n this._handleTouchStart,\n passiveEventListenerOptions\n );\n\n if (_menuItemInstance) {\n _menuItemInstance._triggersSubmenu = this.triggersSubmenu();\n }\n\n this._document = document as Document;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.menu) {\n this._handleMenuChange();\n }\n }\n\n ngAfterContentInit(): void {\n // removed checkMenu here to avoid errors in dynamically genarated menus\n // menu is checked when opening the menu\n // this._checkMenu();\n this._handleHover();\n }\n\n ngOnDestroy(): void {\n if (this._overlayRef) {\n //#region --- Touch device customizations ---\n this.removeOverlayListeners();\n //#endregion --- Touch device customizations ---\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n\n this._element.nativeElement.removeEventListener(\n 'touchstart',\n this._handleTouchStart,\n passiveEventListenerOptions\n );\n\n this._hoverSubscription.unsubscribe();\n this._menuCloseSubscription.unsubscribe();\n this._closingActionsSubscription.unsubscribe();\n }\n\n /** Handles change of associated menu */\n _handleMenuChange(): void {\n this._menuCloseSubscription.unsubscribe();\n\n // Close the menu overlay when the menu itself says it wants to be closed\n if (this.menu) {\n const closed = this.menu.closed as Observable<ClosedEventType>;\n\n this._menuCloseSubscription = closed.subscribe((reason) => {\n //#region --- Touch device customizations ---\n if (this.menu._isClosing) {\n return;\n }\n this.menu._isClosing = true;\n\n // Get rid of the menu and tell any parent to restore its position\n if (this._clientOutput.device === 'touch') {\n // First we wait for any running animation to complete\n const runningAnimationDone: Observable<any> = this.menu._isAnimating\n ? this.menu._animationDone\n : observableOf([null]);\n\n runningAnimationDone\n .pipe(take(1), delay(0, asapScheduler))\n .subscribe(() => {\n this.animateCloseMenu(reason !== 'keydown', reason === 'click');\n this.menu._animationDone\n .pipe(take(1), delay(0, asapScheduler))\n .subscribe(() => this._destroyMenu());\n });\n } else {\n //#endregion --- Touch device customizations ---\n this._destroyMenu();\n }\n\n // If a click closed the menu, we should close the entire chain of nested menus.\n if ((reason === 'click' || reason === 'tab') && this._parentMenu) {\n this._parentMenu.closed.emit(reason);\n }\n });\n }\n }\n\n isOpen(): boolean {\n return this.isMenuOpened;\n }\n\n /** Open the associated menu */\n openMenu(): void {\n if (this.isMenuOpened) {\n return;\n }\n this.openedEvent();\n\n this._checkMenu();\n\n this.menu.parentMenu = this.triggersSubmenu()\n ? this._parentMenu\n : undefined;\n this.menu.direction = this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n\n if (this._parentMenu) {\n // Menu triggers inherit target device types from their parent.\n // Ultimately it is the root trigger that determines device types for\n // the whole menu hierarchy.\n this._clientInput = this._parentMenu._clientInput;\n this._clientOutput = this._parentMenu._clientOutput;\n }\n\n //#region --- Touch device customizations ---\n // Make the menu we're about to open use the same devices as the trigger\n this.menu._setDevice(this._clientInput, this._clientOutput);\n\n if (this._clientOutput.device === 'touch') {\n this.menu.showBackButton = !!this._parentMenu;\n this.menu._updateShowTitle();\n\n if (!this.menu.closeLabel) {\n this.menu.closeLabel = this._parentMenu?.closeLabel;\n }\n\n this.menu.showCloseButton = !!this.menu.closeLabel;\n }\n this.menu._isClosing = false;\n\n const panelClass: string[] = [];\n if (this._clientOutput.device === 'touch') {\n panelClass.push('granite-overlay-pane-fill-width-bottom');\n }\n\n // setting scrollStrategy options to overlay\n const scrollStrategy = this.setScrollStrategyToOverylay(\n this._clientOutput.device,\n this.menu.scrollStrategy\n );\n\n const hasBackdrop =\n this._clientOutput.device === 'touch' && !this.triggersSubmenu();\n //#endregion --- Touch device customizations ---\n\n // Create an overlay to stuff the menu (portal) into below\n if (!this._overlayRef) {\n const config = new OverlayConfig({\n positionStrategy: this._positionStrategy(),\n backdropClass: 'granite-overlay-dark-glass-backdrop',\n scrollStrategy,\n direction: this._dir,\n panelClass,\n hasBackdrop,\n });\n\n this._overlayRef = this._overlay.create(config);\n\n //#region --- Touch device customizations ---\n // Add touch listener for submenu back pan/swipe\n if (this._clientOutput.device === 'touch') {\n this.addOverlayListeners();\n }\n //#endregion --- Touch device customizations ---\n } else {\n // Reset animation state for reused overlays\n if (this._clientOutput.device === 'touch') {\n this.menu._panelAnimationState = 'void';\n }\n }\n\n // Create portal from associated menu's template\n if (!this._portal || this._portal.templateRef !== this.menu.templateRef) {\n this._portal = new TemplatePortal(\n this.menu.templateRef,\n this._viewContainerRef\n );\n }\n\n // Attach menu portal to overlay ref (which is a portal outlet)\n this._overlayRef.attach(this._portal);\n\n // Subscribe to stream that emits whenever an action that should close the menu occurs\n this._closingActionsSubscription = this._menuClosingActions().subscribe(\n () => this.closeMenu()\n );\n\n this.animateOpenMenu();\n\n this._setIsMenuOpen(true);\n this.menu.focusFirstItem(this.openedBy || 'program');\n }\n\n /** Emits an eventtype when the menu is opened */\n openedEvent(): void {\n if (this.openedBy === 'touch' || this.openedBy === 'mouse') {\n this.menu.opened.emit('click');\n } else {\n this.menu.opened.emit('keydown');\n }\n }\n\n /** Whether the menu triggers a sub-menu or a top-level one. */\n triggersSubmenu(): boolean {\n return !!(this._menuItemInstance && this._parentMenu);\n }\n\n /** Toggles the menu between the open and closed states. */\n toggleMenu(): void {\n if (this.isMenuOpened) {\n this.closeMenu();\n } else if (this.openOnClick) {\n this.openMenu();\n }\n }\n\n /** Close the associated menu */\n closeMenu(): void {\n this.menu.closed.emit();\n }\n\n /**\n * Focuses the menu trigger.\n * @param origin Source of the menu trigger's focus.\n */\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(this._element, origin, options);\n } else {\n this._element.nativeElement.focus(options);\n }\n }\n\n /** Detach menu portal from overlay and update open state */\n _destroyMenu(): void {\n if (!this._overlayRef || !this.isMenuOpened) {\n return;\n }\n\n this._closingActionsSubscription.unsubscribe();\n this._overlayRef.detach();\n this._restoreFocus();\n this.menu._resetAnimation();\n\n this._setIsMenuOpen(false);\n }\n\n /** Handles mouse presses on the trigger. */\n _handleMousedown(event: MouseEvent): void {\n if (!isFakeMousedownFromScreenReader(event)) {\n if (this.openedBy !== 'touch') {\n // Since right or middle button clicks won't trigger the `click` event,\n // we shouldn't consider the menu as opened by mouse in those cases.\n this.openedBy = event.button === 0 ? 'mouse' : null;\n }\n\n // Since clicking on the trigger won't close the menu if it opens a sub-menu,\n // we should prevent focus from moving onto it via click to avoid the\n // highlight from lingering on the menu item.\n if (this.triggersSubmenu() && !this._toggleOnSubmenuClick()) {\n event.preventDefault();\n }\n }\n }\n\n /** Handles key presses on the trigger. */\n _handleKeydown(event: KeyboardEvent): void {\n const key = event.key;\n\n if (\n this.triggersSubmenu() &&\n ((key === 'ArrowRight' && this._dir.value === 'ltr') ||\n (key === 'ArrowLeft' && this._dir.value === 'rtl'))\n ) {\n this.openMenu();\n }\n }\n\n /** Handles click events on the trigger. */\n _handleClick(event: MouseEvent): void {\n if (this.triggersSubmenu()) {\n // Stop event propagation to avoid closing the parent menu.\n event.stopPropagation();\n\n this._toggleOnSubmenuClick() ? this.toggleMenu() : this.openMenu();\n } else {\n this.toggleMenu();\n }\n }\n\n /**\n * Handles touch start events on the trigger.\n * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n */\n private _handleTouchStart = () => {\n this.openedBy = 'touch';\n };\n\n /** Handles the cases where the user hovers over the trigger. */\n private _handleHover() {\n // Subscribe to changes in the hovered item in order to toggle the panel.\n if (!this.triggersSubmenu() || !this._parentMenu) {\n return;\n }\n\n this._hoverSubscription = this._parentMenu\n ._hovered()\n .pipe(\n filter(() => this._openOnHover()),\n // Since we might have multiple competing triggers for the same menu (e.g. a sub-menu\n // with different data and triggers), we have to delay it by a tick to ensure that\n // it won't be closed immediately after it is opened.\n filter(\n (active) => active === this._menuItemInstance /*&& !active.disabled*/\n ),\n delay(0, asapScheduler)\n )\n .subscribe(() => {\n this.openedBy = 'mouse';\n\n // If the same menu is used between multiple triggers, it might still be animating\n // while the new trigger tries to re-open it. Wait for the animation to finish\n // before doing so. Also interrupt if the user moves to another item.\n if (this.menu instanceof _MenuBaseComponent && this.menu._isAnimating) {\n // We need the `delay(0)` here in order to avoid\n // 'changed after checked' errors in some cases. See Angular Material #12194.\n this.menu._animationDone\n .pipe(\n take(1),\n delay(0, asapScheduler),\n takeUntil(this._parentMenu._hovered())\n )\n .subscribe(() => this.openMenu());\n } else {\n this.openMenu();\n }\n });\n }\n\n /**\n * Restores focus to the element that was focused before the menu was open.\n * Could be the root trigger button or a submenu trigger item\n */\n private _restoreFocus() {\n // We should reset focus if the user is navigating using a keyboard or\n // if we have a top-level trigger which might cause focus to be lost\n // when clicking outside of the menu.\n if (!this.openedBy) {\n // Note that the focus style will show up both for `program` and\n // `keyboard` so we don't have to specify which one it is.\n this.focus();\n } else if (!this.triggersSubmenu()) {\n this.focus(this.openedBy);\n }\n\n this.openedBy = null;\n }\n\n // Set state rather than toggle to support triggers sharing a menu\n private _setIsMenuOpen(isOpen: boolean): void {\n if (this.isMenuOpened !== isOpen) {\n this._changeDetectionRef.markForCheck();\n }\n\n this.isMenuOpened = isOpen;\n\n if (this.triggersSubmenu()) {\n this._menuItemInstance._highlighted =\n isOpen && this._clientOutput.device !== 'touch';\n }\n }\n\n /**\n * This method checks that a valid instance of MenuComponent has been passed into\n * graniteMenuTriggerFor. If not, an exception is thrown.\n */\n private _checkMenu() {\n if (!this.menu) {\n throwGraniteMenuMissingError();\n }\n }\n\n /**\n * Returns strategy for positioning the overlay for desktop devices:\n * Place adjacent to the trigger button (preferably immediately below)\n * in order to show as much of the menu as possible.\n */\n private _desktopPositionStrategy(): PositionStrategy {\n const positionStrategy: FlexibleConnectedPositionStrategy = this._overlay\n .position()\n .flexibleConnectedTo(this._element)\n .withLockedPosition()\n .withTransformOriginOn('.granite-menu');\n\n this._setPosition(positionStrategy);\n return positionStrategy;\n }\n\n /**\n * Sets the appropriate positions on a position strategy\n * so the overlay connects with the trigger correctly.\n * @param positionStrategy Strategy whose position to update.\n */\n private _setPosition(positionStrategy: FlexibleConnectedPositionStrategy) {\n const MENU_PANEL_TOP_PADDING = 0;\n\n let [originX, originFallbackX]: HorizontalConnectionPos[] =\n this.menu.xPosition === 'before' ? ['end', 'start'] : ['start', 'end'];\n\n const [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\n this.menu.yPosition === 'above' ? ['bottom', 'top'] : ['top', 'bottom'];\n\n let [originY, originFallbackY] = [overlayY, overlayFallbackY];\n let [overlayX, overlayFallbackX] = [originX, originFallbackX];\n let offsetY = 0;\n\n if (this.triggersSubmenu()) {\n // When the menu is a sub-menu, it should always align itself\n // to the edges of the trigger, instead of overlapping it.\n overlayFallbackX = originX =\n this.menu.xPosition === 'before' ? 'start' : 'end';\n originFallbackX = overlayX = originX === 'end' ? 'start' : 'end';\n offsetY =\n overlayY === 'bottom'\n ? MENU_PANEL_TOP_PADDING\n : -MENU_PANEL_TOP_PADDING;\n } else {\n originY = overlayY === 'top' ? 'bottom' : 'top';\n originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n }\n\n positionStrategy.withPositions([\n { originX, originY, overlayX, overlayY, offsetY },\n {\n originX: originFallbackX,\n originY,\n overlayX: overlayFallbackX,\n overlayY,\n offsetY,\n },\n {\n originX,\n originY: originFallbackY,\n overlayX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n {\n originX: originFallbackX,\n originY: originFallbackY,\n overlayX: overlayFallbackX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n ]);\n }\n\n /** Returns a stream that emits whenever an action that should close the menu occurs. */\n private _menuClosingActions() {\n const detachments = this._overlayRef?.detachments();\n const parentClose = this._parentMenu\n ? this._parentMenu.closed\n : observableOf<ClosedEventType>(null);\n\n const hover =\n this._clientOutput.device === 'desktop' && this._parentMenu\n ? this._parentMenu._hovered().pipe(\n filter((item) => item !== this._menuItemInstance),\n filter(() => this.isMenuOpened)\n )\n : observableOf<ClosedEventType>(null);\n\n // Note: Quick fix. Feature reportedly exists in CDK for Angular 10\n // Filter to prevent closing when animating added though. Applied to\n // root menu only.\n const outsideClick = !this._parentMenu\n ? fromEvent<MouseEvent>(this._document, 'click').pipe(\n filter(\n (e: MouseEvent) =>\n (e.target as HTMLElement) !== this._element.nativeElement &&\n (e.target as HTMLElement).closest('.granite-menu') === null\n ),\n filter(() => !this.menu._isAnimating)\n )\n : observableOf<MouseEvent | null>(null);\n\n return merge(detachments, hover, parentClose, outsideClick).pipe(\n filter((event) => event !== null)\n );\n }\n\n /**\n * Whether to automatically open submenus on hover. This is true when showing\n * desktop menus and having mouse support.\n */\n private _openOnHover(): boolean {\n return (\n (this.triggersSubmenu()\n ? this._parentMenu.openOnHover\n : this.menu.openOnHover) &&\n this._parentMenu._clientOutput?.device === 'desktop' &&\n this._parentMenu._clientInput?.devices.includes('mouse')\n );\n }\n\n /**\n * Whether to toggle submenus on click. This is true when showing desktop menus\n * without mouse support. Which, by the way, is not a great idea to begin with.\n */\n private _toggleOnSubmenuClick(): boolean {\n return (\n !(this.triggersSubmenu()\n ? this._parentMenu.openOnHover\n : this.menu.openOnHover) ||\n (this._parentMenu._clientOutput?.device === 'desktop' &&\n !this._parentMenu._clientInput?.devices.includes('mouse'))\n );\n }\n\n // ------------------------------------------- //\n // --- Here be touch device customizations --- //\n // ------------------------------------------- //\n\n /** Set animation state to bring a newly opened menu into view */\n private animateOpenMenu() {\n this._clientOutput.device === 'touch'\n ? this.animateTouchOpenMenu()\n : this.menu._startAnimation();\n }\n\n private animateTouchOpenMenu() {\n if (this.triggersSubmenu()) {\n // Slide newly opened sub menu into view from the side,\n // pushing any parent menu out of view on the other side\n this.menu._startTouchSubmenuEnterAnimation();\n this._parentMenu._startTouchHideAnimation();\n } else {\n // Slide root menu into view from below\n this.menu._startTouchRootEnterAnimation();\n }\n }\n\n /** Set animation state to close the active menu */\n private animateCloseMenu(toBelow: boolean, withDelay: boolean) {\n this._clientOutput.device === 'touch'\n ? this._animateTouchCloseMenu(toBelow, withDelay)\n : this._parentMenu._resetAnimation();\n }\n\n private _animateTouchCloseMenu(toBelow: boolean, withDelay: boolean) {\n if (toBelow) {\n // Slide menu out of view below the viewport\n withDelay\n ? this.menu._startTouchCloseDownAnimationWithDelay()\n : this.menu._startTouchCloseDownAnimation();\n } else {\n // Slide the closed menu out of view to the side\n // and slide any parent menu back into view\n this.menu._startTouchCloseSideAnimation();\n this._parentMenu?._startTouchSubmenuEnterAnimation();\n }\n }\n\n /**\n * Set animation state to place the menu and any parent at the given\n * horizontal position, i.e. following touch pan movement.\n *\n * @param xOffset Horizontal offset\n */\n private animateSetMenuPosition(xOffset: number) {\n this.menu._startTouchPanAnimation(xOffset);\n if (this._parentMenu) {\n this._parentMenu._startTouchHidePanAnimation(xOffset);\n }\n }\n\n /**\n * Returns strategy for positioning the overlay depending on what type of\n * device the menu is being shown on\n */\n private _positionStrategy(): PositionStrategy {\n return this._clientOutput.device === 'touch'\n ? this._touchPositionStrategy()\n : this._desktopPositionStrategy();\n }\n\n /**\n * Returns strategy for positioning the overlay for touch devices:\n * Place centered at the bottom of the screen.\n */\n private _touchPositionStrategy(): PositionStrategy {\n return this._overlay.position().global();\n }\n\n // ----------------------------------------- //\n // --- Here be poor man's touch gestures --- //\n // ----------------------------------------- //\n\n // TODO: Replace with Hammer or other gesture library\n\n /**\n * Handles touch start events on the overlay host element (wrapper).\n * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n */\n private _handleOverlayTouchStart = (event: TouchEvent) => {\n if (this.menu._isAnimating) {\n return;\n }\n\n this._touchStartTime = new Date().getTime();\n\n this._touchStartX = event.changedTouches[0].clientX;\n this._touchStartY = event.changedTouches[0].clientY;\n this._touchCurrentX = this._touchStartX;\n this._touchCurrentY = this._touchStartY;\n this._touchTranslateX = 0;\n this._touchMaxX =\n this._overlayRef.hostElement.getBoundingClientRect().width;\n this._touchLockedX = null;\n this._touchTouchingElement = true;\n };\n\n private _handleOverlayTouchMove = (event: TouchEvent) => {\n if (!this._touchTouchingElement || this.menu._isAnimating) {\n return;\n }\n\n if (this._touchLockedX) {\n return;\n }\n\n this._touchCurrentX = event.changedTouches[0].clientX;\n this._touchCurrentY = event.changedTouches[0].clientY;\n\n // Lock X-axis pan if initiating pan on Y-axis\n if (this._touchLockedX === null) {\n const dy = Math.abs(this._touchCurrentY - this._touchStartY);\n const dx = Math.abs(this._touchCurrentX - this._touchStartX);\n if (dx > 10 || dy > 10) {\n this._touchLockedX = dy > dx;\n return;\n }\n }\n\n // Restrict to right pan/swipe and make menu movement extremely slow when\n // moved past allowed limits.\n const menuMargin = 16;\n this._touchTranslateX = this._touchCurrentX - this._touchStartX;\n\n if (this._touchTranslateX < 0) {\n this._touchTranslateX = this.easeOutExpo(\n this._touchTranslateX,\n 0,\n -menuMargin / 2,\n this._touchMaxX * -4\n );\n } else if (!this._parentMenu) {\n this._touchTranslateX = this.easeOutExpo(\n this._touchTranslateX,\n 0,\n menuMargin / 2,\n this._touchMaxX * 4\n );\n } else if (this._touchTranslateX > this._touchMaxX) {\n this._touchTranslateX = this.easeOutExpo(\n this._touchTranslateX - this._touchMaxX,\n this._touchMaxX,\n menuMargin / 2,\n this._touchMaxX * 4\n );\n }\n\n // Set new sub menu position and tell any parent to follow;\n this.animateSetMenuPosition(this._touchTranslateX);\n };\n\n private _handleOverlayTouchEnd = () => {\n if (!this._touchTouchingElement || this.menu._isAnimating) {\n return;\n }\n\n this._touchTranslateX = this._touchCurrentX - this._touchStartX;\n if (this._touchTranslateX === 0) {\n return;\n }\n\n this._touchTouchingElement = false;\n this._touchTimeTaken = new Date().getTime() - this._touchStartTime;\n\n const swipeMinDistance = 10;\n const swipeMinTime = 50;\n const swipeMaxTime = 300;\n\n const pannedHalfwayRight = this._touchTranslateX > this._touchMaxX / 2;\n const swipedRight =\n this._touchTranslateX > this._touchMaxX / swipeMinDistance &&\n this._touchTimeTaken > swipeMinTime &&\n this._touchTimeTaken < swipeMaxTime;\n\n if (!!this._parentMenu && (swipedRight || pannedHalfwayRight)) {\n // Close submenu keydown-style: close only this menu and leave parents open\n this.menu.closed.emit('keydown');\n } else {\n // Pan ended but the menu was not moved far enough. Reset menus to\n // where they were before panning stared.\n this.animateOpenMenu();\n }\n };\n\n /**\n * Remove touch device pan/swipe listeners from overlay host element\n */\n private addOverlayListeners() {\n this._overlayRef.hostElement.addEventListener(\n 'touchstart',\n this._handleOverlayTouchStart,\n passiveEventListenerOptions\n );\n\n this._overlayRef.hostElement.addEventListener(\n 'touchmove',\n this._handleOverlayTouchMove,\n passiveEventListenerOptions\n );\n\n this._overlayRef.hostElement.addEventListener(\n 'touchend',\n this._handleOverlayTouchEnd,\n passiveEventListenerOptions\n );\n }\n\n /**\n * Remove touch device pan/swipe listeners from overlay host element\n */\n private removeOverlayListeners() {\n this._overlayRef.hostElement.removeEventListener(\n 'touchstart',\n this._handleOverlayTouchStart,\n passiveEventListenerOptions\n );\n\n this._overlayRef.hostElement.removeEventListener(\n 'touchmove',\n this._handleOverlayTouchMove,\n passiveEventListenerOptions\n );\n\n this._overlayRef.hostElement.removeEventListener(\n 'touchend',\n this._handleOverlayTouchEnd,\n passiveEventListenerOptions\n );\n }\n\n /**\n * Standard exponential ease out function\n *\n * @param current Current value\n * @param offset Offset value, to which calculated value will be added\n * @param target The target value\n * @param end Value to which current value is compared\n */\n private easeOutExpo(\n current: number,\n offset: number,\n target: number,\n end: number\n ): number {\n return current === end\n ? offset + target\n : target * (-Math.pow(2, (-10 * current) / end) + 1) + offset;\n }\n\n /**\n * Sets the scroll strategy for the overlay based on the client output device and menu scroll strategy input.\n *\n * @param {OutputDeviceTypes} clientOutputDevice - The type of client output device (e.g., 'touch').\n * @param {'reposition' | 'close'} menuScrollStrategyInput - The scroll strategy input for the menu.\n * @returns {ScrollStrategy} The appropriate scroll strategy for the overlay.\n */\n private setScrollStrategyToOverylay(\n clientOutputDevice: OutputDeviceTypes,\n menuScrollStrategyInput: 'reposition' | 'close'\n ): ScrollStrategy {\n if (clientOutputDevice === 'touch') {\n return undefined;\n } else {\n if (menuScrollStrategyInput === 'close') {\n return this._overlay.scrollStrategies.close();\n } else if (menuScrollStrategyInput === 'reposition') {\n return this._overlay.scrollStrategies.reposition();\n } else {\n return undefined;\n }\n }\n }\n}\n","import { Directive, Input } from '@angular/core';\n\n@Directive({\n selector: '[graniteDivider]',\n exportAs: 'graniteDivider',\n host: {\n '[class.granite-divider-top]': 'dividerDirection === \"top\"',\n '[class.granite-divider-bottom]': 'dividerDirection === \"bottom\"',\n },\n})\nexport class GraniteDividerDirective {\n @Input()\n dividerDirection: string = 'top';\n}\n","import { NgModule } from '@angular/core';\nimport { GraniteIconComponent } from './icon.component';\n\n@NgModule({\n declarations: [GraniteIconComponent],\n exports: [GraniteIconComponent],\n})\nexport class GraniteIconModule {}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[graniteTitle]',\n exportAs: 'graniteTitle',\n host: {\n '[class.granite-title]': 'true',\n },\n})\nexport class GraniteTitleDirective {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\n\nimport { GraniteMenuComponent } from './menu.component';\nimport { GraniteMenuItemComponent } from './menu-item.component';\nimport { GraniteMenuTriggerForDirective } from './menu-trigger-for.directive';\nimport { GraniteMenuTouchCloseComponent } from './menu-touch-close.component';\nimport { GraniteMenuTouchTitleItemComponent } from './menu-touch-title.component';\nimport { GraniteDividerDirective } from './divider.directive';\nimport { GraniteIconModule } from '../icon/icon.module';\nimport { GraniteTitleDirective } from './title.directive';\n\n@NgModule({\n declarations: [\n GraniteMenuComponent,\n GraniteMenuItemComponent,\n GraniteMenuTriggerForDirective,\n GraniteMenuTouchCloseComponent,\n GraniteMenuTouchTitleItemComponent,\n GraniteDividerDirective,\n GraniteTitleDirective,\n ],\n imports: [CommonModule, OverlayModule, PortalModule, GraniteIconModule],\n exports: [\n GraniteMenuComponent,\n GraniteMenuItemComponent,\n GraniteMenuTriggerForDirective,\n GraniteMenuTouchCloseComponent,\n GraniteMenuTouchTitleItemComponent,\n GraniteDividerDirective,\n GraniteTitleDirective,\n ],\n})\nexport class GraniteMenuModule {}\n","import {\n ComponentHarness,\n TestKey,\n TestElement,\n BaseHarnessFilters,\n HarnessPredicate,\n} from '@angular/cdk/testing';\n\n/**\n * Test harness for menu component\n *\n * Stripped-down version of the Angular Material menu test harness (.../menu/menu-harness.ts)\n * just to get things going.\n */\nexport class GraniteMenuHarness extends ComponentHarness {\n /**\n * The selector for the host element of a `MenuComponent` instance,\n * i.e. the button element used to open the menu.\n */\n static hostSelector = '.granite-menu-trigger';\n\n private _documentRootLocator = this.documentRootLocatorFactory();\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MenuHarness` that meets\n * certain criteria.\n * @param options Options for filtering which menu item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(\n options: GraniteMenuHarnessFilters = {}\n ): HarnessPredicate<GraniteMenuHarness> {\n return new HarnessPredicate(GraniteMenuHarness, options).addOption(\n 'text',\n options.text,\n /* @dynamic */ (harness, text) =>\n HarnessPredicate.stringMatches(harness.getText(), text)\n );\n }\n\n /** Gets the text of the menu trigger */\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n\n /** Opens the menu, unless already open */\n async open(): Promise<void> {\n if (!(await this.isOpen())) {\n await (await this.host()).click();\n // This is necessary so that we wait for the opening animation to finish.\n return this.forceStabilize();\n }\n }\n\n /** Closes the menu, unless already closed */\n async close(): Promise<void> {\n await (await this._getMenuPanel())?.sendKeys(TestKey.ESCAPE);\n // This is necessary so that we wait for the closing animation to finish.\n return this.forceStabilize();\n }\n\n /** Whether the menu is open */\n async isOpen(): Promise<boolean> {\n return !!(await this._getMenuPanel());\n }\n\n /**\n * Gets a list of `GraniteMenuItemHarness` representing the items in the menu.\n * @param filters Optionally filters which menu items are included.\n */\n async getItems(\n filters: Omit<GraniteMenuItemHarnessFilters, 'ancestor'> = {}\n ): Promise<GraniteMenuItemHarness[]> {\n const panelId = await this._getPanelId();\n if (panelId) {\n return this._documentRootLocator.locatorForAll(\n GraniteMenuItemHarness.with({ ...filters, ancestor: `#${panelId}` })\n )();\n }\n return [];\n }\n\n /** Gets the menu panel (popup) associated with the menu */\n private async _getMenuPanel(): Promise<TestElement | null> {\n const panelId = await this._getPanelId();\n return panelId\n ? this._documentRootLocator.locatorForOptional(`#${panelId}`)()\n : null;\n }\n\n /** Gets the id of the menu panel (popup) associated with this menu */\n private async _getPanelId(): Promise<string | null> {\n const panelId = await (await this.host()).getAttribute('aria-controls');\n return panelId || null;\n }\n}\n\nexport class GraniteMenuItemHarness extends ComponentHarness {\n /** The selector for the host element of a `MenuItemComponent` instance. */\n static hostSelector = '.granite-menu-item';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `GraniteMenuItemHarness` that meets\n * certain criteria.\n * @param options Options for filtering which menu item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(\n options: GraniteMenuItemHarnessFilters = {}\n ): HarnessPredicate<GraniteMenuItemHarness> {\n return new HarnessPredicate(GraniteMenuItemHarness, options).addOption(\n 'text',\n options.text,\n /* @dynamic */ (harness, text) =>\n HarnessPredicate.stringMatches(harness.getText(), text)\n );\n }\n\n /** Gets the text of the menu item. */\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n\n /** Whether this item has a submenu. */\n async hasSubmenu(): Promise<boolean> {\n return (await this.host()).matchesSelector(GraniteMenuHarness.hostSelector);\n }\n\n /** Gets the submenu associated with this menu item, or null if none. */\n async getSubmenu(): Promise<GraniteMenuHarness | null> {\n if (await this.hasSubmenu()) {\n return new GraniteMenuHarness(this.locatorFactory);\n }\n return null;\n }\n\n /** Clicks the menu item. */\n async click(): Promise<void> {\n await (await this.host()).click();\n // This is necessary so that we wait for the opening animation to finish. (i.e. if it opens another menu)\n return this.forceStabilize();\n }\n}\n\n/** A set of criteria that can be used to filter a list of `MenuHarness` instances. */\nexport interface GraniteMenuHarnessFilters extends BaseHarnessFilters {\n /** Only find instances whose text matches the given value. */\n text?: string | RegExp;\n}\n\n/** A set of criteria that can be used to filter a list of `GraniteMenuItemHarness` instances. */\nexport interface GraniteMenuItemHarnessFilters extends BaseHarnessFilters {\n /** Only find instances whose text matches the given value. */\n text?: string | RegExp;\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n Output,\n OnChanges,\n SimpleChanges,\n EventEmitter,\n ElementRef,\n ViewChild,\n} from '@angular/core';\n\nimport { Position } from '../core/types';\n\n@Component({\n selector: 'granite-toggle-switch',\n exportAs: 'graniteToggleSwitch',\n host: {\n class: 'granite-toggle-switch',\n '[class.granite-toggle-switch-checked]': 'checked',\n '[class.granite-toggle-switch-disabled]': 'disabled',\n '[class.granite-toggle-switch-readonly]': 'readonly',\n '[class.granite-toggle-switch-label-before]': '_positionBefore',\n },\n templateUrl: './toggle-switch.component.html',\n styleUrls: ['./toggle-switch.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteToggleSwitchComponent implements OnChanges {\n @Input()\n id: string | null = null;\n\n @Input()\n checked: boolean = false;\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n readonly: boolean = false;\n\n @Input()\n labelPosition: Position = 'after';\n\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n\n @Output()\n readonly valueChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @Output()\n readonly toggleChange: EventEmitter<void> = new EventEmitter<void>();\n\n @Output()\n readonly toggleBlur: EventEmitter<void> = new EventEmitter<void>();\n\n @ViewChild('input')\n private _inputElement: ElementRef<HTMLInputElement>;\n\n _positionBefore: boolean = false;\n _toggleSwitchDisabled: boolean = false;\n\n constructor(private _focusMonitor: FocusMonitor) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.checked) {\n this.checked = coerceBooleanProperty(changes.checked.currentValue);\n }\n\n if (changes.disabled) {\n this.disabled = coerceBooleanProperty(changes.disabled.currentValue);\n }\n\n if (changes.readonly) {\n this.readonly = coerceBooleanProperty(changes.readonly.currentValue);\n }\n\n if (changes.labelPosition != null) {\n this._positionBefore =\n changes.labelPosition.currentValue != null &&\n changes.labelPosition.currentValue === 'before';\n }\n\n // conditional checker if the control is either/both in readonly or disabled state\n if (changes.disabled || changes.readonly) {\n if (this.disabled || this.readonly) {\n this._toggleSwitchDisabled = true;\n } else this._toggleSwitchDisabled = false;\n }\n }\n\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n this._focusMonitor.focusVia(this._getInputElement(), origin, options);\n }\n\n _onBlur(): void {\n this.toggleBlur.emit();\n }\n\n _toggleSwitchChange(): void {\n this.checked = this._getInputElement().checked;\n this.valueChange.emit(this.checked);\n }\n\n _toggleSwitchClick(): void {\n this.toggleChange.emit();\n }\n\n private _getInputElement(): HTMLInputElement {\n return this._inputElement.nativeElement;\n }\n}\n","<label [attr.for]=\"id\" class=\"granite-toggle-switch-label\">\n <div class=\"granite-toggle-switch-bar\">\n <input\n #input\n [id]=\"id\"\n class=\"granite-toggle-switch-input cdk-visually-hidden\"\n role=\"switch\"\n type=\"checkbox\"\n [attr.aria-checked]=\"checked.toString()\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [checked]=\"checked\"\n [disabled]=\"_toggleSwitchDisabled\"\n [readonly]=\"readonly\"\n (click)=\"_toggleSwitchClick()\"\n (change)=\"_toggleSwitchChange()\"\n (blur)=\"_onBlur()\"\n />\n <div class=\"granite-toggle-switch-thumb\"></div>\n </div>\n <span class=\"granite-toggle-switch-text\"><ng-content></ng-content></span>\n</label>\n","import { NgModule } from '@angular/core';\nimport { GraniteToggleSwitchComponent } from './toggle-switch.component';\n\n@NgModule({\n declarations: [GraniteToggleSwitchComponent],\n exports: [GraniteToggleSwitchComponent],\n})\nexport class GraniteToggleSwitchModule {}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n ElementRef,\n} from '@angular/core';\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport { Position } from '../core/types';\n@Component({\n selector: 'granite-radio-button',\n exportAs: 'graniteRadioButton',\n host: {\n class: 'granite-radio-button',\n '[class.granite-radio-button-disabled]': 'disabled',\n '[class.granite-radio-button-label-before]': '_positionBefore',\n '[class.granite-radio-button-checked]': 'checked',\n '[class.granite-radio-button-readonly]': 'readonly',\n },\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteRadioButtonComponent implements OnChanges, OnDestroy {\n // Selected value for the radio group.\n @Input()\n value: any;\n\n @Input()\n id: string | null = null;\n\n @Input()\n name: string;\n\n @Input()\n checked: boolean = false;\n\n @Input()\n required: boolean = false;\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n readonly: boolean = false;\n\n @Input()\n labelPosition: Position = 'after';\n\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n\n @Output()\n readonly radioChange: EventEmitter<any> = new EventEmitter();\n\n @Output()\n readonly radioBlur: EventEmitter<void> = new EventEmitter<void>();\n\n @ViewChild('input')\n private _inputElement: ElementRef<HTMLInputElement>;\n\n _positionBefore: boolean = false;\n _radioDisabled: boolean = false;\n\n private _removeUniqueSelectionListenerFn: () => void;\n\n constructor(\n private _focusMonitor: FocusMonitor,\n private _radioDispatcher: UniqueSelectionDispatcher\n ) {\n this._removeUniqueSelectionListenerFn = _radioDispatcher.listen(\n (id: string, name: string) => {\n if (id !== this.id && name === this.name) {\n this.checked = false;\n }\n }\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.checked) {\n this.checked = coerceBooleanProperty(changes.checked.currentValue);\n }\n\n if (changes.required) {\n this.required = coerceBooleanProperty(changes.required.currentValue);\n }\n\n if (changes.readonly) {\n this.readonly = coerceBooleanProperty(changes.readonly.currentValue);\n }\n\n if (changes.disabled) {\n this.disabled = coerceBooleanProperty(changes.disabled.currentValue);\n }\n\n if (changes.labelPosition != null) {\n this._positionBefore =\n changes.labelPosition.currentValue != null &&\n changes.labelPosition.currentValue === 'before';\n }\n if (changes.disabled || changes.readonly) {\n if (this.disabled || this.readonly) {\n this._radioDisabled = true;\n } else this._radioDisabled = false;\n }\n }\n\n ngOnDestroy(): void {\n if (this._removeUniqueSelectionListenerFn instanceof Function) {\n this._removeUniqueSelectionListenerFn();\n }\n }\n\n // Focuses the radio button.\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n this._focusMonitor.focusVia(this._getInputElement(), origin, options);\n }\n\n _radioChange(element: Partial<HTMLInputElement>): void {\n this.checked = this._getInputElement().checked;\n // Notify all radio buttons with the same name to un-check\n this._radioDispatcher.notify(this.id, this.name);\n this.radioChange.emit(element?.value);\n }\n\n _onBlur(): void {\n this.radioBlur.emit();\n }\n\n private _getInputElement(): HTMLInputElement {\n return this._inputElement.nativeElement;\n }\n}\n","<label class=\"granite-radio-button-label\">\n <div class=\"granite-radio-button-outer-circle\">\n <input\n #input\n [id]=\"id\"\n class=\"granite-radio-button-input cdk-visually-hidden\"\n type=\"radio\"\n [attr.name]=\"name\"\n [disabled]=\"_radioDisabled\"\n [checked]=\"checked\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-checked]=\"checked.toString()\"\n [value]=\"value\"\n (change)=\"_radioChange($event.target)\"\n (blur)=\"_onBlur()\"\n />\n <div class=\"granite-radio-button-inner-circle\"></div>\n </div>\n <span class=\"granite-radio-button-text\">\n <ng-content></ng-content>\n </span>\n</label>\n","import { Directive, Input } from '@angular/core';\nimport { Layout } from './types';\n\n@Directive()\nexport abstract class GraniteRadioCheckboxBase {\n @Input()\n layout: Layout = 'horizontal';\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { GraniteRadioCheckboxBase } from '../core/radio-checkbox-base';\n\n@Component({\n selector: 'granite-radio-group',\n host: {\n class: 'granite-radio-group',\n '[attr.role]': '\"radiogroup\"',\n '[attr.aria-labelledby]': 'ariaLabelledby',\n '[class.granite-radio-checkbox-base-layout-horizontal]':\n 'layout === \"horizontal\"',\n },\n\n template: '<ng-content></ng-content>',\n styleUrls: ['./radio-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteRadioGroupComponent extends GraniteRadioCheckboxBase {}\n","import { NgModule } from '@angular/core';\nimport { GraniteRadioButtonComponent } from './radio-button.component';\nimport { GraniteRadioGroupComponent } from './radio-group.component';\n\n@NgModule({\n declarations: [GraniteRadioButtonComponent, GraniteRadioGroupComponent],\n exports: [GraniteRadioButtonComponent, GraniteRadioGroupComponent],\n})\nexport class GraniteRadioButtonModule {}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n Output,\n OnChanges,\n SimpleChanges,\n EventEmitter,\n ElementRef,\n ViewChild,\n} from '@angular/core';\nimport { Position } from '../core/types';\n\n@Component({\n selector: 'granite-checkbox',\n exportAs: 'graniteCheckbox',\n host: {\n class: 'granite-checkbox',\n '[class.granite-checkbox-checked]': 'checked',\n '[class.granite-checkbox-disabled]': 'disabled',\n '[class.granite-checkbox-readonly]': 'readonly',\n '[class.granite-checkbox-label-before]': '_positionBefore',\n },\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteCheckboxComponent implements OnChanges {\n @Input()\n id: string | null = null;\n\n @Input()\n checked: boolean = false;\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n readonly: boolean = false;\n\n @Input()\n labelPosition: Position = 'after';\n\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n\n @Output()\n readonly valueChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @Output()\n readonly checkboxChange: EventEmitter<void> = new EventEmitter<void>();\n\n @Output()\n readonly checkboxBlur: EventEmitter<void> = new EventEmitter<void>();\n\n @ViewChild('input')\n private _inputElement: ElementRef<HTMLInputElement>;\n\n _positionBefore: boolean = false;\n _checkboxDisabled: boolean = false;\n\n constructor(private _focusMonitor: FocusMonitor) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.checked) {\n this.checked = coerceBooleanProperty(changes.checked.currentValue);\n }\n\n if (changes.disabled) {\n this.disabled = coerceBooleanProperty(changes.disabled.currentValue);\n }\n\n if (changes.readonly) {\n this.readonly = coerceBooleanProperty(changes.readonly.currentValue);\n }\n\n if (changes.labelPosition != null) {\n this._positionBefore =\n changes.labelPosition.currentValue != null &&\n changes.labelPosition.currentValue === 'before';\n }\n\n if (changes.disabled || changes.readonly) {\n if (this.disabled || this.readonly) {\n this._checkboxDisabled = true;\n } else this._checkboxDisabled = false;\n }\n }\n\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n this._focusMonitor.focusVia(this._getInputElement(), origin, options);\n }\n\n _onBlur(): void {\n this.checkboxBlur.emit();\n }\n\n _checkboxChange(): void {\n this.checked = this._getInputElement().checked;\n this.valueChange.emit(this.checked);\n }\n\n _checkboxClick(): void {\n this.checkboxChange.emit();\n }\n\n private _getInputElement(): HTMLInputElement {\n return this._inputElement.nativeElement;\n }\n}\n","<label [attr.for]=\"id\" class=\"granite-checkbox-label\">\n <div class=\"granite-checkbox-box\">\n <input\n #input\n [id]=\"id\"\n class=\"granite-checkbox-input cdk-visually-hidden\"\n role=\"checkbox\"\n type=\"checkbox\"\n [attr.aria-checked]=\"checked.toString()\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [checked]=\"checked\"\n [disabled]=\"_checkboxDisabled\"\n [readonly]=\"readonly\"\n (click)=\"_checkboxClick()\"\n (change)=\"_checkboxChange()\"\n (blur)=\"_onBlur()\"\n />\n <div class=\"granite-checkbox-check\"></div>\n </div>\n <span class=\"granite-checkbox-text\"><ng-content></ng-content></span>\n</label>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { GraniteRadioCheckboxBase } from '../core/radio-checkbox-base';\n\n@Component({\n selector: 'granite-checkbox-group',\n host: {\n class: 'granite-checkbox-group',\n '[attr.role]': '\"group\"',\n '[attr.aria-labelledby]': 'ariaLabelledby',\n '[class.granite-radio-checkbox-base-layout-horizontal]':\n 'layout === \"horizontal\"',\n },\n\n template: '<ng-content></ng-content>',\n styleUrls: ['./checkbox-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteCheckboxGroupComponent extends GraniteRadioCheckboxBase {}\n","import { NgModule } from '@angular/core';\nimport { GraniteCheckboxComponent } from './checkbox.component';\nimport { GraniteCheckboxGroupComponent } from './checkbox-group.component';\n\n@NgModule({\n declarations: [GraniteCheckboxComponent, GraniteCheckboxGroupComponent],\n exports: [GraniteCheckboxComponent, GraniteCheckboxGroupComponent],\n})\nexport class GraniteCheckboxModule {}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Input, OnChanges, SimpleChanges, Directive } from '@angular/core';\n\ntype Constructor<T> = new (...args: any[]) => T;\n\nexport const disabledMixin = <T extends Constructor<Record<string, unknown>>>(\n Base: T = class {} as any\n) => {\n @Directive()\n // eslint-disable-next-line @angular-eslint/directive-class-suffix\n class Derived extends Base implements OnChanges {\n @Input()\n disabled: boolean = false;\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.disabled) {\n this.disabled = coerceBooleanProperty(changes.disabled.currentValue);\n }\n }\n }\n\n return Derived;\n};\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Input,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\n\nimport { disabledMixin } from '../core/common-behaviors/disabled';\n\nexport enum ButtonSelectors {\n graniteButton = 'granite-button',\n granitePrimaryButton = 'granite-primary-button',\n graniteFlatButton = 'granite-flat-button',\n graniteToolbarButton = 'granite-toolbar-button',\n}\n\nconst ButtonComponentMixin = disabledMixin();\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: `button[graniteButton],\n button[granitePrimaryButton],\n button[graniteFlatButton],\n button[graniteToolbarButton]\n `,\n host: {\n class: 'granite-button-base',\n '[class.granite-button-disabled]': 'disabled',\n '[class.granite-button-toggled]': '_buttonToggled',\n '[attr.disabled]': 'disabled || null',\n },\n exportAs: 'graniteButton',\n template: '<ng-content></ng-content>',\n styleUrls: ['./button.component.scss'],\n inputs: ['disabled'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteButtonComponent\n extends ButtonComponentMixin\n implements OnChanges\n{\n @Input()\n toggled: boolean = false;\n\n _buttonToggled: boolean = false;\n\n constructor(\n protected _focusMonitor: FocusMonitor,\n protected _elementRef: ElementRef\n ) {\n super();\n\n for (const selector of Object.keys(ButtonSelectors)) {\n if (this._getHostElement().hasAttribute(selector)) {\n this._getHostElement().classList.add(ButtonSelectors[selector]);\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n super.ngOnChanges(changes);\n\n if (changes.toggled) {\n this._buttonToggled = coerceBooleanProperty(changes.toggled.currentValue);\n }\n }\n\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n this._focusMonitor.focusVia(this._getHostElement(), origin, options);\n }\n\n private _getHostElement(): HTMLButtonElement | HTMLAnchorElement {\n return this._elementRef.nativeElement;\n }\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: `a[graniteButton],\n a[graniteFlatButton]`,\n host: {\n class: 'granite-button-base',\n '[attr.tabindex]': 'disabled ? -1 : 0',\n '[class.granite-button-disabled]': 'disabled',\n },\n exportAs: 'graniteAnchor',\n template: '<ng-content></ng-content>',\n styleUrls: ['./button.component.scss'],\n inputs: ['disabled'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteAnchorComponent\n extends GraniteButtonComponent\n implements OnChanges\n{\n constructor(\n protected _focusMonitor: FocusMonitor,\n protected _elementRef: ElementRef\n ) {\n super(_focusMonitor, _elementRef);\n }\n\n @HostListener('click', ['$event'])\n _anchorClick(event: Event): void {\n if (this.disabled) {\n event.preventDefault();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n super.ngOnChanges(changes);\n }\n}\n","import { NgModule } from '@angular/core';\nimport {\n GraniteAnchorComponent,\n GraniteButtonComponent,\n} from './button.component';\n\n@NgModule({\n declarations: [GraniteButtonComponent, GraniteAnchorComponent],\n exports: [GraniteButtonComponent, GraniteAnchorComponent],\n})\nexport class GraniteButtonModule {}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nconst GRANITE_INPUT_INCLUDES = ['text', 'number', 'password', 'textarea'];\n\n@Component({\n selector: 'granite-input-field',\n exportAs: 'graniteInputField',\n templateUrl: './input-field.component.html',\n styleUrls: ['./input-field.component.scss'],\n host: {\n class: 'granite-input-field',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteInputFieldComponent implements OnInit, OnChanges {\n @Input()\n id: string | null = null;\n\n @Input()\n name: string | null = null;\n\n @Input()\n type: string = 'text';\n\n @Input()\n value: string | number = '';\n\n @Input()\n required: boolean = false;\n\n @Input()\n readonly: boolean = false;\n\n @Input()\n invalid: boolean = false;\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n placeholder: string = '';\n\n @Input()\n prefixicon: string;\n\n @Input()\n maxlength: number = 255;\n\n @Input()\n countcharacters: boolean = false;\n\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n\n @Output()\n readonly valueChange: EventEmitter<string> = new EventEmitter<string>();\n\n @ViewChild('input')\n private _inputElement: ElementRef<HTMLInputElement>;\n\n @ViewChild('textarea')\n private _textareaElement: ElementRef<HTMLTextAreaElement>;\n\n _supported: boolean = true;\n _empty: boolean = false;\n _passwordFieldIcon: string = 'view';\n _passwordField: boolean = false;\n _currentCharCount = 0;\n private _passwordToggled: boolean = false;\n private _lastEmittedValue: string = '';\n\n constructor(private _focusMonitor: FocusMonitor) {}\n\n ngOnInit(): void {\n this._validateType();\n\n this._passwordField = this.type == 'password';\n this._empty = this.value == null || this.value === '';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.required) {\n this.required = coerceBooleanProperty(changes.required.currentValue);\n }\n\n if (changes.readonly) {\n this.readonly = coerceBooleanProperty(changes.readonly.currentValue);\n }\n\n if (changes.invalid) {\n this.invalid = coerceBooleanProperty(changes.invalid.currentValue);\n }\n\n if (changes.disabled) {\n this.disabled = coerceBooleanProperty(changes.disabled.currentValue);\n }\n\n if (changes.countcharacters) {\n this.countcharacters = coerceBooleanProperty(\n changes.countcharacters.currentValue\n );\n }\n\n if (changes.value) {\n this._empty = this.value == null || this.value === '';\n }\n\n if (changes.value || changes.maxlength || changes.countcharacters) {\n this._applyCharacterCount(this.value?.toString());\n }\n\n if (changes.type) {\n this._validateType();\n }\n }\n\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n if (this.type === 'text') {\n this._focusMonitor.focusVia(this._getInputElement(), origin, options);\n } else if (this.type === 'textarea') {\n this._focusMonitor.focusVia(this._getTextareaElement(), origin, options);\n }\n }\n\n _togglePassword(): void {\n if (this._passwordToggled) {\n this._passwordToggled = false;\n this.type = 'password';\n this._passwordFieldIcon = 'view';\n } else {\n this._passwordToggled = true;\n this.type = 'text';\n this._passwordFieldIcon = 'view-disabled';\n }\n }\n\n _onInput(event: Event): void {\n const inputEvent = event.target as HTMLInputElement;\n this._applyCharacterCount(inputEvent.value);\n this._empty = inputEvent.value == null || inputEvent.value === '';\n this._emitValueIfChanged(inputEvent.value);\n }\n\n protected _validateType(): void {\n if (GRANITE_INPUT_INCLUDES.indexOf(this.type) < 0) {\n this._supported = false;\n throw Error(\n `Input type \"${this.type}\" isn't supported by graniteInputField.`\n );\n }\n }\n\n private _applyCharacterCount(inputString: string): void {\n if (this.countcharacters && inputString != null) {\n this._currentCharCount = inputString.length;\n\n if (this._currentCharCount > this.maxlength) {\n inputString = inputString.slice(0, this.maxlength);\n this.value = inputString;\n this._emitValueIfChanged(inputString);\n this._currentCharCount = this.maxlength;\n }\n }\n }\n\n private _getInputElement(): HTMLInputElement {\n return this._inputElement.nativeElement;\n }\n\n private _getTextareaElement(): HTMLTextAreaElement {\n return this._textareaElement.nativeElement;\n }\n\n private _emitValueIfChanged(value: string): void {\n if (value !== this._lastEmittedValue) {\n this._lastEmittedValue = value;\n this.valueChange.emit(value);\n }\n }\n}\n","<div\n *ngIf=\"_supported\"\n class=\"granite-input-container\"\n [class.granite-input-disabled]=\"disabled\"\n [class.granite-input-readonly]=\"readonly\"\n [class.granite-input-disabled]=\"disabled\"\n [class.granite-input-readonly]=\"readonly\"\n>\n <div\n class=\"granite-input-top-row\"\n [class.granite-input-required]=\"required\"\n [class.granite-input-empty]=\"_empty\"\n [class.granite-input-disabled]=\"disabled\"\n [class.granite-input-readonly]=\"readonly\"\n [class.granite-input-invalid]=\"invalid\"\n >\n <div\n *ngIf=\"prefixicon\"\n class=\"granite-input-prepend\"\n [class.granite-input-required]=\"required\"\n [class.granite-input-empty]=\"_empty\"\n >\n <granite-icon class=\"granite-input-prepend-icon\">\n {{ prefixicon }}\n </granite-icon>\n </div>\n\n <ng-container\n *ngIf=\"type !== 'textarea'; then inputElement; else textareaElement\"\n ></ng-container>\n\n <ng-template #inputElement>\n <input\n #input\n [id]=\"id\"\n class=\"granite-input-base\"\n [class.granite-input-invalid]=\"invalid\"\n [class.granite-input-empty]=\"_empty\"\n [name]=\"name\"\n [attr.type]=\"type\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [attr.maxlength]=\"maxlength\"\n [value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-invalid]=\"invalid\"\n (input)=\"_onInput($event)\"\n />\n </ng-template>\n\n <button\n *ngIf=\"_passwordField\"\n class=\"granite-input-append\"\n [class.granite-input-required]=\"required\"\n [class.granite-input-empty]=\"_empty\"\n (click)=\"_togglePassword()\"\n >\n <granite-icon class=\"granite-input-password-toggle-icon\">\n {{ _passwordFieldIcon }}\n </granite-icon>\n </button>\n\n <ng-container *ngIf=\"!_passwordField\">\n <ng-content select=\"[graniteInputSuffixButton]\"></ng-content>\n </ng-container>\n\n <ng-template #textareaElement>\n <textarea\n #textarea\n [id]=\"id\"\n class=\"granite-input-base granite-text-area\"\n [class.granite-input-invalid]=\"invalid\"\n [class.granite-input-empty]=\"_empty\"\n rows=\"1\"\n [name]=\"name\"\n [attr.type]=\"type\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [attr.maxlength]=\"maxlength\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n (input)=\"_onInput($event)\"\n ></textarea>\n </ng-template>\n </div>\n\n <div *ngIf=\"countcharacters\" class=\"granite-input-bottom-row\">\n <div class=\"granite-input-char-count\">\n {{ _currentCharCount }}/{{ maxlength }}\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteInputFieldComponent } from './input-field.component';\nimport { GraniteIconModule } from '../icon/icon.module';\nimport { GraniteButtonModule } from '../button/button.module';\n\n@NgModule({\n imports: [CommonModule, GraniteIconModule, GraniteButtonModule],\n declarations: [GraniteInputFieldComponent],\n exports: [GraniteInputFieldComponent],\n})\nexport class GraniteInputFieldModule {}\n","import { FocusableOption } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { BACKSPACE, DELETE, SPACE } from '@angular/cdk/keycodes';\nimport {\n Attribute,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n} from '@angular/core';\nimport { take } from 'rxjs/operators';\n\n/** Event fired on an individual `granite-chip` element. */\nexport interface GraniteChipEvent {\n /** The chip the event was fired on. */\n chip: GraniteChipComponent;\n}\n\n/** Event object emitted by GraniteChip when selected or deselected. */\nexport class GraniteChipSelectionChangeEvent {\n /** Reference to the chip that emitted the event. */\n source: GraniteChipComponent;\n /** Whether the chip that emitted the event is selected. */\n selected: boolean;\n /** Whether the selection change was a result of a user interaction. */\n isUserInput: boolean = false;\n}\n\n@Component({\n selector: `granite-chip, granite-input-chip`,\n inputs: ['tabIndex'],\n exportAs: 'graniteChip',\n styleUrls: ['./chip.component.scss'],\n templateUrl: './chip.component.html',\n host: {\n class: 'granite-chip',\n '[class.granite-chip-input]': 'inputChip',\n '[class.granite-chip-selectable]': 'selectable',\n '[class.granite-chip-selected]': 'selected',\n '[class.granite-chip-disabled]': 'disabled',\n '[class.granite-chip-invalid]': 'invalid',\n '[class.granite-chip-removable]': '!disabled && (removable || inputChip)',\n '[attr.tabindex]': 'disabled ? null : tabIndex',\n '[attr.role]': 'role',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-label]': 'ariaLabel',\n '[attr.aria-labelledby]': 'ariaLabelledby',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-selected]': 'ariaSelected',\n '(click)': '_handleClick($event)',\n '(keydown)': '_handleKeydown($event)',\n '(blur)': '_blur()',\n '(focus)': 'focus()',\n },\n})\nexport class GraniteChipComponent implements FocusableOption, OnDestroy {\n /** ARIA role that should be applied to the chip. */\n @Input() role: string = 'option';\n\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n\n /** Emitted when the chip is selected or deselected. */\n @Output()\n readonly selectionChange: EventEmitter<GraniteChipSelectionChangeEvent> =\n new EventEmitter<GraniteChipSelectionChangeEvent>();\n\n /** Emitted when a chip is to be removed. */\n @Output() readonly removed: EventEmitter<GraniteChipEvent> =\n new EventEmitter<GraniteChipEvent>();\n\n /** Emitted when the chip is destroyed. */\n @Output() readonly destroyed: EventEmitter<GraniteChipEvent> =\n new EventEmitter<GraniteChipEvent>();\n\n /** Emits when the chip is focused. */\n @Output() readonly chipFocus: EventEmitter<GraniteChipEvent> =\n new EventEmitter<GraniteChipEvent>();\n\n /** Emits when the chip is blurred. */\n @Output() readonly chipBlur: EventEmitter<GraniteChipEvent> =\n new EventEmitter<GraniteChipEvent>();\n\n /** Whether the chip has focus. */\n _hasFocus: boolean = false;\n\n /** Whether the chip list is selectable */\n _chipListSelectable: boolean = true;\n\n /** Whether the chip list is in multi-selection mode. */\n _chipListMultiple: boolean = false;\n\n /** Whether the chip list as a whole is disabled. */\n _chipListDisabled: boolean = false;\n\n tabIndex: number = -1;\n inputChip: boolean = false;\n\n protected _selected: boolean = false;\n protected _selectable: boolean = true;\n protected _disabled: boolean = false;\n protected _removable: boolean = false;\n protected _invalid: boolean = false;\n\n /** Whether the chip is selected. */\n @Input()\n get selected(): boolean {\n return this._selected;\n }\n set selected(value: boolean) {\n const coercedValue = coerceBooleanProperty(value);\n\n if (coercedValue !== this._selected) {\n this._selected = coercedValue;\n }\n }\n\n /** The value of the chip. Defaults to the text content inside `<granite-chip>` tags. */\n @Input()\n get value(): any {\n return this._value != null\n ? this._value\n : this._elementRef.nativeElement.textContent;\n }\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n set value(val: any) {\n this._value = val;\n }\n private _value: any;\n\n /**\n * Whether or not the chip is selectable. When a chip is not selectable,\n * changes to its selected state are always ignored. By default a chip is\n * selectable, and it becomes non-selectable if its parent chip list is\n * not selectable.\n */\n @Input()\n get selectable(): boolean {\n return this._selectable && this._chipListSelectable;\n }\n set selectable(value: boolean) {\n this._selectable = coerceBooleanProperty(value);\n }\n\n /** Whether the chip is disabled. Also the individual chips are disabled when chip list is disabled */\n @Input()\n get disabled(): boolean {\n return this._chipListDisabled || this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n /**\n * Whether the chip can be removed from the list\n */\n @Input()\n get removable(): boolean {\n return this._removable;\n }\n set removable(value: boolean) {\n this._removable = coerceBooleanProperty(value);\n }\n\n /** Whether the chip is in an invalid state. */\n @Input()\n get invalid(): boolean {\n return this._invalid;\n }\n set invalid(value: boolean) {\n this._invalid = coerceBooleanProperty(value);\n }\n\n constructor(\n public _elementRef: ElementRef,\n private _ngZone: NgZone,\n @Optional() private _changeDetectorRef: ChangeDetectorRef,\n @Attribute('tabindex') tabIndex?: string\n ) {\n const inputChipAttrName = 'granite-input-chip';\n const element = this._elementRef.nativeElement as HTMLElement;\n if (\n element.hasAttribute(inputChipAttrName) ||\n element.tagName.toLowerCase() === inputChipAttrName\n ) {\n this.inputChip = true;\n }\n\n this.tabIndex = tabIndex != null ? parseInt(tabIndex) || -1 : -1;\n }\n\n ngOnDestroy(): void {\n this.destroyed.emit({ chip: this });\n }\n\n /** Selects the chip. */\n select(isUserInput: boolean = false): void {\n if (!this._selected) {\n this._selected = true;\n this._dispatchSelectionChange(isUserInput);\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** Deselects the chip. */\n deselect(): void {\n if (this._selected) {\n this._selected = false;\n this._dispatchSelectionChange();\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** Toggles the current selected state of this chip. */\n toggleSelected(isUserInput: boolean = false): boolean {\n this._selected = !this.selected;\n this._dispatchSelectionChange(isUserInput);\n this._changeDetectorRef.markForCheck();\n return this.selected;\n }\n\n /** Allows for programmatic focusing of the chip unless it's disabled. */\n focus(): void {\n if (!this.disabled) {\n if (!this._hasFocus) {\n this._elementRef.nativeElement.focus();\n this.chipFocus.next({ chip: this });\n }\n this._hasFocus = true;\n }\n }\n\n /**\n * Allows for programmatic removal of the chip.\n * Called by the GraniteChipList when the DELETE or BACKSPACE keys are pressed.\n * Informs any listeners of the removal request. Does not remove the chip from the DOM.\n */\n remove(): void {\n if (this.removable || this.inputChip) {\n this.removed.emit({ chip: this });\n }\n }\n\n /** Handles click events on the chip. */\n _handleClick(event: Event): void {\n if (this.disabled) {\n event.preventDefault();\n return;\n }\n if (this.selectable) {\n this.toggleSelected(true);\n }\n }\n\n /** Handle custom key presses. */\n _handleKeydown(event: KeyboardEvent): void {\n if (this.disabled) {\n return;\n }\n\n switch (event.keyCode) {\n case DELETE:\n case BACKSPACE:\n // If the chip is removable, remove the focused chip\n this.remove();\n // Always prevent so page navigation does not occur\n event.preventDefault();\n break;\n case SPACE:\n // If we are selectable, toggle the focused chip\n if (this.selectable) {\n this.toggleSelected(true);\n }\n\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n break;\n }\n }\n\n _handleRemoveClick(event: Event): void {\n this.remove();\n // We need to stop event propagation because otherwise the event will bubble up to the\n // form field and cause the `onContainerClick` method to be invoked. This method would then\n // reset the focused chip that has been focused after chip removal.\n event.stopPropagation();\n event.preventDefault();\n }\n\n _blur(): void {\n // When animations are enabled, Angular may end up removing the chip from the DOM a little\n // earlier than usual, causing it to be blurred and throwing off the logic in the chip list\n // that moves focus not the next item. To work around the issue, we defer marking the chip\n // as not focused until the next time the zone stabilizes.\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n this._ngZone.run(() => {\n this._hasFocus = false;\n this.chipBlur.next({ chip: this });\n });\n });\n }\n\n private _dispatchSelectionChange(isUserInput = false) {\n this.selectionChange.emit({\n source: this,\n isUserInput,\n selected: this._selected,\n });\n }\n\n /** The ARIA selected applied to the chip. */\n get ariaSelected(): string | null {\n // Remove the `aria-selected` when the chip is deselected in single-selection mode, because\n // it adds noise to NVDA users where \"not selected\" will be read out for each chip.\n return this.selectable && (this._chipListMultiple || this.selected)\n ? this.selected.toString()\n : null;\n }\n}\n","<ng-content></ng-content>\n<button\n *ngIf=\"!disabled && (removable || inputChip)\"\n class=\"granite-chip-remove\"\n (click)=\"_handleRemoveClick($event)\"\n>\n <granite-icon\n fontIcon=\"icon-close\"\n class=\"granite-chip-remove-icon\"\n [class.granite-chip-remove-icon-invalid]=\"invalid\"\n ></granite-icon>\n</button>\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DoCheck,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n Self,\n EventEmitter,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroupDirective,\n NgControl,\n NgForm,\n} from '@angular/forms';\nimport { merge, Observable, Subject, Subscription } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\nimport {\n GraniteChipComponent,\n GraniteChipEvent,\n GraniteChipSelectionChangeEvent,\n} from './chip.component';\nimport { GraniteChipTextControl } from './chip-input';\n\nabstract class GraniteChipListBase {\n readonly stateChanges = new EventEmitter<void>();\n\n constructor(\n public _parentForm: NgForm,\n public _parentFormGroup: FormGroupDirective,\n public ngControl: NgControl\n ) {}\n}\n\n// Increasing integer for generating unique ids for chip-list components.\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'granite-chip-list',\n template: `<ng-content></ng-content>`,\n exportAs: 'graniteChipList',\n host: {\n class: 'granite-chip-list',\n '[class.granite-chip-list-disabled]': 'disabled',\n '[attr.tabindex]': 'disabled ? null : _tabIndex',\n '[attr.role]': 'role',\n '[attr.aria-label]': 'ariaLabel',\n '[attr.aria-labelledby]': 'ariaLabelledby',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-multiselectable]': 'multiselect',\n '[attr.aria-orientation]': 'ariaOrientation',\n '[id]': '_uid',\n '(focus)': 'focus()',\n '(blur)': '_blur()',\n '(keydown)': '_keydown($event)',\n },\n styleUrls: ['./chip-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteChipListComponent\n extends GraniteChipListBase\n implements ControlValueAccessor, AfterContentInit, DoCheck, OnInit, OnDestroy\n{\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n\n @Input('aria-orientation')\n ariaOrientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /** The chips contained within this chip list. */\n @ContentChildren(GraniteChipComponent, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true,\n })\n chips: QueryList<GraniteChipComponent>;\n\n readonly controlType: string = 'granite-chip-list';\n\n /** Uid of the chip list */\n _uid: string = `granite-chip-list-${nextUniqueId++}`;\n\n /** Tab index for the chip list. */\n _tabIndex = 0;\n\n /**\n * User defined tab index.\n * When it is not null, use user defined tab index. Otherwise use _tabIndex\n */\n _userTabIndex: number | null = null;\n\n /** The FocusKeyManager which handles focus. */\n _keyManager: FocusKeyManager<GraniteChipComponent>;\n\n _selectionModel: SelectionModel<GraniteChipComponent>;\n\n /** The chip input to add more chips */\n protected _chipInput: GraniteChipTextControl;\n\n protected _disabled: boolean = false;\n protected _selectable: boolean = true;\n\n /**\n * When a chip is destroyed, we store the index of the destroyed chip until the chips\n * query list notifies about the update. This is necessary because we cannot determine an\n * appropriate chip that should receive focus until the array of chips updated completely.\n */\n private _lastDestroyedChipIndex: number | null = null;\n\n /** Subject that emits when the component has been destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** Subscription to focus changes in the chips. */\n private _chipFocusSubscription: Subscription | null;\n\n /** Subscription to blur changes in the chips. */\n private _chipBlurSubscription: Subscription | null;\n\n /** Subscription to selection changes in chips. */\n private _chipSelectionSubscription: Subscription | null;\n\n /** Subscription to remove changes in chips. */\n private _chipRemoveSubscription: Subscription | null;\n\n /** The ARIA role applied to the chip list. */\n @Input()\n get role(): string | null {\n if (this._explicitRole) {\n return this._explicitRole;\n }\n\n return this.empty ? null : 'listbox';\n }\n set role(role: string | null) {\n this._explicitRole = role;\n }\n private _explicitRole?: string | null;\n\n /** Whether the user should be allowed to select multiselect chips. */\n @Input()\n get multiselect(): boolean {\n return this._multiple;\n }\n set multiselect(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n this._syncChipsState();\n }\n private _multiple: boolean = false;\n\n /**\n * Whether the chip list is disabled.\n */\n @Input()\n get disabled(): boolean {\n return this.ngControl ? !!this.ngControl.disabled : this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this._syncChipsState();\n }\n\n /**\n * Whether or not this chip list is selectable. When a chip list is not selectable,\n * the selected states for all the chips inside the chip list are always ignored.\n */\n @Input()\n get selectable(): boolean {\n return this._selectable;\n }\n set selectable(value: boolean) {\n this._selectable = coerceBooleanProperty(value);\n\n if (this.chips) {\n this.chips.forEach(\n (chip) => (chip._chipListSelectable = this._selectable)\n );\n }\n }\n\n @Input()\n set tabindex(value: number) {\n this._userTabIndex = value;\n this._tabIndex = value;\n }\n\n /** Unique identifier for the chip list. */\n get id(): string {\n return this._chipInput ? this._chipInput.id : this._uid;\n }\n\n /** Whether any chips or the matChipInput inside of this chip-list has focus. */\n get focused(): boolean {\n return (\n (this._chipInput && this._chipInput.focused) || this._hasFocusedChip()\n );\n }\n\n /** Whether the chip list is empty. */\n get empty(): boolean {\n return (\n (!this._chipInput || this._chipInput.empty) &&\n (!this.chips || this.chips.length === 0)\n );\n }\n\n /** The array of selected chips inside chip list. */\n get selected(): GraniteChipComponent[] | GraniteChipComponent {\n return this.multiselect\n ? this._selectionModel?.selected || []\n : this._selectionModel?.selected[0];\n }\n\n /** Combined stream of all of the child chips' selection change events. */\n get chipSelectionChanges(): Observable<GraniteChipSelectionChangeEvent> {\n return merge(...this.chips.map((chip) => chip.selectionChange));\n }\n\n /** Combined stream of all of the child chips' focus change events. */\n get chipFocusChanges(): Observable<GraniteChipEvent> {\n return merge(...this.chips.map((chip) => chip.chipFocus));\n }\n\n /** Combined stream of all of the child chips' blur change events. */\n get chipBlurChanges(): Observable<GraniteChipEvent> {\n return merge(...this.chips.map((chip) => chip.chipBlur));\n }\n\n /** Combined stream of all of the child chips' remove change events. */\n get chipRemoveChanges(): Observable<GraniteChipEvent> {\n return merge(...this.chips.map((chip) => chip.destroyed));\n }\n\n constructor(\n protected _elementRef: ElementRef<HTMLElement>,\n private _changeDetectorRef: ChangeDetectorRef,\n @Optional() private _dir: Directionality,\n @Optional() _parentForm: NgForm,\n @Optional() _parentFormGroup: FormGroupDirective,\n @Optional() @Self() ngControl: NgControl\n ) {\n super(_parentForm, _parentFormGroup, ngControl);\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /** Function when changed */\n _onChange: (value: any) => void = () => {\n // Implemented as part of ControlValueAccessor\n };\n\n /** Function when changed */\n _onTouched: () => void = () => {\n // Implemented as part of ControlValueAccessor\n };\n\n ngAfterContentInit(): void {\n this._keyManager = new FocusKeyManager<GraniteChipComponent>(this.chips)\n .withWrap()\n .withVerticalOrientation()\n .withHomeAndEnd()\n .withHorizontalOrientation(this._dir ? this._dir.value : 'ltr');\n\n if (this._dir) {\n this._dir.change\n .pipe(takeUntil(this._destroyed))\n .subscribe((dir) => this._keyManager.withHorizontalOrientation(dir));\n }\n\n this._keyManager.tabOut.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._allowFocusEscape();\n });\n\n // When the list changes, re-subscribe\n this.chips.changes\n .pipe(startWith(null), takeUntil(this._destroyed))\n .subscribe(() => {\n if (this.disabled) {\n // Since this happens after the content has been\n // checked, we need to defer it to the next tick.\n Promise.resolve().then(() => {\n this._syncChipsState();\n });\n }\n\n this._resetChips();\n\n // Reset chips selected/deselected status\n this._initializeSelection();\n\n // Check to see if we need to update our tab index\n this._updateTabIndex();\n\n // Check to see if we have a destroyed chip and need to refocus\n this._updateFocusForDestroyedChips();\n\n this.stateChanges.next();\n });\n }\n\n ngOnInit(): void {\n this._selectionModel = new SelectionModel<GraniteChipComponent>(\n this.multiselect,\n undefined,\n false\n );\n this.stateChanges.next();\n }\n\n ngDoCheck(): void {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n\n if (this.ngControl.disabled !== this._disabled) {\n this.disabled = !!this.ngControl.disabled;\n }\n }\n }\n\n ngOnDestroy(): void {\n this._destroyed.next();\n this._destroyed.complete();\n this.stateChanges.complete();\n\n this._dropSubscriptions();\n }\n\n /** Associates an HTML input element with this chip list. */\n registerInput(inputElement: GraniteChipTextControl): void {\n this._chipInput = inputElement;\n\n // We use this attribute to match the chip list to its input in test harnesses.\n // Set the attribute directly here to avoid \"changed after checked\" errors.\n this._elementRef.nativeElement.setAttribute(\n 'data-granite-chip-input',\n inputElement.id\n );\n }\n\n // Implemented as part of ControlValueAccessor.\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n writeValue(value: any): void {\n if (this.chips) {\n this._setSelectionByValue(value, false);\n }\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.stateChanges.next();\n }\n\n /**\n * Focus chip list when click on the container.\n */\n onContainerClick(event: MouseEvent): void {\n if (!this._originatesFromChip(event)) {\n this.focus();\n }\n }\n\n /**\n * Focuses the first non-disabled chip in this chip list, or the associated input when there\n * are no eligible chips.\n */\n focus(options?: FocusOptions): void {\n if (this.disabled) {\n return;\n }\n\n // Focus on first element if there's no chipInput inside chip-list\n if (this._chipInput && this._chipInput.focused) {\n // do nothing\n } else if (this.chips.length > 0) {\n this._keyManager.setFirstItemActive();\n this.stateChanges.next();\n } else {\n this._focusInput(options);\n this.stateChanges.next();\n }\n }\n\n /** Attempt to focus an input if we have one. */\n _focusInput(options?: FocusOptions): void {\n if (this._chipInput) {\n this._chipInput.setFocus(options);\n }\n }\n\n /**\n * Pass events to the keyboard manager. Available here for tests.\n */\n _keydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n\n if (target && target.classList.contains('granite-chip')) {\n this._keyManager.onKeydown(event);\n this.stateChanges.next();\n }\n }\n\n /** When blurred, mark the field as touched when focus moved outside the chip list. */\n _blur(): void {\n if (!this._hasFocusedChip()) {\n this._keyManager.setActiveItem(-1);\n }\n\n if (!this.disabled) {\n if (this._chipInput) {\n // If there's a chip input, we should check whether the focus moved to chip input.\n // If the focus is not moved to chip input, mark the field as touched. If the focus moved\n // to chip input, do nothing.\n // Timeout is needed to wait for the focus() event trigger on chip input.\n setTimeout(() => {\n if (!this.focused) {\n this._markAsTouched();\n }\n });\n } else {\n // If there's no chip input, then mark the field as touched.\n this._markAsTouched();\n }\n }\n }\n\n /** Mark the field as touched */\n _markAsTouched(): void {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n /**\n * Removes the `tabindex` from the chip list and resets it back afterwards, allowing the\n * user to tab out of it. This prevents the list from capturing focus and redirecting\n * it back to the first chip, creating a focus trap, if it user tries to tab away.\n */\n _allowFocusEscape(): void {\n if (this._tabIndex !== -1) {\n this._tabIndex = -1;\n\n setTimeout(() => {\n this._tabIndex = this._userTabIndex || 0;\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n\n /**\n * Check the tab index as you should not be allowed to focus an empty list.\n */\n protected _updateTabIndex(): void {\n // If we have 0 chips, we should not allow keyboard focus\n this._tabIndex = this._userTabIndex || (this.chips.length === 0 ? -1 : 0);\n }\n\n /**\n * If the amount of chips changed, we need to update the\n * key manager state and focus the next closest chip.\n */\n protected _updateFocusForDestroyedChips(): void {\n // Move focus to the closest chip. If no other chips remain, focus the chip-list itself.\n if (this._lastDestroyedChipIndex != null) {\n if (this.chips.length) {\n const newChipIndex = Math.min(\n this._lastDestroyedChipIndex,\n this.chips.length - 1\n );\n this._keyManager.setActiveItem(newChipIndex);\n } else {\n this.focus();\n }\n }\n\n this._lastDestroyedChipIndex = null;\n }\n\n /**\n * Utility to ensure all indexes are valid.\n *\n * @param index The index to be checked.\n * @returns True if the index is valid for our list of chips.\n */\n private _isValidIndex(index: number): boolean {\n return index >= 0 && index < this.chips.length;\n }\n\n private _setSelectionByValue(value: any, isUserInput: boolean = true): void {\n this._clearSelection();\n this.chips.forEach((chip) => chip.deselect());\n\n if (Array.isArray(value)) {\n value.forEach((currentValue) =>\n this._selectValue(currentValue, isUserInput)\n );\n this._sortValues();\n } else {\n const correspondingChip = this._selectValue(value, isUserInput);\n\n // Shift focus to the active item. Note that we shouldn't do this in multiselect\n // mode, because we don't know what chip the user interacted with last.\n if (correspondingChip) {\n if (isUserInput) {\n this._keyManager.setActiveItem(correspondingChip);\n }\n }\n }\n }\n\n /**\n * Finds and selects the chip based on its value.\n * @returns Chip that has the corresponding value.\n */\n private _selectValue(\n value: any,\n isUserInput: boolean = true\n ): GraniteChipComponent | undefined {\n const correspondingChip = this.chips.find((chip) => {\n return chip.value != null && this._compareWith(chip.value, value);\n });\n\n if (correspondingChip) {\n correspondingChip.select(isUserInput);\n this._selectionModel.select(correspondingChip);\n }\n\n return correspondingChip;\n }\n\n private _initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n if (this.ngControl) {\n this._setSelectionByValue(this.ngControl.value, false);\n this.stateChanges.next();\n }\n });\n }\n\n /**\n * Deselects every chip in the list.\n * @param skip Chip that should not be deselected.\n */\n private _clearSelection(skip?: GraniteChipComponent): void {\n this._selectionModel.clear();\n this.chips.forEach((chip) => {\n if (chip !== skip) {\n chip.deselect();\n }\n });\n this.stateChanges.next();\n }\n\n /**\n * Sorts the model values, ensuring that they keep the same\n * order that they have in the panel.\n */\n private _sortValues(): void {\n if (this._multiple) {\n this._selectionModel.clear();\n\n this.chips.forEach((chip) => {\n if (chip.selected) {\n this._selectionModel.select(chip);\n }\n });\n this.stateChanges.next();\n }\n }\n\n private _compareWith = (o1: any, o2: any) => o1 === o2;\n\n private _resetChips(): void {\n this._dropSubscriptions();\n this._listenToChipsFocus();\n this._listenToChipsSelection();\n this._listenToChipsRemoved();\n }\n\n private _dropSubscriptions(): void {\n if (this._chipFocusSubscription) {\n this._chipFocusSubscription.unsubscribe();\n this._chipFocusSubscription = null;\n }\n\n if (this._chipBlurSubscription) {\n this._chipBlurSubscription.unsubscribe();\n this._chipBlurSubscription = null;\n }\n\n if (this._chipSelectionSubscription) {\n this._chipSelectionSubscription.unsubscribe();\n this._chipSelectionSubscription = null;\n }\n\n if (this._chipRemoveSubscription) {\n this._chipRemoveSubscription.unsubscribe();\n this._chipRemoveSubscription = null;\n }\n }\n\n /** Listens to user-generated selection events on each chip. */\n private _listenToChipsSelection(): void {\n this._chipSelectionSubscription = this.chipSelectionChanges.subscribe(\n (event) => {\n event.source.selected\n ? this._selectionModel.select(event.source)\n : this._selectionModel.deselect(event.source);\n\n // For single selection chip list, make sure the deselected value is unselected.\n if (!this.multiselect) {\n this.chips.forEach((chip) => {\n if (!this._selectionModel.isSelected(chip) && chip.selected) {\n chip.deselect();\n }\n });\n }\n }\n );\n }\n\n /** Listens to user-generated selection events on each chip. */\n private _listenToChipsFocus(): void {\n this._chipFocusSubscription = this.chipFocusChanges.subscribe((event) => {\n const chipIndex: number = this.chips.toArray().indexOf(event.chip);\n\n if (this._isValidIndex(chipIndex)) {\n this._keyManager.updateActiveItem(chipIndex);\n }\n this.stateChanges.next();\n });\n\n this._chipBlurSubscription = this.chipBlurChanges.subscribe(() => {\n this._blur();\n this.stateChanges.next();\n });\n }\n\n private _listenToChipsRemoved(): void {\n this._chipRemoveSubscription = this.chipRemoveChanges.subscribe((event) => {\n const chip = event.chip;\n const chipIndex = this.chips.toArray().indexOf(event.chip);\n\n // In case the chip that will be removed is currently focused, we temporarily store\n // the index in order to be able to determine an appropriate sibling chip that will\n // receive focus.\n if (this._isValidIndex(chipIndex) && chip._hasFocus) {\n this._lastDestroyedChipIndex = chipIndex;\n }\n });\n }\n\n /** Checks whether an event comes from inside a chip element. */\n private _originatesFromChip(event: Event): boolean {\n let currentElement = event.target as HTMLElement | null;\n\n while (\n currentElement &&\n currentElement !== this._elementRef.nativeElement\n ) {\n if (currentElement.classList.contains('granite-chip')) {\n return true;\n }\n\n currentElement = currentElement.parentElement;\n }\n\n return false;\n }\n\n /** Checks whether any of the chips is focused. */\n private _hasFocusedChip(): boolean {\n return this.chips && this.chips.some((chip) => chip._hasFocus);\n }\n\n /** Syncs the list's state with the individual chips. */\n private _syncChipsState(): void {\n if (this.chips) {\n this.chips.forEach((chip) => {\n chip._chipListDisabled = this._disabled;\n chip._chipListMultiple = this.multiselect;\n });\n }\n }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { BACKSPACE, ENTER, hasModifierKey, TAB } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { GraniteChipListComponent } from './chip-list.component';\n\nexport interface GraniteChipTextControl {\n /** Unique identifier for the text control. */\n id: string;\n /** The text control's placeholder text. */\n placeholder: string;\n /** Whether the text control has browser focus. */\n focused: boolean;\n /** Whether the text control is empty. */\n empty: boolean;\n /** Focuses the text control. */\n setFocus(options?: FocusOptions): void;\n}\n\n/** Represents an input event on a `graniteChipInput`. */\nexport interface GraniteChipInputEvent {\n /** The native `<input>` element that the event is being fired for. */\n input: HTMLInputElement;\n /** The value of the input. */\n value: string;\n /** Reference to the chip input that emitted the event. */\n chipInput: GraniteChipInputDirective;\n}\n\nlet nextUniqueId = 0;\n\n@Directive({\n selector: 'input[graniteChipInputFor]',\n exportAs: 'graniteChipInput, graniteChipInputFor',\n host: {\n class: 'granite-chip-input',\n '[id]': 'id',\n '[attr.disabled]': 'disabled || null',\n '[attr.placeholder]': 'placeholder || null',\n '[attr.aria-required]': 'required || null',\n '(keydown)': '_keydown($event)',\n '(keyup)': '_keyup($event)',\n '(blur)': '_blur()',\n '(focus)': '_focus()',\n '(input)': '_onInput()',\n },\n})\nexport class GraniteChipInputDirective\n implements GraniteChipTextControl, OnChanges, OnDestroy, AfterContentInit\n{\n /** Unique id for the input. */\n @Input() id: string = `granite-chip-list-input-${nextUniqueId++}`;\n\n /** The input's placeholder text. */\n @Input() placeholder: string = '';\n\n /** Emitted when a chip is to be added. */\n @Output() readonly graniteChipInputTokenEnd =\n new EventEmitter<GraniteChipInputEvent>();\n\n /** Register input for chip list */\n @Input()\n set graniteChipInputFor(value: GraniteChipListComponent) {\n if (value) {\n this._chipList = value;\n this._chipList.registerInput(this);\n }\n }\n\n /**\n * The list of key codes that will trigger a chipEnd event.\n *\n * Defaults to `[ENTER]`.\n */\n @Input()\n graniteChipInputSeparatorKeyCodes: readonly number[] | ReadonlySet<number> = [\n ENTER,\n ] as const;\n\n /**\n * Whether or not the chipEnd event will be emitted when the input is blurred.\n */\n @Input()\n get graniteChipInputAddOnBlur(): boolean {\n return this._addOnBlur;\n }\n set graniteChipInputAddOnBlur(value: boolean) {\n this._addOnBlur = coerceBooleanProperty(value);\n }\n _addOnBlur: boolean = true;\n\n /**\n * Whether this is a required field, currently we use it only for setting aria-required.\n */\n @Input()\n get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n /** The native input element to which this directive is attached. */\n readonly inputElement!: HTMLInputElement;\n _chipList: GraniteChipListComponent;\n focused: boolean = false;\n\n protected _required: boolean | undefined;\n\n /** Whether the input is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled || (this._chipList && this._chipList.disabled);\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n /** Whether the input is empty. */\n get empty(): boolean {\n return !this.inputElement.value;\n }\n\n private _disabled: boolean = false;\n\n /** Used to prevent focus moving to chips while user is holding backspace */\n private _focusLastChipOnBackspace: boolean;\n\n constructor(protected _elementRef: ElementRef<HTMLInputElement>) {\n this.inputElement = this._elementRef.nativeElement as HTMLInputElement;\n }\n\n ngOnChanges(): void {\n this._chipList.stateChanges.next();\n }\n\n ngOnDestroy(): void {\n this.graniteChipInputTokenEnd.complete();\n }\n\n ngAfterContentInit(): void {\n this._focusLastChipOnBackspace = this.empty;\n }\n\n /** Utility method to make host definition/tests more clear. */\n _keydown(event?: KeyboardEvent): void {\n if (event) {\n // Allow the user's focus to escape when they're tabbing forward. Note that we don't\n // want to do this when going backwards, because focus should go back to the first chip.\n if (event.keyCode === TAB && !hasModifierKey(event, 'shiftKey')) {\n this._chipList._allowFocusEscape();\n }\n\n // To prevent the user from accidentally deleting chips when pressing BACKSPACE continuously,\n // We focus the last chip on backspace only after the user has released the backspace button,\n // and the input is empty (see behaviour in _keyup)\n if (event.keyCode === BACKSPACE && this._focusLastChipOnBackspace) {\n this._chipList._keyManager.setLastItemActive();\n event.preventDefault();\n return;\n } else {\n this._focusLastChipOnBackspace = false;\n }\n }\n\n this._emitChipEnd(event);\n }\n\n /**\n * Pass events to the keyboard manager. Available here for tests.\n */\n _keyup(event: KeyboardEvent): void {\n // Allow user to move focus to chips next time he presses backspace\n if (\n !this._focusLastChipOnBackspace &&\n event.keyCode === BACKSPACE &&\n this.empty\n ) {\n this._focusLastChipOnBackspace = true;\n event.preventDefault();\n }\n }\n\n /** Checks to see if the blur should emit the (chipEnd) event. */\n _blur(): void {\n if (this.graniteChipInputAddOnBlur) {\n this._emitChipEnd();\n }\n this.focused = false;\n // Blur the chip list if it is not focused\n if (!this._chipList.focused) {\n this._chipList._blur();\n }\n this._chipList.stateChanges.next();\n }\n\n _focus(): void {\n this.focused = true;\n this._focusLastChipOnBackspace = this.empty;\n this._chipList.stateChanges.next();\n }\n\n /** Checks to see if the (chipEnd) event needs to be emitted. */\n _emitChipEnd(event?: KeyboardEvent): void {\n if (!this.inputElement.value && !!event) {\n this._chipList._keydown(event);\n }\n\n if (!event || this._isSeparatorKey(event)) {\n this.graniteChipInputTokenEnd.emit({\n input: this.inputElement,\n value: this.inputElement.value,\n chipInput: this,\n });\n\n event?.preventDefault();\n }\n }\n\n _onInput(): void {\n // Let chip list know whenever the value changes.\n this._chipList.stateChanges.next();\n }\n\n /** Focuses the input (called from parent level). */\n setFocus(options?: FocusOptions): void {\n this.inputElement.focus(options);\n }\n\n /** Clears the input */\n clear(): void {\n this.inputElement.value = '';\n this._focusLastChipOnBackspace = true;\n }\n\n /** Checks whether a keycode is one of the configured separators. */\n private _isSeparatorKey(event: KeyboardEvent): boolean {\n return (\n !hasModifierKey(event) &&\n new Set(this.graniteChipInputSeparatorKeyCodes).has(event.keyCode)\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { GraniteIconModule } from '../icon/icon.module';\nimport { GraniteChipListComponent } from './chip-list.component';\nimport { GraniteChipComponent } from './chip.component';\nimport { GraniteChipInputDirective } from './chip-input';\n\nconst CHIP_DECLARATIONS = [\n GraniteChipListComponent,\n GraniteChipComponent,\n GraniteChipInputDirective,\n];\n\n@NgModule({\n imports: [CommonModule, FormsModule, ReactiveFormsModule, GraniteIconModule],\n declarations: CHIP_DECLARATIONS,\n exports: CHIP_DECLARATIONS,\n})\nexport class GraniteChipsModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Component({\n selector: 'granite-label',\n exportAs: 'graniteLabel',\n host: {\n class: 'granite-label',\n },\n templateUrl: './label.component.html',\n styleUrls: ['./label.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteLabelComponent implements OnChanges {\n @Input()\n for: string | null = null;\n\n @Input()\n form: string | null = null;\n\n @Input()\n required: boolean = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.required) {\n this.required = coerceBooleanProperty(changes.required.currentValue);\n }\n }\n}\n","<label [attr.for]=\"for\" [attr.form]=\"form\">\n <i *ngIf=\"required\" aria-label=\"required\">*</i>\n <ng-content></ng-content>\n</label>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteLabelComponent } from './label.component';\n\n@NgModule({\n declarations: [GraniteLabelComponent],\n imports: [CommonModule],\n exports: [GraniteLabelComponent],\n})\nexport class GraniteLabelModule {}\n","import { TemplateRef, ViewChild, Directive } from '@angular/core';\nimport {\n ClientInputInterface,\n ClientOutputInterface,\n} from '../../core/client-environment';\nimport { Direction } from '@angular/cdk/bidi';\n\nexport type PositionX = 'before' | 'after';\nexport type PositionY = 'above' | 'below';\n\nlet contactsPanelUid = 0;\n\n@Directive({})\nexport class ContactsTriggerDataComponent {\n @ViewChild(TemplateRef) templateRef: TemplateRef<unknown>;\n\n xPosition: PositionX = 'after';\n\n yPosition: PositionY = 'below';\n\n direction: Direction;\n\n /**\n * Used for locating the panel in tests and setting the aria-control attribute\n * for the contacts trigger.\n */\n readonly panelId = `granite-contacts-panel-${contactsPanelUid++}`;\n\n /** Client input device information */\n clientInput: ClientInputInterface;\n\n /** Client output device information */\n clientOutput: ClientOutputInterface;\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[graniteCustomStatus]',\n})\nexport class GraniteCustomStatusDirective {\n @Input()\n graniteCustomStatus: string;\n\n constructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[graniteCustomProfile]',\n})\nexport class GraniteCustomProfileDirective {\n constructor(public templateRef: TemplateRef<unknown>) {}\n}\n","type firstName = string;\ntype lastName = string;\n\ntype NamesFormat = {\n firstName?: firstName | null;\n lastName?: lastName | null;\n name?: string;\n};\n\ntype NameData = {\n firstName?: firstName;\n lastName?: lastName;\n initials: string;\n};\n\nexport class NamesUtilsService {\n static getInitialsFrom(firstName: string): string {\n return firstName\n .split(' ')\n .map((part) => part.charAt(0).toUpperCase())\n .join('');\n }\n\n static buildNameData(namesFormat: NamesFormat): NameData {\n const { firstName, lastName, name } = namesFormat;\n\n const getInitials = (fullName: string | null | undefined) =>\n NamesUtilsService.getInitialsFrom(fullName);\n\n if (firstName && lastName) {\n return {\n firstName: firstName,\n lastName: lastName,\n initials: `${getInitials(firstName)[0]}${getInitials(lastName)[0]}`,\n };\n }\n\n if (firstName) {\n const firstNameInitials = getInitials(firstName);\n return {\n firstName: firstName,\n initials: `${firstNameInitials[0]}${firstNameInitials[1] || ''}`,\n };\n }\n\n if (lastName) {\n const lastNameInitials = getInitials(lastName);\n return {\n lastName: lastName,\n initials: `${lastNameInitials[0]}${lastNameInitials[1] || ''}`,\n };\n }\n\n if (name) {\n const nameInitials = getInitials(name);\n const nameParts = name.split(' ');\n const firstNameParts =\n nameParts.length > 1 ? nameParts.slice(0, -1) : [name];\n const lastName =\n nameParts.length > 1 ? nameParts[nameParts.length - 1] : '';\n const firstName = firstNameParts.join(' ');\n\n return {\n firstName: firstName,\n lastName: lastName,\n initials: `${nameInitials[0]}${nameInitials[1] || ''}`,\n };\n }\n\n return {\n firstName: '',\n lastName: '',\n initials: '',\n };\n }\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[graniteCustomAvatarStatus]',\n})\nexport class GraniteCustomAvatarStatusDirective {\n @Input()\n graniteCustomAvatarStatus: string;\n\n constructor(public templateRef: TemplateRef<unknown>) {}\n}\n","export type AvatarDefaultStatuses =\n (typeof AVATAR_DEFAULT_STATUS)[keyof typeof AVATAR_DEFAULT_STATUS];\n\nexport const AVATAR_DEFAULT_STATUS = {\n AVAILABLE: 'Available',\n DO_NOT_DISTURB: 'DoNotDisturb',\n DISABLED: 'Disabled',\n AWAY: 'Away',\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\nimport {\n AVATAR_DEFAULT_STATUS,\n AvatarDefaultStatuses,\n} from '../avatar.component.public-types';\n\nexport type StatusClasses =\n | 'available'\n | 'do-not-disturb'\n | 'disabled'\n | 'away';\n\n@Component({\n selector: 'granite-avatar-default-status',\n host: {\n class: 'granite-avatar-default-status',\n },\n template: '',\n styleUrls: ['./avatar-default-status.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteAvatarDefaultStatusComponent {\n @Input() status: AvatarDefaultStatuses;\n\n AVATAR_STATUS = AVATAR_DEFAULT_STATUS;\n\n @HostBinding('class') get statusClass(): StatusClasses {\n switch (this.status) {\n case this.AVATAR_STATUS.AVAILABLE:\n return 'available';\n\n case this.AVATAR_STATUS.DO_NOT_DISTURB:\n return 'do-not-disturb';\n\n case this.AVATAR_STATUS.DISABLED: {\n return 'disabled';\n }\n case this.AVATAR_STATUS.AWAY: {\n return 'away';\n }\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'granite-empty-avatar',\n host: {\n class: 'granite-empty-avatar',\n },\n template: `\n <div class=\"no-profile-avatar\" [attr.aria-label]=\"ariaLabel\" role=\"img\">\n <span\n data-fnd=\"no-profile-avatar-initials\"\n class=\"no-profile-avatar-initials\"\n >{{ initials }}</span\n >\n </div>\n `,\n styleUrls: ['./empty-avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteEmptyAvatarComponent {\n @Input() initials: string;\n\n @Input('aria-label')\n ariaLabel: string | null = null;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n ContentChildren,\n QueryList,\n AfterContentChecked,\n TemplateRef,\n ChangeDetectorRef,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { ContactsTriggerDataComponent } from '../contacts/contacts-trigger/contacts-trigger-data';\nimport { GraniteCustomAvatarStatusDirective } from './custom-avatar-status.directive';\nimport { AvatarDefaultStatuses } from './avatar.component.public-types';\nimport { NamesUtilsService } from '../core/services/names-utils-service';\n\n@Component({\n selector: 'granite-avatar',\n exportAs: 'graniteAvatar',\n host: {\n class: 'granite-avatar',\n },\n templateUrl: './avatar.component.html',\n styleUrls: ['./avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteAvatarComponent\n extends ContactsTriggerDataComponent\n implements AfterContentChecked, OnChanges\n{\n @Input() name: string;\n @Input() firstName: string;\n @Input() lastName: string;\n @Input() avatar: string;\n @Input() status: AvatarDefaultStatuses;\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @ContentChildren(GraniteCustomAvatarStatusDirective)\n _customStatusesQueryList: QueryList<GraniteCustomAvatarStatusDirective>;\n _customStatusDirectives: Record<string, TemplateRef<unknown>>;\n\n _nameInitials: string;\n\n avatarAriaLabel: string = '';\n\n constructor(private cd: ChangeDetectorRef) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.firstName ||\n changes.lastName ||\n changes.name ||\n changes.ariaLabel\n ) {\n const nameData = NamesUtilsService.buildNameData({\n firstName: changes.firstName?.currentValue,\n lastName: changes.lastName?.currentValue,\n name: changes.name?.currentValue,\n });\n\n this._nameInitials = nameData?.initials;\n\n this.avatarAriaLabel =\n changes.ariaLabel?.currentValue ??\n `${nameData?.firstName ?? ''} ${nameData?.lastName ?? ''}`.trim();\n\n this.cd.markForCheck();\n }\n }\n\n ngAfterContentChecked(): void {\n this._customStatusDirectives = this._customStatusesQueryList\n .toArray()\n .reduce((directives, next) => {\n return {\n ...directives,\n [next.graniteCustomAvatarStatus]: next.templateRef,\n };\n }, {});\n }\n}\n","<img\n data-fnd=\"profile-avatar\"\n *ngIf=\"avatar; else noProfileAvatar\"\n [src]=\"avatar\"\n alt=\"avatar\"\n class=\"profile-avatar profile-size\"\n [attr.aria-label]=\"avatarAriaLabel\"\n/>\n\n<ng-template #noProfileAvatar>\n <granite-empty-avatar\n class=\"profile-size\"\n [initials]=\"_nameInitials\"\n [aria-label]=\"avatarAriaLabel\"\n ></granite-empty-avatar>\n</ng-template>\n\n@if (status && _customStatusDirectives[status]) {\n <ng-container *ngTemplateOutlet=\"customStatus\"></ng-container>\n} @else if (status) {\n <ng-container *ngTemplateOutlet=\"defaultStatus\"></ng-container>\n}\n\n<ng-template #defaultStatus>\n <granite-avatar-default-status\n class=\"profile-default-status\"\n [attr.data-fnd]=\"status + '-status'\"\n [status]=\"status\"\n ></granite-avatar-default-status>\n</ng-template>\n\n<ng-template #customStatus>\n <div\n [attr.data-fnd]=\"'profile-status-custom'\"\n [class]=\"'profile-status-' + status\"\n class=\"profile-custom-status\"\n >\n <ng-container\n *ngTemplateOutlet=\"_customStatusDirectives[status]\"\n ></ng-container>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ProfileData } from '../contacts-types/contacts.component.private-types';\n\n@Component({\n selector: 'granite-contacts-profile',\n host: {\n class: 'granite-contacts-profile',\n },\n templateUrl: './contacts-profile.component.html',\n styleUrls: ['./contacts-profile.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteContactsProfileComponent {\n @Input() profile: ProfileData;\n @Input() profileClass;\n}\n","<div [class]=\"profileClass\" data-fnd=\"profile\" class=\"profile\">\n <granite-avatar\n data-fnd=\"profile-avatar\"\n class=\"profile-avatar\"\n [firstName]=\"profile.firstName\"\n [lastName]=\"profile.lastName\"\n [avatar]=\"profile.avatar\"\n ></granite-avatar>\n\n <ng-template #noProfileAvatar>\n <div class=\"no-profile-avatar\">\n <span\n data-fnd=\"no-profile-avatar-initials\"\n class=\"no-profile-avatar-initials\"\n >{{ profile?.initials }}</span\n >\n </div>\n </ng-template>\n\n <div class=\"profile-info\">\n <p data-fnd=\"profile-info-names\" class=\"profile-info-names\">\n {{ profile?.firstName }} {{ profile?.lastName }}\n </p>\n <p data-fnd=\"profile-info-job-title\" class=\"profile-info-job-title\">\n {{ profile?.jobTitle }}\n </p>\n </div>\n</div>\n","export type ContactDefaultStatuses =\n (typeof CONTACT_DEFAULT_STATUS)[keyof typeof CONTACT_DEFAULT_STATUS];\n\nexport const CONTACT_DEFAULT_STATUS = {\n AVAILABLE: 'Available',\n AWAY: 'Away',\n BE_RIGHT_BACK: 'BeRightBack',\n BUSY: 'Busy',\n DO_NOT_DISTURB: 'DoNotDisturb',\n OFFLINE: 'Offline',\n} as const;\n\nexport interface Contact<T = unknown> {\n name: string;\n label: string;\n iconName?: string;\n status?: ContactDefaultStatuses | string;\n options?: ContactOption<T>[];\n disabled?: boolean;\n data?: T;\n}\n\nexport interface SelectedContact<T = unknown> {\n contact: ContactOption<T>;\n parent?: Contact<T>;\n}\n\nexport type ContactOption<T = unknown> = Omit<Contact<T>, 'options'>;\n\nexport interface Profile {\n firstName?: string;\n lastName?: string;\n name?: string;\n jobTitle?: string;\n avatar?: string;\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport {\n CONTACT_DEFAULT_STATUS,\n ContactDefaultStatuses,\n} from '../contacts-types/contacts.component.public-types';\n\n@Component({\n selector: 'granite-contact-item-default-status',\n host: {\n class: 'granite-contact-item-default-status',\n },\n templateUrl: './contact-item-default-status.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContactItemDefaultStatusComponent {\n @Input() status: ContactDefaultStatuses;\n CONTACT_STATUS = CONTACT_DEFAULT_STATUS;\n}\n","<ng-container [ngSwitch]=\"status\">\n <ng-container *ngSwitchCase=\"CONTACT_STATUS.AVAILABLE\">\n <svg\n data-fnd=\"available\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"9\"\n height=\"10\"\n viewBox=\"0 0 9 10\"\n fill=\"none\"\n >\n <path\n d=\"M4.085 0.915009C1.83008 0.915009 0 2.74509 0 5.00001C0 7.25493 1.83008 9.08501 4.085 9.08501C6.33992 9.08501 8.17 7.25493 8.17 5.00001C8.17 2.74509 6.33992 0.915009 4.085 0.915009Z\"\n fill=\"#17A511\"\n />\n <path\n d=\"M2.45099 4.82838L3.47224 6.06418L5.51474 4.21048\"\n stroke=\"white\"\n stroke-linecap=\"round\"\n />\n </svg>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"CONTACT_STATUS.BUSY\">\n <svg\n data-fnd=\"busy\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n >\n <path\n d=\"M4.25504 0.169922C2.00012 0.169922 0.170044 2 0.170044 4.25492C0.170044 6.50984 2.00012 8.33992 4.25504 8.33992C6.50996 8.33992 8.34004 6.50984 8.34004 4.25492C8.34004 2 6.50996 0.169922 4.25504 0.169922Z\"\n fill=\"#D23335\"\n />\n </svg>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"CONTACT_STATUS.DO_NOT_DISTURB\">\n <svg\n data-fnd=\"doNotDisturb\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n >\n <path\n d=\"M4.085 0C1.83008 0 0 1.83008 0 4.085C0 6.33992 1.83008 8.17 4.085 8.17C6.33992 8.17 8.17 6.33992 8.17 4.085C8.17 1.83008 6.33992 0 4.085 0Z\"\n fill=\"#D23335\"\n />\n <path d=\"M2 4L6 4\" stroke=\"white\" stroke-linecap=\"round\" />\n </svg>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"CONTACT_STATUS.AWAY\">\n <svg\n data-fnd=\"away\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n >\n <path\n d=\"M4.085 0C1.83008 0 0 1.83008 0 4.085C0 6.33992 1.83008 8.17 4.085 8.17C6.33992 8.17 8.17 6.33992 8.17 4.085C8.17 1.83008 6.33992 0 4.085 0Z\"\n fill=\"#EDA000\"\n />\n <path d=\"M4 2L4 3.875L5.5 5.5\" stroke=\"white\" stroke-linecap=\"round\" />\n </svg>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"CONTACT_STATUS.OFFLINE\">\n <svg\n data-fnd=\"offline\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n >\n <path\n d=\"M0.5 4.085C0.5 2.10622 2.10622 0.5 4.085 0.5C6.06378 0.5 7.67 2.10622 7.67 4.085C7.67 6.06378 6.06378 7.67 4.085 7.67C2.10622 7.67 0.5 6.06378 0.5 4.085Z\"\n stroke=\"#7D7D7D\"\n />\n <path d=\"M3 3L5 5\" stroke=\"#7D7D7D\" stroke-linecap=\"round\" />\n <path d=\"M5 3L3 5\" stroke=\"#7D7D7D\" stroke-linecap=\"round\" />\n </svg>\n </ng-container>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ContactExtended } from '../contacts-types/contacts.component.private-types';\n\n@Component({\n selector: 'granite-contact-item-title',\n host: {\n class: 'granite-contact-item-title',\n },\n templateUrl: './contact-item-title.component.html',\n styleUrls: ['./contact-item-title.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteContactItemTitleComponent {\n @Input() contact: ContactExtended;\n}\n","<button\n tabindex=\"0\"\n data-fnd=\"contact-item-title\"\n [class.title-status-active]=\"!contact.disabled && !contact.options\"\n [class.title-status-disabled]=\"contact.disabled\"\n [class.title-status-parent]=\"!contact.disabled && contact.options\"\n>\n {{ contact.label }}\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { SelectedContact } from '../contacts-types/contacts.component.public-types';\nimport { ContactExtended } from '../contacts-types/contacts.component.private-types';\n\n@Component({\n selector: 'granite-contact-item',\n host: {\n class: 'granite-contact-item',\n },\n templateUrl: './contact-item.component.html',\n styleUrls: ['./contact-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteContactItemComponent {\n @Input() contact: ContactExtended;\n\n @Output() readonly selectedContact = new EventEmitter<SelectedContact>();\n\n emitSelectedContact(selectedContact: SelectedContact): void {\n this.selectedContact.emit(selectedContact);\n }\n}\n","<div class=\"contact-item\" [attr.data-fnd]=\"contact.name\">\n <div class=\"contact-item-main\">\n <ng-container\n *ngTemplateOutlet=\"\n contactItem;\n context: {\n contact: contact,\n testName: 'contact',\n selectedContactOutput: { contact }\n }\n \"\n ></ng-container>\n </div>\n\n <ul *ngIf=\"contact.options\" class=\"contact-item-options\">\n <li\n tabindex=\"0\"\n *ngFor=\"let option of contact.options; let i = index\"\n class=\"option-item\"\n [attr.data-fnd]=\"'contact-option-' + i\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n contactItem;\n context: {\n contact: option,\n testName: 'contact-option-' + i,\n selectedContactOutput: { contact: option, parent: contact }\n }\n \"\n ></ng-container>\n </li>\n </ul>\n</div>\n\n<ng-template\n let-testName=\"testName\"\n let-contact=\"contact\"\n let-selectedContactOutput=\"selectedContactOutput\"\n #contactItem\n>\n <granite-icon\n [attr.data-fnd]=\"testName + '-icon'\"\n fontIcon=\"{{ contact.iconName }}\"\n ></granite-icon>\n\n <granite-contact-item-title\n [attr.data-fnd]=\"testName + '-title'\"\n tabindex=\"0\"\n [contact]=\"contact\"\n [class.contact-item-disabled]=\"contact.options || contact.disabled\"\n (click)=\"emitSelectedContact(selectedContactOutput)\"\n ></granite-contact-item-title>\n\n <ng-container *ngIf=\"contact.statusTemplate; else defaultStatus\">\n <ng-container *ngTemplateOutlet=\"contact.statusTemplate\"></ng-container>\n </ng-container>\n\n <ng-template #defaultStatus>\n <granite-contact-item-default-status\n [attr.data-fnd]=\"testName + '-status'\"\n [status]=\"contact.status\"\n ></granite-contact-item-default-status>\n </ng-template>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n Output,\n EventEmitter,\n ContentChildren,\n QueryList,\n AfterContentChecked,\n ContentChild,\n OnChanges,\n SimpleChanges,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {\n Contact,\n Profile,\n SelectedContact,\n} from './contacts-types/contacts.component.public-types';\nimport { ContactsTriggerDataComponent } from './contacts-trigger/contacts-trigger-data';\nimport { GraniteCustomStatusDirective } from './custom-status.directive';\nimport {\n ContactExtended,\n ProfileData,\n} from './contacts-types/contacts.component.private-types';\nimport { GraniteCustomProfileDirective } from './custom-profile.directive';\nimport { NamesUtilsService } from '../core/services/names-utils-service';\n\n@Component({\n selector: 'granite-contacts',\n exportAs: 'graniteContacts',\n host: {\n class: 'granite-contacts',\n },\n templateUrl: './contacts.component.html',\n styleUrls: ['./contacts.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteContactsComponent\n extends ContactsTriggerDataComponent\n implements OnChanges, AfterContentChecked\n{\n @Input() contacts: Contact[] = [];\n @Input() contactsClass: string;\n @Input() profile: Profile | unknown;\n @Input() profileClass: string;\n @Input() defaultShow = false;\n\n @Output() readonly selectedContact = new EventEmitter<SelectedContact>();\n\n @ContentChildren(GraniteCustomStatusDirective)\n _customStatuses: QueryList<GraniteCustomStatusDirective>;\n\n @ContentChild(GraniteCustomProfileDirective)\n customProfileDirective: GraniteCustomProfileDirective;\n\n _contactsExtended: ContactExtended[] = [];\n _profile: ProfileData;\n\n constructor(private cd: ChangeDetectorRef) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.contacts && !changes.contacts.currentValue) {\n this.contacts = [];\n }\n\n if (changes.profile?.currentValue) {\n const profile = changes.profile.currentValue as Profile;\n this._profile = this.createProfileData(profile);\n }\n this.cd.markForCheck();\n }\n\n ngAfterContentChecked(): void {\n this._contactsExtended = this.setProperCustomStatusTemplates(\n this._customStatuses.toArray(),\n this.contacts\n );\n }\n\n onSelectedContact(contact: SelectedContact): void {\n this.selectedContact.emit(contact);\n }\n\n private setProperCustomStatusTemplates(\n customStatusDirectives: GraniteCustomStatusDirective[],\n contacts: Contact[]\n ): ContactExtended[] {\n return this.applyTemplates(contacts, customStatusDirectives);\n }\n\n private applyTemplates(\n contacts: Contact[] | ContactExtended[],\n directives: GraniteCustomStatusDirective[]\n ): ContactExtended[] {\n return contacts.map((item) => {\n const matchingDirective = directives.find(\n (d) => d.graniteCustomStatus === item.status\n );\n\n const result = { ...item };\n\n if (matchingDirective) {\n result.statusTemplate = matchingDirective.templateRef;\n }\n\n if (item.options) {\n result.options = this.applyTemplates(item.options, directives);\n }\n\n return result;\n });\n }\n\n private createProfileData(profile: Profile): ProfileData {\n const nameData = NamesUtilsService.buildNameData({\n firstName: profile.firstName,\n lastName: profile.lastName,\n name: profile.name,\n });\n\n return {\n firstName: nameData.firstName,\n lastName: nameData.lastName,\n initials: nameData.initials,\n jobTitle: profile.jobTitle,\n avatar: profile.avatar,\n };\n }\n}\n","<ng-template #contactsTemplate>\n <div data-fnd=\"contacts\" [class]=\"contactsClass\" class=\"granite-contact\">\n <ng-container *ngIf=\"customProfileDirective; else defaultProfile\">\n <ng-container\n *ngTemplateOutlet=\"customProfileDirective.templateRef\"\n ></ng-container>\n </ng-container>\n\n <ng-template #defaultProfile>\n <granite-contacts-profile\n data-fnd=\"default-profile\"\n [profileClass]=\"profileClass\"\n [profile]=\"_profile\"\n ></granite-contacts-profile>\n </ng-template>\n\n <ul class=\"contact-list\">\n <li *ngFor=\"let contact of _contactsExtended\">\n <granite-contact-item\n [contact]=\"contact\"\n (selectedContact)=\"onSelectedContact($event)\"\n ></granite-contact-item>\n </li>\n </ul>\n </div>\n</ng-template>\n\n<ng-container *ngIf=\"defaultShow\">\n <ng-container *ngTemplateOutlet=\"contactsTemplate\"></ng-container>\n</ng-container>\n","import {\n AfterContentInit,\n Directive,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n Optional,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport {\n FlexibleConnectedPositionStrategy,\n HorizontalConnectionPos,\n Overlay,\n OverlayConfig,\n OverlayOutsideClickDispatcher,\n OverlayRef,\n PositionStrategy,\n VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\n\nimport { Subscription } from 'rxjs';\nimport { GraniteContactsComponent } from '../contacts.component';\nimport {\n ClientInputInterface,\n ClientOutputInterface,\n GRANITE_CLIENT_INPUT,\n GRANITE_CLIENT_OUTPUT,\n} from '../../core/client-environment';\n\n@Directive({\n selector: `[graniteContactsTriggerFor]`,\n host: {\n class: 'granite-contacts-trigger',\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': '_isContactsOpen || null',\n '[attr.aria-controls]': '_isContactsOpen ? contacts.panelId : null',\n '(keydown)': '_handleKeydown($event)',\n '(click)': '_handleClick($event)',\n },\n})\nexport class GraniteContactsTriggerForDirective\n implements AfterContentInit, OnDestroy\n{\n /** References the contacts instance that the trigger is associated with. */\n @Input('graniteContactsTriggerFor')\n contacts: GraniteContactsComponent;\n\n /** Whether the associated contacts is open */\n _isContactsOpen: boolean = false;\n\n private _contactsCloseSubscription = Subscription.EMPTY;\n\n private _portal: TemplatePortal | null = null;\n private _overlayRef: OverlayRef | null = null;\n\n constructor(\n private _overlay: Overlay,\n private _element: ElementRef<HTMLElement>,\n private _viewContainerRef: ViewContainerRef,\n private _outsideClickDispatcher: OverlayOutsideClickDispatcher,\n\n /** Client input device information */\n @Inject(GRANITE_CLIENT_INPUT)\n @Optional()\n public _clientInput: ClientInputInterface,\n\n /** Client output device information */\n @Inject(GRANITE_CLIENT_OUTPUT)\n @Optional()\n public _clientOutput: ClientOutputInterface,\n\n @Optional()\n private _dir: Directionality,\n\n private _focusMonitor: FocusMonitor\n ) {}\n\n ngAfterContentInit(): void {\n const selectedContact = this.contacts.selectedContact;\n\n this._contactsCloseSubscription = selectedContact.subscribe(() =>\n this.closeContacts()\n );\n }\n\n ngOnDestroy(): void {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n this._contactsCloseSubscription.unsubscribe();\n }\n\n isOpen(): boolean {\n return this._isContactsOpen;\n }\n\n openContacts(): void {\n if (this._isContactsOpen) {\n return;\n }\n\n this.contacts.direction = this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n this.contacts.clientInput = this._clientInput;\n this.contacts.clientOutput = this._clientOutput;\n\n const panelClass: string[] = [];\n if (this._clientOutput?.device === 'touch') {\n panelClass.push('granite-overlay-pane-center');\n }\n\n const scrollStrategy =\n this._clientOutput?.device !== 'touch'\n ? this._overlay.scrollStrategies.reposition()\n : this._overlay.scrollStrategies.block();\n\n const hasBackdrop = this._clientOutput?.device === 'touch';\n\n if (!this._overlayRef) {\n const config = new OverlayConfig({\n positionStrategy: this._positionStrategy(),\n backdropClass: 'granite-overlay-dark-glass-backdrop',\n scrollStrategy,\n direction: this._dir,\n panelClass,\n hasBackdrop,\n });\n\n this._overlayRef = this._overlay.create(config);\n }\n\n if (\n !this._portal ||\n this._portal.templateRef !== this.contacts.templateRef\n ) {\n this._portal = new TemplatePortal(\n this.contacts.templateRef,\n this._viewContainerRef\n );\n }\n // Attach portal to overlay ref (which is a portal outlet)\n this._overlayRef.attach(this._portal);\n this._outsideClickDispatcher.add(this._overlayRef);\n this._overlayRef.outsidePointerEvents().subscribe((event: MouseEvent) => {\n event.stopPropagation();\n this.closeContacts();\n });\n\n this._isContactsOpen = true;\n }\n\n /** Toggles the contacts between the open and closed states. */\n toggleContacts(): void {\n if (this._isContactsOpen) {\n this.closeContacts();\n } else {\n this.openContacts();\n }\n }\n\n /** Close the associated contacts */\n closeContacts(): void {\n if (!this._overlayRef || !this._isContactsOpen) {\n return;\n }\n\n this._outsideClickDispatcher.remove(this._overlayRef);\n this._overlayRef.detach();\n\n this._restoreFocus();\n this._isContactsOpen = false;\n }\n\n /** Handles key presses on the trigger. */\n _handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n this.toggleContacts();\n }\n }\n\n /** Handles click events on the trigger. */\n _handleClick(): void {\n this.toggleContacts();\n }\n\n /**\n * Restores focus to the element that was focused before the contacts was open.\n */\n _restoreFocus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(this._element, origin, options);\n } else {\n this._element.nativeElement.focus(options);\n }\n }\n\n /**\n * Returns strategy for positioning the overlay for desktop devices:\n */\n private _desktopPositionStrategy(): PositionStrategy {\n const positionStrategy: FlexibleConnectedPositionStrategy = this._overlay\n .position()\n .flexibleConnectedTo(this._element)\n .withLockedPosition()\n .withTransformOriginOn('.granite-contacts')\n .withPush(false);\n\n this._setPosition(positionStrategy);\n return positionStrategy;\n }\n\n /**\n * Sets the appropriate positions on a position strategy\n * so the overlay connects with the trigger correctly.\n * @param positionStrategy Strategy whose position to update.\n */\n private _setPosition(positionStrategy: FlexibleConnectedPositionStrategy) {\n const [originX, originFallbackX]: HorizontalConnectionPos[] =\n this.contacts.xPosition === 'before'\n ? ['end', 'start']\n : ['start', 'end'];\n\n const [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\n this.contacts.yPosition === 'above'\n ? ['bottom', 'top']\n : ['top', 'bottom'];\n\n let [originY, originFallbackY] = [overlayY, overlayFallbackY];\n const [overlayX, overlayFallbackX] = [originX, originFallbackX];\n const offsetY = 0;\n\n originY = overlayY === 'top' ? 'bottom' : 'top';\n originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n\n positionStrategy.withPositions([\n { originX, originY, overlayX, overlayY, offsetY },\n {\n originX: originFallbackX,\n originY,\n overlayX: overlayFallbackX,\n overlayY,\n offsetY,\n },\n {\n originX,\n originY: originFallbackY,\n overlayX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n {\n originX: originFallbackX,\n originY: originFallbackY,\n overlayX: overlayFallbackX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n ]);\n }\n\n /**\n * Returns strategy for positioning the overlay depending on what type of\n * device the contacts is being shown on\n */\n private _positionStrategy(): PositionStrategy {\n if (this._clientOutput?.device !== 'touch') {\n return this._desktopPositionStrategy();\n }\n return this._touchPositionStrategy();\n }\n\n /**\n * Returns strategy for positioning the overlay for touch devices:\n * Place centered in the screen.\n */\n private _touchPositionStrategy(): PositionStrategy {\n return this._overlay.position().global();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteAvatarComponent } from './avatar.component';\nimport { GraniteCustomAvatarStatusDirective } from './custom-avatar-status.directive';\nimport { GraniteAvatarDefaultStatusComponent } from './avatar-default-status/avatar-default-status.component';\nimport { GraniteEmptyAvatarComponent } from './empty-avatar/empty-avatar.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n GraniteAvatarComponent,\n GraniteAvatarDefaultStatusComponent,\n GraniteCustomAvatarStatusDirective,\n GraniteEmptyAvatarComponent,\n ],\n exports: [\n GraniteAvatarComponent,\n GraniteAvatarDefaultStatusComponent,\n GraniteCustomAvatarStatusDirective,\n GraniteEmptyAvatarComponent,\n ],\n})\nexport class GraniteAvatarModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteContactsComponent as GraniteContactsComponent } from './contacts.component';\nimport { GraniteIconModule } from '../icon/icon.module';\nimport { GraniteContactItemComponent } from './contact-item/contact-item.component';\nimport { ContactItemDefaultStatusComponent } from './contact-item-default-status/contact-item-default-status.component';\nimport { GraniteContactItemTitleComponent } from './contact-item-title/contact-item-title.component';\nimport { GraniteCustomStatusDirective } from './custom-status.directive';\nimport { GraniteContactsTriggerForDirective } from './contacts-trigger/contacts-trigger-for.directive';\nimport { GraniteContactsProfileComponent } from './contacts-profile/contacts-profile.component';\nimport { GraniteCustomProfileDirective } from './custom-profile.directive';\nimport { GraniteAvatarModule } from '../avatar/avatar.module';\n\n@NgModule({\n imports: [GraniteIconModule, GraniteAvatarModule, CommonModule],\n declarations: [\n GraniteContactsComponent,\n GraniteContactsProfileComponent,\n GraniteContactItemComponent,\n ContactItemDefaultStatusComponent,\n GraniteContactItemTitleComponent,\n GraniteContactsTriggerForDirective,\n GraniteCustomStatusDirective,\n GraniteCustomProfileDirective,\n ],\n exports: [\n GraniteContactsComponent,\n GraniteContactsTriggerForDirective,\n GraniteContactItemComponent,\n GraniteCustomStatusDirective,\n GraniteCustomProfileDirective,\n ],\n})\nexport class GraniteContactsModule {}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n OnDestroy,\n Renderer2,\n} from '@angular/core';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n@Directive({\n selector: '[graniteHideOnOverflow]',\n exportAs: 'graniteHideOnOverflow',\n})\nexport class GraniteHideOnOverflowDirective\n implements AfterViewInit, OnDestroy\n{\n resizeObserver: ResizeObserver;\n resizeSubscription: Subscription;\n mutationObserver: MutationObserver;\n\n constructor(\n private _elementRef: ElementRef,\n private renderer: Renderer2\n ) {}\n\n ngAfterViewInit(): void {\n this.hideOnOverflow();\n this.observeResize();\n this.observeContentChange();\n }\n\n ngOnDestroy(): void {\n this.unObserveResize();\n this.unObserveContentChange();\n }\n\n hideOnOverflow(): void {\n const element = this._elementRef?.nativeElement;\n\n if (element) {\n const contentWidth = element.scrollWidth;\n const containerWidth = element.clientWidth;\n\n if (contentWidth > containerWidth) {\n this.renderer.setStyle(element, 'visibility', 'hidden');\n } else {\n this.renderer.removeStyle(element, 'visibility');\n }\n }\n }\n\n observeResize(): void {\n if (window.ResizeObserver) {\n const element = this._elementRef?.nativeElement;\n\n if (element) {\n this.resizeObserver = new ResizeObserver(() => this.hideOnOverflow());\n this.resizeObserver.observe(element);\n }\n } else {\n this.subscribeToResize();\n }\n }\n\n unObserveResize(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n\n subscribeToResize(): void {\n this.resizeSubscription = fromEvent(window, 'resize')\n .pipe(debounceTime(1000))\n .subscribe(() => this.hideOnOverflow());\n }\n\n observeContentChange(): void {\n const element = this._elementRef?.nativeElement;\n\n if (element) {\n this.mutationObserver = new MutationObserver(() => this.hideOnOverflow());\n this.mutationObserver.observe(element, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n }\n }\n\n unObserveContentChange(): void {\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n }\n }\n}\n","import { Direction } from '@angular/cdk/bidi';\nimport { Directive, TemplateRef, ViewChild } from '@angular/core';\nimport {\n ClientInputInterface,\n ClientOutputInterface,\n} from './client-environment';\n\nexport type PositionX = 'before' | 'after';\nexport type PositionY = 'above' | 'below';\n\n@Directive({})\nexport class OverlayBaseComponent {\n @ViewChild(TemplateRef) templateRef: TemplateRef<any>;\n\n xPosition: PositionX = 'after';\n\n yPosition: PositionY = 'below';\n\n direction: Direction;\n\n clientInput: ClientInputInterface;\n\n clientOutput: ClientOutputInterface;\n}\n","import { Directive } from '@angular/core';\nimport { OverlayBaseComponent, PositionX } from '../core/overlay-base';\n\nlet legendPanelUid = 0;\n\n@Directive()\nexport class LegendBaseComponent extends OverlayBaseComponent {\n readonly panelId = `granite-progress-bar-legend-panel-${legendPanelUid++}`;\n override xPosition: PositionX = 'before';\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { LegendBaseComponent } from '../progress-bar-legend-base';\nimport { GraniteProgressLegendInterface } from '../progress-bar.model';\n\n@Component({\n selector: 'granite-progress-bar-legend',\n templateUrl: './progress-bar-legend.component.html',\n styleUrl: './progress-bar-legend.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteProgressBarLegendComponent extends LegendBaseComponent {\n @Input()\n legendItems: GraniteProgressLegendInterface[] = [];\n}\n","<ng-template>\n <div class=\"legend\" data-fnd=\"legend\">\n <div\n *ngFor=\"let item of legendItems\"\n class=\"legend-item\"\n data-fnd=\"legend-item\"\n >\n <div class=\"legend-label-text\">{{ item.label }}</div>\n <div\n [style.background-color]=\"item.backgroundColor\"\n class=\"color-box\"\n ></div>\n </div>\n </div>\n</ng-template>\n","import {\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayOutsideClickDispatcher,\n OverlayRef,\n PositionStrategy,\n} from '@angular/cdk/overlay';\nimport { ElementRef, Injectable, ViewContainerRef } from '@angular/core';\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { OverlayPositionConfig } from './overlay-position-config';\nimport { OverlayBaseComponent } from './overlay-base';\nimport { TemplatePortal } from '@angular/cdk/portal';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class OverlayService {\n constructor(\n private _overlay: Overlay,\n private _focusMonitor: FocusMonitor,\n private _outsideClickDispatcher: OverlayOutsideClickDispatcher\n ) {}\n\n createOverlay(\n config: OverlayConfig,\n component: OverlayBaseComponent,\n viewContainerRef: ViewContainerRef\n ): OverlayRef {\n const overlayRef = this._overlay.create(config);\n const portal = new TemplatePortal(component.templateRef, viewContainerRef);\n overlayRef.attach(portal);\n return overlayRef;\n }\n\n closeOverlay(overlayRef: OverlayRef, element: ElementRef<HTMLElement>): void {\n this._outsideClickDispatcher.remove(overlayRef);\n overlayRef.detach();\n this.restoreFocus(element);\n }\n\n restoreFocus(\n element: ElementRef<HTMLElement>,\n origin: FocusOrigin = 'program',\n options?: FocusOptions\n ): void {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(element, origin, options);\n } else {\n element.nativeElement.focus(options);\n }\n }\n\n desktopPositionStrategy(\n element: ElementRef<HTMLElement>,\n selector: string\n ): FlexibleConnectedPositionStrategy {\n return this._overlay\n .position()\n .flexibleConnectedTo(element)\n .withLockedPosition()\n .withTransformOriginOn(selector)\n .withPush(false);\n }\n\n touchPositionStrategy(): PositionStrategy {\n return this._overlay.position().global();\n }\n\n setPosition(\n positionStrategy: FlexibleConnectedPositionStrategy,\n positionConfig: OverlayPositionConfig\n ): FlexibleConnectedPositionStrategy {\n const {\n originX,\n originFallbackX,\n originY,\n originFallbackY,\n overlayX,\n overlayFallbackX,\n overlayY,\n overlayFallbackY,\n offsetX,\n offsetY,\n } = positionConfig;\n\n positionStrategy.withPositions([\n { originX, originY, overlayX, overlayY, offsetY },\n {\n originX: originFallbackX,\n originY,\n overlayX: overlayFallbackX,\n overlayY,\n offsetY,\n },\n {\n originX,\n originY: originFallbackY,\n overlayX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n {\n originX: originFallbackX,\n originY: originFallbackY,\n overlayX: overlayFallbackX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n ]);\n\n return positionStrategy;\n }\n\n subscribeOutsideClick(overlayRef: OverlayRef, callback?: () => void): void {\n this._outsideClickDispatcher.add(overlayRef);\n overlayRef.outsidePointerEvents().subscribe((event: MouseEvent) => {\n event.stopPropagation();\n if (callback) {\n callback();\n }\n });\n }\n}\n","import {\n BlockScrollStrategy,\n CloseScrollStrategy,\n FlexibleConnectedPositionStrategy,\n HorizontalConnectionPos,\n Overlay,\n OverlayConfig,\n OverlayRef,\n PositionStrategy,\n RepositionScrollStrategy,\n VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport {\n Directive,\n ElementRef,\n inject,\n OnDestroy,\n Optional,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n GRANITE_CLIENT_INPUT,\n GRANITE_CLIENT_OUTPUT,\n} from './client-environment';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { OverlayService } from './overlay.service';\nimport { OverlayPositionConfig } from './overlay-position-config';\nimport { OverlayBaseComponent } from './overlay-base';\n\n@Directive({\n selector: '[graniteOverlayTriggerForBase]',\n})\nexport class GraniteOverlayTriggerForBaseDirective implements OnDestroy {\n /** Client output device information */\n @Optional()\n private _clientOutput = inject(GRANITE_CLIENT_OUTPUT);\n\n /** Client input device information */\n @Optional()\n private _clientInput = inject(GRANITE_CLIENT_INPUT);\n\n @Optional()\n private _dir = inject(Directionality);\n\n protected componentRef: OverlayBaseComponent;\n protected selector: string;\n protected offsetX: number = 0;\n protected offsetY: number = 0;\n\n private _overlayRef: OverlayRef | null = null;\n\n private _overlay = inject(Overlay);\n private _element = inject(ElementRef<HTMLElement>);\n private _viewContainerRef = inject(ViewContainerRef);\n private _overlayService = inject(OverlayService);\n\n ngOnDestroy(): void {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n\n protected getPositionConfig(): OverlayPositionConfig {\n const [originX, originFallbackX]: HorizontalConnectionPos[] =\n this.componentRef.xPosition === 'before'\n ? ['end', 'start']\n : ['start', 'end'];\n\n const [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\n this.componentRef.yPosition === 'above'\n ? ['bottom', 'top']\n : ['top', 'bottom'];\n\n let [originY, originFallbackY] = [overlayY, overlayFallbackY];\n const [overlayX, overlayFallbackX] = [originX, originFallbackX];\n\n originY = overlayY === 'top' ? 'bottom' : 'top';\n originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n\n return {\n originX,\n originFallbackX,\n originY,\n originFallbackY,\n overlayX,\n overlayFallbackX,\n overlayY,\n overlayFallbackY,\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n };\n }\n\n protected getPositionStrategy(): PositionStrategy {\n let positionStrategy: FlexibleConnectedPositionStrategy =\n this._overlayService.desktopPositionStrategy(\n this._element,\n this.selector\n );\n const positionConfig: OverlayPositionConfig = this.getPositionConfig();\n positionStrategy = this._overlayService.setPosition(\n positionStrategy,\n positionConfig\n );\n return positionStrategy;\n }\n\n protected getScrollStrategy():\n | RepositionScrollStrategy\n | BlockScrollStrategy\n | CloseScrollStrategy {\n return this.setScrollStrategy('close');\n }\n\n protected setScrollStrategy(\n scrollStrategy: 'reposition' | 'block' | 'close'\n ): RepositionScrollStrategy | BlockScrollStrategy | CloseScrollStrategy {\n switch (scrollStrategy) {\n case 'reposition':\n return this._overlay.scrollStrategies.reposition();\n case 'block':\n return this._overlay.scrollStrategies.block();\n case 'close':\n return this._overlay.scrollStrategies.close();\n default:\n return this._overlay.scrollStrategies.close();\n }\n }\n\n protected toggleOverlay(isOpen: boolean): boolean {\n isOpen ? this._closeOverlay() : this._openOverlay();\n return !isOpen;\n }\n\n protected onOutsideClick(): void {\n this._closeOverlay();\n }\n\n private _openOverlay(): void {\n this.componentRef.direction = this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n this.componentRef.clientInput = this._clientInput;\n this.componentRef.clientOutput = this._clientOutput;\n\n const panelClass: string[] = [];\n if (this._clientOutput?.device === 'touch') {\n panelClass.push('granite-overlay-pane-center');\n }\n\n const hasBackdrop = this._clientOutput?.device === 'touch';\n\n const config = new OverlayConfig({\n positionStrategy: this.getPositionStrategy(),\n backdropClass: 'granite-overlay-dark-glass-backdrop',\n scrollStrategy: this.getScrollStrategy(),\n direction: this._dir,\n panelClass,\n hasBackdrop,\n });\n\n this._overlayRef = this._overlayService.createOverlay(\n config,\n this.componentRef,\n this._viewContainerRef\n );\n this._overlayService.subscribeOutsideClick(this._overlayRef, () =>\n this.onOutsideClick()\n );\n }\n\n private _closeOverlay(): void {\n if (!this._overlayRef) {\n return;\n }\n this._overlayService.closeOverlay(this._overlayRef, this._element);\n }\n}\n","import { Directive, Input } from '@angular/core';\nimport { GraniteProgressBarLegendComponent } from './progress-bar-legend/progress-bar-legend.component';\nimport { GraniteOverlayTriggerForBaseDirective } from '../core/overlay-trigger-for-base.directive';\nimport { OverlayBaseComponent } from '../core/overlay-base';\nimport {\n BlockScrollStrategy,\n CloseScrollStrategy,\n RepositionScrollStrategy,\n} from '@angular/cdk/overlay';\n\n@Directive({\n selector: '[graniteProgressBarLegendTriggerFor]',\n host: {\n class: 'granite-progress-bar-legend-trigger',\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'isLegendOpen || null',\n '[attr.aria-controls]': 'isLegendOpen ? legend.panelId : null',\n '(keydown)': 'handleKeydown($event)',\n '(click)': 'handleClick($event)',\n },\n})\nexport class GraniteProgressBarLegendTriggerForDirective extends GraniteOverlayTriggerForBaseDirective {\n @Input('graniteProgressBarLegendTriggerFor')\n get legend(): OverlayBaseComponent {\n return this.componentRef;\n }\n\n set legend(value: GraniteProgressBarLegendComponent) {\n this.componentRef = value;\n }\n\n isLegendOpen: boolean = false;\n\n protected override selector: string = '.granite-progress-bar-legend';\n protected override offsetY: number = 4;\n\n handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n this.isLegendOpen = this.toggleOverlay(this.isLegendOpen);\n }\n }\n\n handleClick(): void {\n this.isLegendOpen = this.toggleOverlay(this.isLegendOpen);\n }\n\n onOutsideClick(): void {\n super.onOutsideClick();\n this.isLegendOpen = false;\n }\n\n override getScrollStrategy():\n | RepositionScrollStrategy\n | BlockScrollStrategy\n | CloseScrollStrategy {\n return this.setScrollStrategy('reposition');\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport {\n GraniteProgressInterface,\n GraniteProgressLegendInterface,\n} from './progress-bar.model';\n\n@Component({\n selector: 'granite-progress-bar',\n exportAs: 'graniteProgressBar',\n templateUrl: './progress-bar.component.html',\n styleUrls: ['./progress-bar.component.scss'],\n host: {\n '[class.label-present]': 'showLabel',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteProgressBarComponent implements OnChanges {\n @Input()\n progressBarData: GraniteProgressInterface[] = [];\n\n @Input()\n legendData: GraniteProgressLegendInterface[] = [];\n\n @Input()\n showLabel: boolean = false;\n\n @Input()\n showLegend: boolean = false;\n\n DEFAULT_TOTAL = 100;\n DEFAULT_BACKGROUND = '--granite-color-background-selected';\n DEFAULT_STACK_COLOR = '--granite-color-categorical-3';\n DEFAULT_COLOR = '--granite-color-text';\n\n total: number = this.DEFAULT_TOTAL;\n legendItems: GraniteProgressLegendInterface[] = [];\n\n getBackgroundColor(): string {\n return this.getColorVar(this.DEFAULT_BACKGROUND);\n }\n\n getFontColor(color: string): string {\n return color\n ? this.getColorVar(color)\n : this.getColorVar(this.DEFAULT_COLOR);\n }\n\n getStackColor(color: string): string {\n return color\n ? this.getColorVar(color)\n : this.getColorVar(this.DEFAULT_STACK_COLOR);\n }\n\n getColorVar(color: string): string {\n return color?.startsWith('--granite') ? `var(${color})` : color;\n }\n\n getWidth(value: number): number {\n return (value / this.total) * 100;\n }\n\n getStringOfWidth(width: number): string {\n return String(width) + '%';\n }\n\n checkStackTotal(): void {\n const totalOfStackedValues = this.getStackTotal();\n if (totalOfStackedValues > this.total) {\n this.total = totalOfStackedValues;\n }\n }\n\n getStackTotal(): number {\n return this.progressBarData.reduce((acc, curr) => acc + curr.value, 0);\n }\n\n setLegendItems(): void {\n this.legendItems =\n this.legendData.length > 0\n ? this.getLegendItems(this.legendData)\n : this.getLegendItems(this.progressBarData);\n }\n\n getLegendItems(\n data: GraniteProgressInterface[] | GraniteProgressLegendInterface[]\n ): GraniteProgressLegendInterface[] {\n return data.map(\n ({\n label,\n backgroundColor,\n }: {\n label?: string;\n backgroundColor?: string;\n }) => {\n const legendItemColor = this.getStackColor(backgroundColor);\n return { label, backgroundColor: legendItemColor };\n }\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.progressBarData) {\n this.checkStackTotal();\n this.setLegendItems();\n }\n\n if (changes.legendData) {\n this.setLegendItems();\n }\n }\n}\n","<div\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n class=\"progress\"\n [style.background-color]=\"getBackgroundColor()\"\n>\n <div\n *ngFor=\"let bar of progressBarData; let i = index\"\n [style.background-color]=\"getStackColor(bar.backgroundColor)\"\n [style.width]=\"getStringOfWidth(getWidth(bar.value))\"\n [style.color]=\"getFontColor(bar.foregroundColor)\"\n [graniteTooltipTriggerFor]=\"tooltip\"\n class=\"progress-bar\"\n >\n <label *ngIf=\"showLabel\" graniteHideOnOverflow>{{ bar.valueLabel }}</label>\n <granite-tooltip #tooltip> {{ bar.valueLabel }} </granite-tooltip>\n </div>\n</div>\n\n<ng-container *ngIf=\"showLegend\">\n <button\n graniteFlatButton\n [graniteProgressBarLegendTriggerFor]=\"legend\"\n class=\"legend-btn\"\n >\n <granite-icon fontIcon=\"icon-caret-down\"></granite-icon>\n </button>\n</ng-container>\n\n<granite-progress-bar-legend\n #legend\n [legendItems]=\"legendItems\"\n></granite-progress-bar-legend>\n","import { Directive } from '@angular/core';\nimport { deviceDesktop, GRANITE_CLIENT_OUTPUT } from '../client-environment';\n\n/**\n * Directive used to tell components and their sub components that client output\n * should be adapted for desktop devices like personal computers.\n */\n@Directive({\n selector: `[graniteClientOutputDesktop]`,\n providers: [\n {\n provide: GRANITE_CLIENT_OUTPUT,\n useValue: deviceDesktop.output,\n },\n ],\n})\nexport class ClientOutputDesktopDirective {}\n","import { Directive } from '@angular/core';\nimport { GRANITE_CLIENT_OUTPUT, deviceTouch } from '../client-environment';\n\n/**\n * Directive used to tell components and their sub components that client output\n * should be adapted for touch devices like mobiles and tablets.\n */\n@Directive({\n selector: `[graniteClientOutputTouch]`,\n providers: [\n {\n provide: GRANITE_CLIENT_OUTPUT,\n useValue: deviceTouch.output,\n },\n ],\n})\nexport class ClientOutputTouchDirective {}\n","import { Directive } from '@angular/core';\nimport { deviceDesktop, GRANITE_CLIENT_INPUT } from '../client-environment';\n\n/**\n * Directive used to tell components and their sub components that client input\n * should be adapted for desktop devices, like personal computers.\n */\n@Directive({\n selector: `[graniteClientInputDesktop]`,\n providers: [\n {\n provide: GRANITE_CLIENT_INPUT,\n useValue: deviceDesktop.input,\n },\n ],\n})\nexport class ClientInputDesktopDirective {}\n","import { Directive } from '@angular/core';\nimport { deviceTouch, GRANITE_CLIENT_INPUT } from '../client-environment';\n\n/**\n * Directive used to tell components and their sub components that client input\n * should be adapted for touch devices, like mobiles and tablets.\n */\n@Directive({\n selector: `[graniteClientInputTouch]`,\n providers: [\n {\n provide: GRANITE_CLIENT_INPUT,\n useValue: deviceTouch.input,\n },\n ],\n})\nexport class ClientInputTouchDirective {}\n","import { NgModule } from '@angular/core';\nimport { ClientOutputDesktopDirective } from './devices/client-output-desktop.directive';\nimport { ClientOutputTouchDirective } from './devices/client-output-touch.directive';\nimport { ClientInputDesktopDirective } from './devices/client-input-desktop.directive';\nimport { ClientInputTouchDirective } from './devices/client-input-touch.directive';\nimport { GraniteHideOnOverflowDirective } from './hide-on-overflow.directive';\nimport { GraniteOverlayTriggerForBaseDirective } from './overlay-trigger-for-base.directive';\n\n// TODO: Move client devices into a separate module\n\n@NgModule({\n declarations: [\n ClientOutputDesktopDirective,\n ClientOutputTouchDirective,\n ClientInputDesktopDirective,\n ClientInputTouchDirective,\n GraniteHideOnOverflowDirective,\n GraniteOverlayTriggerForBaseDirective,\n ],\n exports: [\n ClientOutputDesktopDirective,\n ClientOutputTouchDirective,\n ClientInputDesktopDirective,\n ClientInputTouchDirective,\n GraniteHideOnOverflowDirective,\n ],\n})\nexport class GraniteCoreModule {}\n","import { NgModule } from '@angular/core';\nimport { GraniteProgressBarComponent } from './progress-bar.component';\nimport { CommonModule } from '@angular/common';\nimport { GraniteTooltipModule } from '@ifsworld/granite-components/tooltip';\nimport { GraniteCoreModule } from '../core/core.module';\nimport { GraniteIconModule } from '../icon/icon.module';\nimport { GraniteButtonModule } from '../button/button.module';\nimport { GraniteProgressBarLegendComponent } from './progress-bar-legend/progress-bar-legend.component';\nimport { GraniteProgressBarLegendTriggerForDirective } from './progress-bar-legend-trigger-for.directive';\n\n@NgModule({\n declarations: [\n GraniteProgressBarComponent,\n GraniteProgressBarLegendComponent,\n GraniteProgressBarLegendTriggerForDirective,\n ],\n exports: [GraniteProgressBarComponent],\n imports: [\n CommonModule,\n GraniteCoreModule,\n GraniteTooltipModule,\n GraniteIconModule,\n GraniteButtonModule,\n ],\n})\nexport class GraniteProgressBarModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'graniteTitle',\n})\nexport class GraniteTitlePipe implements PipeTransform {\n transform(value: string): string {\n const words: string[] = value.split(/(?=[A-Z ])/);\n return words\n .map((word) => word.trim())\n .filter(Boolean)\n .map((word) => word.charAt(0).toLocaleUpperCase() + word.slice(1))\n .join(' ');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { GraniteTitlePipe } from './title.pipe';\n\n@NgModule({\n exports: [GraniteTitlePipe],\n declarations: [GraniteTitlePipe],\n})\nexport class PurePipesModule {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card',\n template: '<ng-content></ng-content>',\n styleUrls: ['card.component.scss'],\n})\nexport class GraniteCardComponent {}\n","import { Component, Input } from '@angular/core';\n@Component({\n selector: 'granite-card-list',\n templateUrl: 'card-list.component.html',\n styleUrls: ['card-list.component.scss'],\n})\nexport class GraniteCardListComponent {\n /**Present cards in vertically or horizontally */\n @Input()\n orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n @Input()\n wrap: 'wrap' | 'nowrap' = 'nowrap';\n\n @Input()\n gap: 'small' | 'medium' | 'large' = 'small';\n}\n","<div\n class=\"card-list-wrapper\"\n [class.vertical]=\"orientation === 'vertical'\"\n [class.horizontal]=\"orientation === 'horizontal'\"\n [class.wrap]=\"wrap === 'wrap'\"\n [class.nowrap]=\"wrap === 'nowrap'\"\n [class.small]=\"gap === 'small'\"\n [class.medium]=\"gap === 'medium'\"\n [class.large]=\"gap === 'large'\"\n cdkScrollable\n>\n <ng-content></ng-content>\n</div>\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-content',\n template: '<ng-content></ng-content>',\n styleUrls: ['card-content.component.scss'],\n})\nexport class GraniteCardContentComponent {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-header',\n templateUrl: 'card-header.component.html',\n styleUrls: ['card-header.component.scss'],\n})\nexport class GraniteCardHeaderComponent {}\n","<div class=\"title-container\">\n <ng-content select=\"granite-card-header-title\"></ng-content>\n <ng-content select=\"granite-card-header-sub-title\"></ng-content>\n</div>\n<div class=\"content-container\">\n <ng-content></ng-content>\n</div>\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-actions',\n template: '<ng-content></ng-content>',\n styleUrls: ['card-actions.component.scss'],\n})\nexport class GraniteCardActionsComponent {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-body',\n template: '<ng-content></ng-content>',\n styleUrls: ['card-body.component.scss'],\n})\nexport class GraniteCardBodyComponent {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-footer',\n template: '<ng-content></ng-content>',\n styleUrls: ['card-footer.component.scss'],\n})\nexport class GraniteCardFooterComponent {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-avatar',\n template: '<ng-content></ng-content>',\n styleUrls: ['./card-avatar.component.scss'],\n})\nexport class GraniteCardAvatarComponent {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-header-title',\n template: '<ng-content></ng-content>',\n styleUrls: ['card-header-title.component.scss'],\n})\nexport class GraniteCardHeaderTitleComponent {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-header-sub-title',\n template: '<ng-content></ng-content>',\n styleUrls: ['card-header-subtitle.component.scss'],\n})\nexport class GraniteCardHeaderSubTitleComponent {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteCardComponent } from './card/card.component';\nimport { GraniteCardListComponent } from './card-list.component';\nimport { GraniteCardContentComponent } from './card/card-content/card-content.component';\nimport { GraniteCardHeaderComponent } from './card/card-content/card-header.component';\nimport { GraniteCardActionsComponent } from './card/card-content/card-actions.component';\nimport { GraniteCardBodyComponent } from './card/card-content/card-body.component';\nimport { GraniteCardFooterComponent } from './card/card-content/card-footer.component';\nimport { GraniteCardAvatarComponent } from './card/card-avatar.component';\nimport { GraniteCardHeaderTitleComponent } from './card/card-content/card-header-title.component';\nimport { GraniteCardHeaderSubTitleComponent } from './card/card-content/card-header-subtitle.component';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\n\n@NgModule({\n declarations: [\n GraniteCardComponent,\n GraniteCardListComponent,\n GraniteCardContentComponent,\n GraniteCardHeaderComponent,\n GraniteCardActionsComponent,\n GraniteCardBodyComponent,\n GraniteCardFooterComponent,\n GraniteCardAvatarComponent,\n GraniteCardHeaderTitleComponent,\n GraniteCardHeaderSubTitleComponent,\n ],\n imports: [CommonModule, ScrollingModule],\n exports: [\n GraniteCardComponent,\n GraniteCardListComponent,\n GraniteCardContentComponent,\n GraniteCardHeaderComponent,\n GraniteCardBodyComponent,\n GraniteCardActionsComponent,\n GraniteCardFooterComponent,\n GraniteCardAvatarComponent,\n GraniteCardHeaderTitleComponent,\n GraniteCardHeaderSubTitleComponent,\n ],\n})\nexport class GraniteCardListModule {}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[graniteCollapsibleGroupBody]',\n exportAs: 'graniteCollapsibleGroupBody',\n})\nexport class GraniteCollapsibleConditionalBodyDirective {\n template = inject(TemplateRef);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[graniteCollapsibleGroupHeader]',\n exportAs: 'graniteCollapsibleGroupHeader',\n})\nexport class GraniteCollapsibleConditionalHeaderDirective {\n template = inject(TemplateRef);\n}\n","import {\n Component,\n ContentChild,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { GraniteCollapsibleConditionalBodyDirective } from './collapsible-group-body.directive';\nimport { GraniteCollapsibleConditionalHeaderDirective } from './collapsible-group-header.directive';\n@Component({\n selector: 'granite-collapsible-group',\n templateUrl: 'collapsible-group.component.html',\n styleUrls: ['collapsible-group.component.scss'],\n})\nexport class GraniteCollapsibleGroupComponent {\n @Input()\n collapsed: boolean = false;\n\n @Input()\n id: string = '';\n\n @Input()\n arialabel: string | null = null;\n\n @Output()\n readonly collapsedChanged: EventEmitter<boolean> =\n new EventEmitter<boolean>();\n\n @ContentChild(GraniteCollapsibleConditionalBodyDirective)\n conditionalBodyContentRef: GraniteCollapsibleConditionalBodyDirective;\n\n @ContentChild(GraniteCollapsibleConditionalHeaderDirective)\n conditionalHeaderContentRef: GraniteCollapsibleConditionalHeaderDirective;\n\n toggleCollapsibleGroup(): void {\n this.collapsed = !this.collapsed;\n this.collapsedChanged.emit(this.collapsed);\n }\n\n _toogleCollapsing(event: KeyboardEvent): void {\n if (event.code === 'Enter' || event.code === 'Space') {\n event.preventDefault();\n event.stopPropagation();\n this.toggleCollapsibleGroup();\n }\n }\n}\n","<div class=\"collapsible-wrapper\">\n <div\n data-fnd=\"collapsible-group-header\"\n class=\"collapsible-group-header\"\n [class]=\"collapsed ? 'collapsed-header' : 'expanded-header'\"\n role=\"button\"\n (click)=\"toggleCollapsibleGroup()\"\n (keydown)=\"_toogleCollapsing($event)\"\n [attr.id]=\"id ? 'collapsible-group-header-' + id : null\"\n [attr.aria-label]=\"arialabel\"\n [attr.aria-expanded]=\"!collapsed\"\n [attr.aria-controls]=\"id ? 'collapsible-group-body-' + id : null\"\n tabindex=\"0\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n conditionalHeaderContentRef\n ? conditionalHeaderContentRef.template\n : null\n \"\n ></ng-container>\n\n <div class=\"collapse-icon\">\n <granite-icon\n [fontIcon]=\"collapsed ? 'icon-caret-down' : 'icon-caret-up'\"\n ></granite-icon>\n </div>\n </div>\n <div\n data-fnd=\"collapsible-group-body\"\n class=\"collapsible-group-body\"\n [class]=\"collapsed ? 'collapse' : 'expand'\"\n role=\"region\"\n [attr.id]=\"id ? 'collapsible-group-body-' + id : null\"\n [attr.aria-labelledby]=\"id ? 'collapsible-group-header-' + id : null\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n !collapsed && conditionalBodyContentRef\n ? conditionalBodyContentRef.template\n : null\n \"\n >\n </ng-container>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteIconModule } from '../icon/icon.module';\nimport { GraniteCollapsibleGroupComponent } from './collapsible-group.component';\nimport { GraniteCollapsibleConditionalBodyDirective } from './collapsible-group-body.directive';\nimport { GraniteCollapsibleConditionalHeaderDirective } from './collapsible-group-header.directive';\n\n@NgModule({\n imports: [CommonModule, GraniteIconModule],\n declarations: [\n GraniteCollapsibleGroupComponent,\n GraniteCollapsibleConditionalHeaderDirective,\n GraniteCollapsibleConditionalBodyDirective,\n ],\n exports: [\n GraniteCollapsibleGroupComponent,\n GraniteCollapsibleConditionalHeaderDirective,\n GraniteCollapsibleConditionalBodyDirective,\n ],\n})\nexport class GraniteCollapsibleGroupModule {}\n","/*\n * Public API Surface of ui\n */\n\nexport * from './lib/arrange-grid/arrange-grid.module';\nexport * from './lib/arrange-grid/arrange-grid.component';\nexport * from './lib/arrange-grid/arrange-grid-item.component';\n\nexport * from './lib/grid/grid.module';\nexport * from './lib/grid/grid.component';\n\nexport * from './lib/badge/badge.module';\nexport * from './lib/badge/badge.component';\nexport * from './lib/badge/testing/badge.harness';\n\nexport * from './lib/menu/menu.module';\nexport * from './lib/menu/menu.component';\nexport * from './lib/menu/menu-desktop-animations';\nexport * from './lib/menu/menu-touch-animations';\nexport * from './lib/menu/menu-item.component';\nexport * from './lib/menu/menu-trigger-for.directive';\nexport * from './lib/menu/testing/menu.harness';\nexport * from './lib/menu/divider.directive';\nexport * from './lib/menu/title.directive';\nexport * from './lib/menu/menu-touch-close.component';\nexport * from './lib/menu/menu-touch-title.component';\n\nexport * from './lib/icon/icon.module';\nexport * from './lib/icon/icon.component';\n\nexport * from './lib/toggle-switch/toggle-switch.module';\nexport * from './lib/toggle-switch/toggle-switch.component';\n\nexport * from './lib/radio-button/radio-button.module';\nexport * from './lib/radio-button/radio-button.component';\n\nexport * from './lib/radio-button/radio-group.component';\n\nexport * from './lib/checkbox/checkbox.module';\nexport * from './lib/checkbox/checkbox.component';\n\nexport * from './lib/checkbox/checkbox-group.component';\n\nexport * from './lib/button/button.module';\nexport * from './lib/button/button.component';\n\nexport * from './lib/input-field/input-field.module';\nexport * from './lib/input-field/input-field.component';\n\nexport * from './lib/chips/chips.module';\nexport * from './lib/chips/chip-list.component';\nexport * from './lib/chips/chip.component';\nexport * from './lib/chips/chip-input';\n\nexport * from './lib/label/label.module';\nexport * from './lib/label/label.component';\n\nexport * from './lib/contacts/contacts.module';\nexport * from './lib/contacts/contacts.component';\nexport * from './lib/contacts/contacts-types/contacts.component.public-types';\nexport * from './lib/contacts/contacts-profile/contacts-profile.component';\nexport * from './lib/contacts/contact-item/contact-item.component';\nexport * from './lib/contacts/contact-item-default-status/contact-item-default-status.component';\nexport * from './lib/contacts/contact-item-title/contact-item-title.component';\nexport * from './lib/contacts/contacts-trigger/contacts-trigger-for.directive';\nexport * from './lib/contacts/custom-status.directive';\nexport * from './lib/contacts/custom-profile.directive';\nexport * from './lib/contacts/contacts-types/contacts.component.public-types';\n\nexport * from './lib/avatar/avatar.module';\nexport * from './lib/avatar/avatar.component';\nexport * from './lib/avatar/avatar-default-status/avatar-default-status.component';\nexport * from './lib/avatar/custom-avatar-status.directive';\nexport * from './lib/avatar/empty-avatar/empty-avatar.component';\nexport * from './lib/avatar/avatar.component.public-types';\n\nexport * from './lib/progress-bar/progress-bar.module';\nexport * from './lib/progress-bar/progress-bar.component';\nexport * from './lib/progress-bar/progress-bar.model';\n\n// Temporary\nexport * from './lib/core/client-environment';\nexport * from './lib/core/core.module';\nexport * from './lib/core/devices/client-output-touch.directive';\nexport * from './lib/core/devices/client-output-desktop.directive';\nexport * from './lib/core/devices/client-input-touch.directive';\nexport * from './lib/core/devices/client-input-desktop.directive';\nexport * from './lib/core/common-behaviors/disabled';\nexport * from './lib/core/hide-on-overflow.directive';\n\nexport * from './lib/core/pipes/pure-pipes.module';\nexport * from './lib/core/pipes/title.pipe';\nexport * from './lib/core/types';\n\nexport * from './lib/card-list/card-list.module';\nexport * from './lib/card-list/card-list.component';\nexport * from './lib/card-list/card/card.component';\nexport * from './lib/card-list/card/card-content/card-content.component';\nexport * from './lib/card-list/card/card-content/card-actions.component';\nexport * from './lib/card-list/card/card-content/card-body.component';\nexport * from './lib/card-list/card/card-content/card-header.component';\nexport * from './lib/card-list/card/card-avatar.component';\nexport * from './lib/card-list/card/card-content/card-header-title.component';\nexport * from './lib/card-list/card/card-content/card-header-subtitle.component';\nexport * from './lib/card-list/card/card-content/card-footer.component';\n\nexport * from './lib/collapsible-group/collapsible-group.module';\nexport * from './lib/collapsible-group/collapsible-group.component';\nexport * from './lib/collapsible-group/collapsible-group-body.directive';\nexport * from './lib/collapsible-group/collapsible-group-header.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3.GraniteIconComponent","i1","i2.GraniteIconComponent","i2.GraniteMenuTouchCloseComponent","i3.GraniteMenuTouchTitleItemComponent","observableOf","nextUniqueId","i2.GraniteAvatarDefaultStatusComponent","i3.GraniteEmptyAvatarComponent","i1.GraniteAvatarComponent","i1.GraniteIconComponent","i3.ContactItemDefaultStatusComponent","i4.GraniteContactItemTitleComponent","i2.GraniteContactsProfileComponent","i3.GraniteContactItemComponent","i3","i2.GraniteHideOnOverflowDirective","i4.GraniteIconComponent","i5.GraniteButtonComponent","i6.GraniteProgressBarLegendComponent","i7.GraniteProgressBarLegendTriggerForDirective"],"mappings":"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"}
1
+ {"version":3,"file":"ifsworld-granite-components.mjs","sources":["../../../../libs/granite-components/src/lib/arrange-grid/arrange-grid-item.component.ts","../../../../libs/granite-components/src/lib/arrange-grid/arrange-grid.component.ts","../../../../libs/granite-components/src/lib/arrange-grid/arrange-grid.component.html","../../../../libs/granite-components/src/lib/arrange-grid/arrange-grid.module.ts","../../../../libs/granite-components/src/lib/grid/grid.component.ts","../../../../libs/granite-components/src/lib/grid/grid.module.ts","../../../../libs/granite-components/src/lib/core/theme.library.ts","../../../../libs/granite-components/src/lib/badge/badge.component.ts","../../../../libs/granite-components/src/lib/badge/badge.component.html","../../../../libs/granite-components/src/lib/badge/badge.module.ts","../../../../libs/granite-components/src/lib/badge/testing/badge.harness.ts","../../../../libs/granite-components/src/lib/core/animation.ts","../../../../libs/granite-components/src/lib/menu/menu-desktop-animations.ts","../../../../libs/granite-components/src/lib/menu/menu-touch-animations.ts","../../../../libs/granite-components/src/lib/menu/menu-panel.ts","../../../../libs/granite-components/src/lib/menu/menu-errors.ts","../../../../libs/granite-components/src/lib/icon/icon.component.ts","../../../../libs/granite-components/src/lib/menu/menu-item.component.ts","../../../../libs/granite-components/src/lib/menu/menu-base.ts","../../../../libs/granite-components/src/lib/menu/menu-touch-close.component.ts","../../../../libs/granite-components/src/lib/menu/menu-touch-title.component.ts","../../../../libs/granite-components/src/lib/menu/menu.component.ts","../../../../libs/granite-components/src/lib/menu/menu.component.html","../../../../libs/granite-components/src/lib/core/client-environment.ts","../../../../libs/granite-components/src/lib/menu/menu-trigger-for.directive.ts","../../../../libs/granite-components/src/lib/menu/divider.directive.ts","../../../../libs/granite-components/src/lib/icon/icon.module.ts","../../../../libs/granite-components/src/lib/menu/title.directive.ts","../../../../libs/granite-components/src/lib/menu/menu.module.ts","../../../../libs/granite-components/src/lib/menu/testing/menu.harness.ts","../../../../libs/granite-components/src/lib/toggle-switch/toggle-switch.component.ts","../../../../libs/granite-components/src/lib/toggle-switch/toggle-switch.component.html","../../../../libs/granite-components/src/lib/toggle-switch/toggle-switch.module.ts","../../../../libs/granite-components/src/lib/radio-button/radio-button.component.ts","../../../../libs/granite-components/src/lib/radio-button/radio-button.component.html","../../../../libs/granite-components/src/lib/core/radio-checkbox-base.ts","../../../../libs/granite-components/src/lib/radio-button/radio-group.component.ts","../../../../libs/granite-components/src/lib/radio-button/radio-button.module.ts","../../../../libs/granite-components/src/lib/checkbox/checkbox.component.ts","../../../../libs/granite-components/src/lib/checkbox/checkbox.component.html","../../../../libs/granite-components/src/lib/checkbox/checkbox-group.component.ts","../../../../libs/granite-components/src/lib/checkbox/checkbox.module.ts","../../../../libs/granite-components/src/lib/core/common-behaviors/disabled.ts","../../../../libs/granite-components/src/lib/button/button.component.ts","../../../../libs/granite-components/src/lib/button/button.module.ts","../../../../libs/granite-components/src/lib/input-field/input-field.component.ts","../../../../libs/granite-components/src/lib/input-field/input-field.component.html","../../../../libs/granite-components/src/lib/input-field/input-field.module.ts","../../../../libs/granite-components/src/lib/chips/chip.component.ts","../../../../libs/granite-components/src/lib/chips/chip.component.html","../../../../libs/granite-components/src/lib/chips/chip-list.component.ts","../../../../libs/granite-components/src/lib/chips/chip-input.ts","../../../../libs/granite-components/src/lib/chips/chips.module.ts","../../../../libs/granite-components/src/lib/label/label.component.ts","../../../../libs/granite-components/src/lib/label/label.component.html","../../../../libs/granite-components/src/lib/label/label.module.ts","../../../../libs/granite-components/src/lib/contacts/contacts-trigger/contacts-trigger-data.ts","../../../../libs/granite-components/src/lib/contacts/custom-status.directive.ts","../../../../libs/granite-components/src/lib/contacts/custom-profile.directive.ts","../../../../libs/granite-components/src/lib/core/services/names-utils-service.ts","../../../../libs/granite-components/src/lib/avatar/custom-avatar-status.directive.ts","../../../../libs/granite-components/src/lib/avatar/avatar.component.public-types.ts","../../../../libs/granite-components/src/lib/avatar/avatar-default-status/avatar-default-status.component.ts","../../../../libs/granite-components/src/lib/avatar/empty-avatar/empty-avatar.component.ts","../../../../libs/granite-components/src/lib/avatar/avatar.component.ts","../../../../libs/granite-components/src/lib/avatar/avatar.component.html","../../../../libs/granite-components/src/lib/contacts/contacts-profile/contacts-profile.component.ts","../../../../libs/granite-components/src/lib/contacts/contacts-profile/contacts-profile.component.html","../../../../libs/granite-components/src/lib/contacts/contacts-types/contacts.component.public-types.ts","../../../../libs/granite-components/src/lib/contacts/contact-item-default-status/contact-item-default-status.component.ts","../../../../libs/granite-components/src/lib/contacts/contact-item-default-status/contact-item-default-status.component.html","../../../../libs/granite-components/src/lib/contacts/contact-item-title/contact-item-title.component.ts","../../../../libs/granite-components/src/lib/contacts/contact-item-title/contact-item-title.component.html","../../../../libs/granite-components/src/lib/contacts/contact-item/contact-item.component.ts","../../../../libs/granite-components/src/lib/contacts/contact-item/contact-item.component.html","../../../../libs/granite-components/src/lib/contacts/contacts.component.ts","../../../../libs/granite-components/src/lib/contacts/contacts.component.html","../../../../libs/granite-components/src/lib/contacts/contacts-trigger/contacts-trigger-for.directive.ts","../../../../libs/granite-components/src/lib/avatar/avatar.module.ts","../../../../libs/granite-components/src/lib/contacts/contacts.module.ts","../../../../libs/granite-components/src/lib/core/hide-on-overflow.directive.ts","../../../../libs/granite-components/src/lib/core/overlay-base.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar-legend-base.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar-legend/progress-bar-legend.component.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar-legend/progress-bar-legend.component.html","../../../../libs/granite-components/src/lib/core/overlay.service.ts","../../../../libs/granite-components/src/lib/core/overlay-trigger-for-base.directive.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar-legend-trigger-for.directive.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar.component.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar.component.html","../../../../libs/granite-components/src/lib/core/devices/client-output-desktop.directive.ts","../../../../libs/granite-components/src/lib/core/devices/client-output-touch.directive.ts","../../../../libs/granite-components/src/lib/core/devices/client-input-desktop.directive.ts","../../../../libs/granite-components/src/lib/core/devices/client-input-touch.directive.ts","../../../../libs/granite-components/src/lib/core/core.module.ts","../../../../libs/granite-components/src/lib/progress-bar/progress-bar.module.ts","../../../../libs/granite-components/src/lib/core/pipes/title.pipe.ts","../../../../libs/granite-components/src/lib/core/pipes/pure-pipes.module.ts","../../../../libs/granite-components/src/lib/card-list/card/card.component.ts","../../../../libs/granite-components/src/lib/card-list/card-list.component.ts","../../../../libs/granite-components/src/lib/card-list/card-list.component.html","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-content.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-header.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-header.component.html","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-actions.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-body.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-footer.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-avatar.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-header-title.component.ts","../../../../libs/granite-components/src/lib/card-list/card/card-content/card-header-subtitle.component.ts","../../../../libs/granite-components/src/lib/card-list/card-list.module.ts","../../../../libs/granite-components/src/lib/collapsible-group/collapsible-group-body.directive.ts","../../../../libs/granite-components/src/lib/collapsible-group/collapsible-group-header.directive.ts","../../../../libs/granite-components/src/lib/collapsible-group/collapsible-group.component.ts","../../../../libs/granite-components/src/lib/collapsible-group/collapsible-group.component.html","../../../../libs/granite-components/src/lib/collapsible-group/collapsible-group.module.ts","../../../../libs/granite-components/src/index.ts","../../../../libs/granite-components/src/ifsworld-granite-components.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, ElementRef } from '@angular/core';\n\n@Component({\n selector: 'granite-arrange-grid-item',\n template: '<ng-content></ng-content>',\n styleUrls: ['arrange-grid-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteArrangeGridItemComponent {\n /**\n * Column span to render.\n * For use in template only. Do not use outside of this component.\n * @ignore\n */\n _columnSpan: number | null = null;\n\n constructor(private element: ElementRef<HTMLElement>) {\n /* no-op */\n }\n\n /**\n * Number of cells the item would span. Used by arrange grid in column\n * orientation to fill any unused space caused by wrapped items.\n */\n set columnSpan(value: number | null) {\n this._columnSpan = value;\n this.updateStyles();\n }\n\n /**\n * Update element styles\n */\n updateStyles(): void {\n this.setCssProperty(\n '--column-span',\n this._columnSpan ? this._columnSpan.toString() : null\n );\n }\n\n /**\n * Set CSS variable value or remove it if a null value is given.\n * Would of course rather have used property binding but that is not\n * supported until (perhaps) Angular 9.\n * See: https://github.com/angular/angular/issues/9343\n */\n protected setCssProperty(variable: string, value: string | null): void {\n this.element.nativeElement.style.setProperty(variable, value);\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n QueryList,\n SimpleChanges,\n} from '@angular/core';\n\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { GraniteArrangeGridItemComponent } from './arrange-grid-item.component';\n\nexport enum GraniteArrangeGridOrientation {\n columns = 'columns',\n rows = 'rows',\n}\n\n@Component({\n selector: 'granite-arrange-grid',\n templateUrl: 'arrange-grid.component.html',\n styleUrls: ['arrange-grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteArrangeGridComponent\n implements OnChanges, AfterContentInit, OnDestroy\n{\n /** How to present grid items; `columns` (default) or `rows` */\n @Input()\n orientation: GraniteArrangeGridOrientation =\n GraniteArrangeGridOrientation.columns;\n\n /** Exposes column orientation to template */\n @HostBinding('class.column-orientation')\n classColumnOrientation = false;\n\n /** Exposes row orientation to template */\n @HostBinding('class.row-orientation')\n classRowOrientation = false;\n\n @ContentChildren(GraniteArrangeGridItemComponent)\n arrangeGridItemComponents: QueryList<GraniteArrangeGridItemComponent>;\n\n /** Default number of columns to use in column orientation */\n static readonly defaultCols: number = 2;\n\n /**\n * Number of grid columns to use when orientation is set to `column`. The\n * default is two columns.\n */\n @Input()\n set cols(value: number) {\n this._cols = Math.max(1, Math.round(coerceNumberProperty(value)));\n }\n\n get cols(): number {\n return this._cols;\n }\n\n /** Number of columns to render */\n protected _cols: number = GraniteArrangeGridComponent.defaultCols;\n\n /**\n * Number of rows to render. Will be set internally taking column count,\n * the number of items and any cell wrapping into consideration.\n */\n protected _rows: number;\n\n set rows(value: number) {\n // Prevent pointless usage\n throw Error(\n 'Explicitly setting rows value for arrange grid is unsupported'\n );\n }\n\n get rows(): number {\n return this._rows;\n }\n\n /** Nexted on component destruction to complete other observables. */\n private destroy$: Subject<void> = new Subject();\n\n constructor(private element: ElementRef<HTMLElement>) {\n /* no-op */\n }\n\n ngAfterContentInit(): void {\n // Update style whenever grid item components change in content\n this.arrangeGridItemComponents.changes\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.updateStyles());\n\n this.updateStyles();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n (changes.orientation && !changes.orientation.isFirstChange()) ||\n (changes.cols && !changes.cols.isFirstChange())\n ) {\n this.updateStyles();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n /**\n * Update grid row template style.\n *\n * Use content height of all but last row and let the last grow\n * to take up any remaining space.\n */\n updateStyles(): void {\n const children: number = (this.arrangeGridItemComponents || []).length;\n\n if (this.orientation === GraniteArrangeGridOrientation.columns) {\n // If too many items was placed into too few colums, there would\n // be some wrapping. Take that into account when calculating the\n // number of rows.\n this._rows = Math.trunc((children - 1) / (this._cols || 1)) + 1;\n this.classColumnOrientation = true;\n this.classRowOrientation = false;\n\n if (children > 0) {\n // Fill any unused space caused by wrapped items by making the\n // last item also span over remaining cells.\n this.arrangeGridItemComponents.forEach((c) => (c.columnSpan = null));\n this.arrangeGridItemComponents.last.columnSpan =\n this._rows * this._cols - children + 1;\n }\n } else {\n this._cols = 1; // In row orientation, there is just a single column\n this._rows = children;\n this.classColumnOrientation = false;\n this.classRowOrientation = true;\n }\n\n this.setCssProperty('--cols', this._cols.toString());\n this.setCssProperty('--rows', this._rows.toString());\n }\n\n /**\n * Set CSS variable value or remove it if a null value is given.\n * Would of course rather have used property binding but that is not\n * supported until (perhaps) Angular 9.\n * See: https://github.com/angular/angular/issues/9343\n *\n * TODO: Replace with property binding with Angular 9 upgrade\n */\n protected setCssProperty(variable: string, value: string | null): void {\n this.element.nativeElement.style.setProperty(variable, value);\n }\n}\n","<ng-content select=\"granite-arrange-grid-item\"></ng-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { GraniteArrangeGridComponent } from './arrange-grid.component';\nimport { GraniteArrangeGridItemComponent } from './arrange-grid-item.component';\n\n@NgModule({\n declarations: [GraniteArrangeGridComponent, GraniteArrangeGridItemComponent],\n imports: [CommonModule],\n exports: [GraniteArrangeGridComponent, GraniteArrangeGridItemComponent],\n})\nexport class GraniteArrangeGridModule {}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\n\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\n\n/**\n * Grid item component\n *\n * Merely a wrapper for CSS Grid items, accepting item style as input parameters.\n */\n@Component({\n selector: 'granite-grid-item',\n template: '<ng-content></ng-content>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteGridItemComponent implements OnChanges {\n @Input()\n columnStart: number;\n\n @Input()\n columnEnd: number;\n\n @Input()\n rowStart: number;\n\n @Input()\n rowEnd: number;\n\n constructor(\n private element: ElementRef<HTMLElement>,\n private renderer: Renderer2\n ) {}\n\n ngOnChanges(): void {\n this.updateStyles();\n }\n\n /**\n * Update element styles\n */\n updateStyles(): void {\n this.setStyle('gridColumnStart', this.columnStart);\n this.setStyle('gridColumnEnd', this.columnEnd);\n this.setStyle('gridRowStart', this.rowStart);\n this.setStyle('gridRowEnd', this.rowEnd);\n }\n\n /**\n * Sets the element style. Needs to be set manually to avoid \"Changed after\n * checked\" errors that would occur with HostBinding.\n */\n private setStyle(property: string, value: any): void {\n this.renderer.setStyle(this.element.nativeElement, property, value || '');\n }\n}\n\n/**\n * Grid\n *\n * A wrapper around a native CSS Grid. Anything can be used for grid items, but\n * `GridItemComponent` is recommended for common cases.\n */\n@Component({\n selector: 'granite-grid',\n template: '<ng-content></ng-content>',\n styleUrls: ['grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteGridComponent implements AfterContentInit, OnChanges {\n /**\n * Number of grid columns, unless set via styling (grid-template-columns)\n *\n * Setting this value will produce equally sized columns\n */\n @Input()\n set cols(value: number) {\n this._cols = Math.max(1, Math.round(coerceNumberProperty(value)));\n }\n\n get cols(): number {\n return this._cols;\n }\n\n /** Number of columns to render */\n protected _cols: number;\n\n /**\n * Number of grid rows, unless set via styling (grid-template-rows)\n *\n * Setting this value will produce equally sized rows\n */\n @Input()\n set rows(value: number) {\n this._rows = Math.max(1, Math.round(coerceNumberProperty(value)));\n }\n\n get rows(): number {\n return this._rows;\n }\n\n /** Number of rows to render */\n protected _rows: number;\n\n constructor(private element: ElementRef<HTMLElement>) {}\n\n ngAfterContentInit(): void {\n this.updateStyles();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n (changes.cols && !changes.cols.isFirstChange()) ||\n (changes.rows && !changes.rows.isFirstChange())\n ) {\n this.updateStyles();\n }\n }\n\n /** Update element styles */\n updateStyles(): void {\n this.updateColumnStyles();\n this.updateRowStyles();\n }\n\n /**\n * Set CSS variable value or remove it if a null value is given.\n * Would of course rather have used property binding but that is not\n * supported until (perhaps) Angular 9.\n * See: https://github.com/angular/angular/issues/9343\n *\n * TODO: Replace with property binding with Angular 9 upgrade\n */\n protected setCssProperty(variable: string, value: string | null): void {\n this.element.nativeElement.style.setProperty(variable, value);\n }\n\n /** Update grid column template style */\n protected updateColumnStyles(): void {\n this.setCssProperty(\n '--cols',\n (this._cols && this._cols.toString()) || null\n );\n }\n\n /** Update grid row template style */\n protected updateRowStyles(): void {\n this.setCssProperty(\n '--rows',\n (this._rows && this._rows.toString()) || null\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport {\n GraniteGridComponent,\n GraniteGridItemComponent,\n} from './grid.component';\n\n@NgModule({\n declarations: [GraniteGridComponent, GraniteGridItemComponent],\n imports: [CommonModule],\n exports: [GraniteGridComponent, GraniteGridItemComponent],\n})\nexport class GraniteGridModule {}\n","import { Theme, Tokens } from '@ifsworld/granite-tokens';\n\nexport const TOKEN_PREFIX = 'granite-';\nexport const TOKEN_PREFIX_OLD = 'fnd-'; // TODO: Remove this when all tokens have 'granite-' as the prefix\n\n/**\n * Get the theme that corresponds to a given ID\n */\nexport function getThemeById(themes: Theme[], id: string): Theme | undefined {\n const theme: Theme | undefined =\n id !== undefined ? themes.find((t) => t.id === id) : undefined;\n\n return theme;\n}\n\n/**\n * Apply a theme to a DOM element by iterating though all tokens,\n * setting a CSS variable for each one.\n *\n * @param theme Theme to set\n * @param element Target element\n */\nexport function applyTheme(theme: Theme, element: HTMLElement): void {\n applyTokens(theme.tokens, element);\n}\n\n/**\n * Set a CSS variable for each token on the specified element.\n *\n * @param theme Theme to set\n * @param element Target element\n */\nexport function applyTokens(tokens: Tokens, element: HTMLElement): void {\n for (const token of Object.keys(tokens)) {\n element.style.setProperty(token, tokens[token]);\n }\n}\n\n/**\n * Remove theme token CSS variables from an element using the specified keys\n *\n * @param theme Theme with tokens to clear\n * @param element Target element\n */\nexport function clearTheme(theme: Theme, element: HTMLElement): void {\n clearTokens(Object.keys(theme.tokens), element);\n}\n\n/**\n * Remove token CSS variables from an element using the specified keys.\n *\n * @param keys Token keys\n * @param element Target element\n */\nexport function clearTokens(keys: string[], element: HTMLElement): void {\n for (const token of keys) {\n element.style.removeProperty(token);\n }\n}\n\nexport function isValidToken(key: string): boolean {\n return (\n key && (key.startsWith(TOKEN_PREFIX) || key.startsWith(TOKEN_PREFIX_OLD))\n );\n}\n\nexport function setPropertyValue(\n name: string,\n value: string,\n element: HTMLElement\n): void {\n if (element && element.style && value != null) {\n element.style.setProperty(\n name,\n isValidToken(value) ? `var(--${value})` : value\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n ElementRef,\n} from '@angular/core';\nimport { setPropertyValue } from '../core/theme.library';\n\n@Component({\n selector: 'granite-badge',\n exportAs: 'graniteBadge',\n host: {\n class: 'granite-badge',\n '[class.granite-badge-pill]': 'pill',\n },\n templateUrl: './badge.component.html',\n styleUrls: ['./badge.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteBadgeComponent implements OnChanges {\n /**\n * Design token name to get the value for the Background color\n */\n @Input()\n backgroundColor: string;\n\n /**\n * Design token name to get the value for the Font color\n */\n @Input()\n color: string;\n\n /** Pill style badge */\n @Input()\n pill: boolean = false;\n\n constructor(private elementRef: ElementRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.backgroundColor) {\n if (\n changes.backgroundColor.previousValue !==\n changes.backgroundColor.currentValue\n ) {\n setPropertyValue(\n 'background-color',\n changes.backgroundColor.currentValue,\n this.elementRef.nativeElement\n );\n }\n }\n if (changes.color) {\n if (changes.color.previousValue !== changes.color.currentValue) {\n setPropertyValue(\n 'color',\n changes.color.currentValue,\n this.elementRef.nativeElement\n );\n }\n }\n }\n}\n","<div class=\"granite-badge-content\">\n <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteBadgeComponent } from './badge.component';\n\n@NgModule({\n declarations: [GraniteBadgeComponent],\n imports: [CommonModule],\n exports: [GraniteBadgeComponent],\n})\nexport class GraniteBadgeModule {}\n","import {\n ComponentHarness,\n BaseHarnessFilters,\n HarnessPredicate,\n} from '@angular/cdk/testing';\n\nexport class GraniteBadgeHarness extends ComponentHarness {\n static hostSelector = 'granite-badge';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `GraniteBadgeHarness` that meets\n * certain criteria.\n * @param options Options for filtering which badge instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(\n options: GraniteBadgeHarnessFilters = {}\n ): HarnessPredicate<GraniteBadgeHarness> {\n const predicate: HarnessPredicate<GraniteBadgeHarness> =\n new HarnessPredicate(GraniteBadgeHarness, options);\n predicate.addOption('text', options.text, (harness, label) =>\n HarnessPredicate.stringMatches(harness.getText(), label)\n );\n predicate.addOption(\n 'pill',\n options.pill,\n async (harness, pill) => (await harness.isPill()) === pill\n );\n return predicate;\n }\n\n /** Gets the Badge text. */\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n\n /** Whether it's a Pill type badge. */\n async isPill(): Promise<boolean> {\n return (await this.host()).hasClass('granite-badge-pill');\n }\n}\n\n/** A set of criteria that can be used to filter a list of `GraniteBadgeHarness` instances. */\nexport interface GraniteBadgeHarnessFilters extends BaseHarnessFilters {\n /** Only find instances whose text matches the given value. */\n text?: string | RegExp;\n pill?: boolean;\n}\n","/**\n * Returns an ease-out CSS animation string with a slightly steeper curve\n * than usual.\n *\n * @param duration Duration in milliseconds\n * @param delay Delay in milliseconds\n */\nexport function getEaseOutSteep(duration: number, delay?: number): string {\n return (\n `${duration}ms ` +\n (delay !== undefined ? ` ${delay}ms ` : '') +\n 'cubic-bezier(0, 0, 0.2, 1)'\n );\n}\n\n/**\n * Returns an ease-out-back CSS animation string with a slightly steeper\n * curve than usual.\n *\n * @param duration Duration in milliseconds\n * @param delay Delay in milliseconds\n */\nexport function getEaseOutSteepBack(duration: number, delay?: number): string {\n return (\n `${duration}ms ` +\n (delay !== undefined ? ` ${delay}ms ` : '') +\n 'cubic-bezier(.37,1.3,.77,1)'\n );\n}\n\n/**\n * Returns a linear CSS animation string\n *\n * @param duration Duration in milliseconds\n * @param delay Delay in milliseconds\n */\nexport function getEaseLinear(duration: number, delay?: number): string {\n return (\n `${duration}ms ` + (delay !== undefined ? ` ${delay}ms ` : '') + 'linear'\n );\n}\n","import {\n trigger,\n state,\n style,\n AnimationTriggerMetadata,\n animate,\n group,\n query,\n transition,\n} from '@angular/animations';\nimport { getEaseLinear, getEaseOutSteep } from '../core/animation';\n\nconst easeOut120 = getEaseOutSteep(120);\n\n/**\n * Animations used by the `granite-menu` component, showing the desktop interface.\n * @docs-private\n */\nexport const graniteMenuDesktopAnimations: {\n /**\n * This animation trigger controls the menu panel's entry and exit from the\n * stage on desktop output devices.\n */\n readonly transformMenuDesktop: AnimationTriggerMetadata;\n} = {\n transformMenuDesktop: trigger('transformMenuDesktop', [\n state(\n 'void',\n style({\n opacity: 0,\n transform: 'scale(0.9)',\n })\n ),\n transition(\n 'void => enter',\n group([\n query(\n '.granite-menu-content',\n animate(\n getEaseLinear(100),\n style({\n opacity: 1,\n })\n )\n ),\n animate(easeOut120, style({ transform: 'scale(1)' })),\n ])\n ),\n transition(\n '* => void',\n animate(getEaseLinear(100, 25), style({ opacity: 0 }))\n ),\n ]),\n};\n","import {\n trigger,\n state,\n style,\n animate,\n transition,\n AnimationTriggerMetadata,\n sequence,\n} from '@angular/animations';\nimport { getEaseOutSteep, getEaseLinear } from '../core/animation';\n\nconst defaultDuration = 300;\nconst defaultDelay = 200;\n\nconst easeOut = getEaseOutSteep(defaultDuration);\nconst linear = getEaseLinear(defaultDuration);\nconst linearDelayed = getEaseLinear(defaultDuration, defaultDelay);\n\n/**\n * Insanely fast travel somewhere on or off the stage,\n * to set a great starting position.\n *\n * For some reason this has to be animated with > 0ms time.\n * Setting style directly gets ignored.\n */\nconst teleport = '1ms linear';\n\n/**\n * Style used by our menu stars to make grand entrée et sortie from/to below\n * the viewport stage.\n */\nconst inTheOrchestraPit = style({\n transform: 'translateX(0) translateY(100%)',\n opacity: 0,\n});\n\n/** Style for a menu at the center of attention, on the viewport stage */\nconst onStage = style({\n opacity: 1,\n transform: 'translateX(0) translateY(0)',\n});\n\n/**\n * Style for a (sub) menu starting position at the side of the stage, waiting\n * to make an entrance by sliding into view, pushing the previous (parent)\n * menu off.\n */\nconst awaitingCue = style({\n opacity: 0,\n transform: 'translateX(100vw) translateY(0)',\n});\n\n/**\n * Style for a (parent) menu that has been pushed aside by a debutant\n * (sub) menu and therefore, although maybe temporarily, left the spotlight.\n *\n * @param translateY Where to place on Y axis\n */\nconst retired = style({\n opacity: 1,\n transform: `translateX(-100vw) translateY(0)`,\n});\n\n/**\n * Style for an active (sub) menu that dances across the stage, along with its\n * parent menu, as a result of the user panning. Requires an `xOffset`\n * parameter for the distance.\n */\nconst futsalShuffle = style({\n transform: 'translateX({{ xOffset }}px)',\n});\n\n/**\n * Style for a parent menu sweeping across the stage, right beside the\n * starlet sub menu, either off the stage or back onto it (for a great comeback).\n * Requires an `xOffset` parameter for the distance.\n */\nconst moonwalk = style({\n transform: 'translateX(calc(-100vw + {{ xOffset }}px))',\n});\n\nconst onStageHidden = style({\n opacity: 0,\n transform: 'translateX(0) translateY(0)',\n});\n\n/**\n * Animations used by the `granite-menu` component, showing the touch interface.\n * @docs-private\n */\nexport const graniteMenuTouchAnimations: {\n /**\n * This animation trigger controls the menu panel's entry and exit from the\n * stage on touch output devices.\n */\n readonly transformMenuTouch: AnimationTriggerMetadata;\n /**\n * This animation trigger controls the close button's entry and exit from the\n * stage on touch output devices, using the same states as the menu panel.\n */\n readonly transformCloseButton: AnimationTriggerMetadata;\n} = {\n transformMenuTouch: trigger('transformMenuTouch', [\n // Set up cast positions\n state('void', awaitingCue),\n state('enter, enter-from-below', onStage),\n state('pan-hidden', moonwalk, { params: { xOffset: 0 } }),\n state('pan', futsalShuffle, { params: { xOffset: 0 } }),\n state('below-with-delay', inTheOrchestraPit),\n state('hide', retired),\n\n // General movement across the stage. Transitions to 'pan' and 'pan-hidden'\n // states are intentionally left out as we want the menu position to update\n // instantly as the user moves their finger.\n transition(\n 'pan => enter, ' +\n 'pan => enter-from-below, ' +\n 'pan => void, ' +\n 'enter <=> hide, ' +\n 'enter-from-below <=> hide, ' +\n 'pan-hidden => hide, ' +\n 'pan-hidden => enter',\n animate(easeOut)\n ),\n\n transition(\n // Jump straight onto the stage, from the orchestra pit.\n // Excitement fills the air. Spotlight. Showtime.\n 'void => enter-from-below',\n sequence([\n animate(teleport, inTheOrchestraPit),\n animate(easeOut, onStage),\n ])\n ),\n transition(\n // Go stand in the curtains, then make a grand entrance from the side\n 'void => enter',\n sequence([animate(teleport, awaitingCue), animate(easeOut, onStage)])\n ),\n transition(\n // Get off the stage, back into the curtains on the side\n 'enter => void',\n animate(easeOut, awaitingCue)\n ),\n transition(\n // Take the side stairs down from the stage\n 'hide => below',\n animate(linear, retired)\n ),\n transition(\n // Wait for a bit, then take the side stairs down from the stage\n 'hide => below-with-delay',\n sequence([animate(teleport, retired), animate(linearDelayed, retired)])\n ),\n transition(\n // Stage dive into the orchestra pit\n 'enter => below, enter-from-below => below',\n sequence([animate(teleport, onStage), animate(linear, inTheOrchestraPit)])\n ),\n transition(\n // Receive the standing ovations, then stage dive into the orchestra pit\n 'enter => below-with-delay, enter-from-below => below-with-delay',\n sequence([\n animate(teleport, onStage),\n animate(linearDelayed, inTheOrchestraPit),\n ])\n ),\n ]),\n transformCloseButton: trigger('transformCloseButton', [\n state('void, below, below-with-delay', onStageHidden),\n state('enter, enter-from-below, pan-hidden, pan, hide', onStage),\n transition(\n 'void => enter-from-below',\n sequence([\n animate(teleport, onStageHidden),\n animate(getEaseLinear(50, defaultDuration / 2), onStage),\n ])\n ),\n transition(\n 'enter => below, enter-from-below => below',\n sequence([\n animate(teleport, onStage),\n animate(getEaseLinear(25), onStageHidden),\n ])\n ),\n transition(\n 'enter => below-with-delay, enter-from-below => below-with-delay',\n sequence([\n animate(teleport, onStage),\n animate(getEaseLinear(50, defaultDelay), onStageHidden),\n ])\n ),\n ]),\n};\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { Direction } from '@angular/cdk/bidi';\nimport { EventEmitter, InjectionToken, TemplateRef } from '@angular/core';\nimport { MenuPositionX, MenuPositionY } from './menu-positions';\n\n/**\n * Injection token used to provide the parent menu to menu-specific components.\n * @docs-private\n */\nexport const GRANITE_MENU_PANEL = new InjectionToken<GraniteMenuPanelInterface>(\n 'GRANITE_MENU_PANEL'\n);\n\nexport type ClosedEventType = void | 'click' | 'keydown' | 'tab';\nexport type OpenedEventType = void | 'click' | 'keydown';\n\nexport interface GraniteMenuPanelInterface {\n xPosition: MenuPositionX;\n yPosition: MenuPositionY;\n templateRef: TemplateRef<any>;\n parentMenu?: GraniteMenuPanelInterface | undefined;\n direction?: Direction;\n focusFirstItem: (origin?: FocusOrigin) => void;\n closed: EventEmitter<ClosedEventType>;\n opened: EventEmitter<OpenedEventType>;\n readonly panelId?: string;\n showBackButton: boolean;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Throws an exception for the case when menu trigger doesn't have a valid granite-menu instance\n * @docs-private\n */\nexport function throwGraniteMenuMissingError(): void {\n throw Error(`graniteMenuTriggerFor: must pass in an granite-menu instance.\n\n Example:\n <granite-menu #menu=\"graniteMenu\"></granite-menu>\n <button [graniteMenuTriggerFor]=\"menu\"></button>`);\n}\n\n/**\n * Throws an exception for the case when menu's x-position value isn't valid.\n * In other words, it doesn't match 'before' or 'after'.\n * @docs-private\n */\nexport function throwGraniteMenuInvalidPositionX(): void {\n throw Error(`xPosition value must be either 'before' or after'.\n Example: <granite-menu xPosition=\"before\" #menu=\"graniteMenu\"></granite-menu>`);\n}\n\n/**\n * Throws an exception for the case when menu's y-position value isn't valid.\n * In other words, it doesn't match 'above' or 'below'.\n * @docs-private\n */\nexport function throwGraniteMenuInvalidPositionY(): void {\n throw Error(`yPosition value must be either 'above' or below'.\n Example: <granite-menu yPosition=\"above\" #menu=\"graniteMenu\"></granite-menu>`);\n}\n","import {\n Attribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\n\n@Component({\n selector: 'granite-icon',\n template: '<ng-content></ng-content>',\n styleUrls: ['./icon.component.scss'],\n host: {\n role: 'img',\n class: 'granite-icon',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteIconComponent implements OnChanges {\n @Input()\n fontIcon: string;\n\n private _previousFontIconClass: string;\n\n constructor(\n public _elementRef: ElementRef,\n private renderer: Renderer2,\n @Attribute('aria-hidden') ariaHidden: string\n ) {\n // aria-hidden will be set to true by default, unless it's overridden by the developer\n if (!ariaHidden) {\n this.renderer.setAttribute(\n _elementRef.nativeElement,\n 'aria-hidden',\n 'true'\n );\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.fontIcon) {\n this._updateFontIcon();\n }\n }\n\n private _updateFontIcon(): void {\n if (this.fontIcon !== this._previousFontIconClass) {\n if (this._previousFontIconClass) {\n this.renderer.removeClass(\n this._elementRef.nativeElement,\n this._previousFontIconClass\n );\n }\n if (this.fontIcon) {\n this.renderer.addClass(this._elementRef.nativeElement, this.fontIcon);\n }\n this._previousFontIconClass = this.fontIcon;\n }\n }\n}\n","import { FocusableOption, FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport {\n Component,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n Optional,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport {\n ClientInputInterface,\n ClientOutputInterface,\n} from '../core/client-environment';\nimport { GRANITE_MENU_PANEL, GraniteMenuPanelInterface } from './menu-panel';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[graniteMenuItem]',\n template: `<ng-content></ng-content>\n <ng-container *ngIf=\"_triggersSubmenu\">\n <granite-icon\n class=\"caret-left\"\n [fontIcon]=\"'icon-caret-left'\"\n ></granite-icon>\n <granite-icon\n class=\"caret-right\"\n [fontIcon]=\"'icon-caret-right'\"\n ></granite-icon>\n </ng-container>`,\n standalone: false,\n exportAs: 'graniteMenuItem',\n styleUrls: ['./menu-item.component.scss'],\n host: {\n '[attr.role]': 'role',\n '[class.granite-menu-item]': 'true',\n '[class.granite-menu-item-highlighted]': '_highlighted',\n '[class.granite-menu-item-submenu-trigger]': '_triggersSubmenu',\n //#region --- Touch device customizations ---\n '[class.granite-device-output-touch]': '_clientOutput?.device === \"touch\"',\n //#endregion --- Touch device customizations ---\n '(mouseenter)': '_hovered.next(this)',\n },\n})\nexport class GraniteMenuItemComponent implements OnDestroy, FocusableOption {\n /** ARIA role for the menu item. */\n @Input() role: 'menuitem' | 'menuitemradio' | 'menuitemcheckbox' = 'menuitem';\n\n /** Stream that emits when the menu item is hovered. */\n readonly _hovered: Subject<this> = new Subject<this>();\n\n /** Stream that emits when the menu item is focused. */\n readonly _focused = new Subject<this>();\n\n /** Whether the menu item acts as a trigger for a sub-menu (used for styling) */\n _triggersSubmenu: boolean = false;\n\n /**\n * Whether the menu item is highlighted, e.g. in the \"breadcrumb\" parent chain\n * of sub menu trigger items\n */\n _highlighted: boolean = false;\n\n /** Client input device information */\n _clientInput: ClientInputInterface;\n\n /** Client output device information */\n _clientOutput: ClientOutputInterface;\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _focusMonitor: FocusMonitor,\n\n @Inject(GRANITE_MENU_PANEL)\n @Optional()\n public _parentMenu?: GraniteMenuPanelInterface\n ) {\n // Start monitoring the element so it gets the appropriate focused classes. We want\n // to show the focus style for menu items only when the focus was not caused by a\n // mouse or touch interaction.\n _focusMonitor.monitor(this._elementRef, false);\n }\n\n ngOnDestroy(): void {\n this._focusMonitor.stopMonitoring(this._elementRef);\n\n this._hovered.complete();\n this._focused.complete();\n }\n\n /** Focuses the menu item. */\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n this._focusMonitor.focusVia(this._getHostElement(), origin, options);\n this._focused.next(this);\n }\n\n /** Returns the host DOM element. */\n _getHostElement(): HTMLElement {\n return this._elementRef.nativeElement;\n }\n}\n","import {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectorRef,\n ContentChildren,\n Directive,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { FocusKeyManager, FocusOrigin } from '@angular/cdk/a11y';\nimport { Direction } from '@angular/cdk/bidi';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport { AnimationEvent } from '@angular/animations';\nimport {\n BehaviorSubject,\n combineLatest,\n merge,\n Observable,\n Subject,\n Subscription,\n} from 'rxjs';\nimport { filter, map, startWith, switchMap } from 'rxjs/operators';\n\nimport {\n ClientInputInterface,\n ClientOutputInterface,\n} from '../core/client-environment';\nimport {\n throwGraniteMenuInvalidPositionX,\n throwGraniteMenuInvalidPositionY,\n} from './menu-errors';\nimport { GraniteMenuItemComponent } from './menu-item.component';\nimport {\n ClosedEventType,\n OpenedEventType,\n GraniteMenuPanelInterface,\n} from './menu-panel';\nimport { MenuPositionX, MenuPositionY } from './menu-positions';\n\n/** Counter for panel ID generation */\nlet menuPanelUid = 0;\n\n/** Menu panel animation states */\ntype TransformMenuStates =\n // Touch device\n | 'void'\n | 'enter'\n | 'enter-from-below'\n | 'below-with-delay'\n | 'below'\n | 'pan'\n | 'hide'\n | 'pan-hidden';\n\n/**\n * Menu panel animation transform/state object. Has to be an object as we supply\n * the `xOffset` parameter and not just the state name.\n */\ntype TransformMenu = {\n /** Current animation state name */\n value: TransformMenuStates;\n params: {\n /** How far the menu has been panned/swiped by the user */\n xOffset: number;\n };\n};\n\n/** Menu panel animation default transform values */\nconst transformMenuDefault: TransformMenu = {\n value: 'void',\n params: {\n xOffset: 0,\n },\n};\n\n/** Base class with all of the menu functionality. */\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class _MenuBaseComponent\n implements\n AfterContentInit,\n OnDestroy,\n AfterContentChecked,\n GraniteMenuPanelInterface\n{\n /** Position of the menu in the X axis. */\n @Input()\n get xPosition(): MenuPositionX {\n return this._xPosition;\n }\n set xPosition(value: MenuPositionX) {\n if (value !== 'before' && value !== 'after') {\n throwGraniteMenuInvalidPositionX();\n }\n this._xPosition = value;\n }\n\n /** Position of the menu in the Y axis. */\n @Input()\n get yPosition(): MenuPositionY {\n return this._yPosition;\n }\n set yPosition(value: MenuPositionY) {\n if (value !== 'above' && value !== 'below') {\n throwGraniteMenuInvalidPositionY();\n }\n this._yPosition = value;\n }\n\n /** Optional touch menu panel title */\n @Input()\n title: string;\n\n /**\n * Touch menu close button label. If not set, any label set by parent will\n * be used.\n */\n @Input()\n closeLabel: string;\n\n @Input()\n openOnHover: boolean = true;\n\n @Input()\n scrollStrategy: 'reposition' | 'close' = 'reposition';\n\n @ViewChild(TemplateRef) templateRef: TemplateRef<any>;\n\n /** All items inside the menu. Includes items nested inside another menu. */\n @ContentChildren(GraniteMenuItemComponent, { descendants: true })\n _allItems: QueryList<GraniteMenuItemComponent>;\n\n /**\n * Event emitted when the menu is closed\n */\n @Output() readonly closed: EventEmitter<ClosedEventType> = new EventEmitter();\n\n /**\n * Event emitted when the menu is opened\n */\n @Output() readonly opened: EventEmitter<OpenedEventType> = new EventEmitter();\n\n /**\n * Used for locating the panel in tests and setting the aria-control attribute\n * for the menu trigger.\n */\n readonly panelId = `granite-menu-panel-${menuPanelUid++}`;\n\n /** Parent menu of the current menu panel. */\n parentMenu: GraniteMenuPanelInterface | undefined;\n\n /** Layout direction of the menu. */\n direction: Direction;\n\n /** Whether to show back button in touch menu title bar */\n showBackButton: boolean = false;\n\n /** Whether to show touch menu title bar */\n showTitle: boolean = false;\n\n /** Whether to add a close button below the menu */\n showCloseButton: boolean = false;\n\n /** Observable current state of the panel animation. */\n _transformMenu: BehaviorSubject<TransformMenu> = new BehaviorSubject(\n transformMenuDefault\n );\n\n /** Emits whenever an animation on the menu completes. */\n _animationDone = new Subject<AnimationEvent>();\n\n /** Whether the menu is animating. */\n _isAnimating: boolean;\n\n /** Whether the menu is about to be destroyed. */\n _isClosing: boolean;\n\n /** Client input device information */\n _clientInput: ClientInputInterface;\n\n /** Client output device information */\n _clientOutput: ClientOutputInterface;\n\n private _menuEmpty$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n // eslint-disable-next-line @typescript-eslint/member-ordering\n _isMenuEmpty$: Observable<boolean> = combineLatest([\n this._menuEmpty$,\n this._animationDone,\n ]).pipe(\n filter(([m, a]) => m && a != null),\n map(() => true)\n );\n\n /** Only the direct descendant menu items. */\n private _directDescendantItems = new QueryList<GraniteMenuItemComponent>();\n\n private _keyManager: FocusKeyManager<GraniteMenuItemComponent>;\n\n /** Subscription to tab events on the menu panel */\n private _tabSubscription = Subscription.EMPTY;\n\n private _xPosition: MenuPositionX = 'after';\n private _yPosition: MenuPositionY = 'below';\n\n /** Current state of the panel animation. */\n set _panelAnimationState(state: TransformMenuStates) {\n this._transformMenu.next({\n value: state,\n params: { xOffset: this.xOffset },\n });\n }\n\n /**\n * Current horizontal offset. Used with `pan` and `pan-hidden`\n * animation states.\n */\n private xOffset: number = 0;\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) {}\n\n ngAfterContentChecked(): void {\n this._menuEmpty$.next(this._allItems.length < 1 ? true : false);\n }\n\n ngAfterContentInit(): void {\n this._updateDirectDescendants();\n this._keyManager = new FocusKeyManager(this._directDescendantItems)\n .withWrap()\n .skipPredicate((menuItem) => {\n const hostElement: HTMLElement = menuItem._getHostElement();\n return hostElement instanceof HTMLButtonElement\n ? hostElement.disabled\n : hostElement.hasAttribute('graniteTitle');\n });\n this._tabSubscription = this._keyManager.tabOut.subscribe(() => {\n this.closed.emit('tab');\n });\n\n // If a user manually (programatically) focuses a menu item, we need to reflect that focus\n // change back to the key manager. Note that we don't need to unsubscribe here because _focused\n // is internal and we know that it gets completed on destroy.\n this._directDescendantItems.changes\n .pipe(\n startWith(this._directDescendantItems),\n switchMap((items) =>\n merge(...items.map((item: GraniteMenuItemComponent) => item._focused))\n )\n )\n .subscribe((focusedItem: GraniteMenuItemComponent) =>\n this._keyManager.updateActiveItem(focusedItem)\n );\n }\n\n ngOnDestroy(): void {\n this._directDescendantItems.destroy();\n this._tabSubscription.unsubscribe();\n this.closed.complete();\n }\n\n /**\n * Stream that combines the `_hovered` observables of all the menu's items\n * into a single observable. Emits whenever the hovered menu item changes.\n */\n _hovered(): Observable<GraniteMenuItemComponent> {\n // Coerce the `changes` property because Angular types it as `Observable<any>`\n const itemChanges = this._directDescendantItems.changes as Observable<\n QueryList<GraniteMenuItemComponent>\n >;\n\n return itemChanges.pipe(\n startWith(this._directDescendantItems),\n // Hovering is not applicable when producing touch output\n filter(() => {\n return this._clientOutput?.device !== 'touch';\n }),\n switchMap((items) =>\n merge(...items.map((item: GraniteMenuItemComponent) => item._hovered))\n )\n ) as Observable<GraniteMenuItemComponent>;\n }\n\n /** Handle a keyboard event from the menu, delegating to the appropriate action. */\n _handleKeydown(event: KeyboardEvent): void {\n const key = event.key;\n const manager = this._keyManager;\n\n switch (key) {\n case 'Escape':\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this.closed.emit('keydown');\n }\n break;\n case 'ArrowLeft':\n if (this.parentMenu && this.direction === 'ltr') {\n this.closed.emit('keydown');\n }\n break;\n case 'ArrowRight':\n if (this.parentMenu && this.direction === 'rtl') {\n this.closed.emit('keydown');\n }\n break;\n case 'Home':\n case 'End':\n if (!hasModifierKey(event)) {\n key === 'Home'\n ? manager.setFirstItemActive()\n : manager.setLastItemActive();\n event.preventDefault();\n }\n break;\n default:\n if (key === 'ArrowUp' || key === 'ArrowDown') {\n manager.setFocusOrigin('keyboard');\n }\n\n manager.onKeydown(event);\n }\n }\n\n /**\n * Focus the first item in the menu.\n * @param origin Action from which the focus originated. Used to set the correct styling.\n */\n focusFirstItem(origin: FocusOrigin = 'program'): void {\n this._keyManager.setFocusOrigin(origin).setFirstItemActive();\n }\n\n /** Updates the `showTitle` property for touch device UI */\n _updateShowTitle(): void {\n this.showTitle = !!this.title || this.showBackButton;\n }\n\n /** Starts the enter animation */\n _startAnimation(): void {\n this._panelAnimationState = 'enter';\n }\n\n /** Resets the panel animation to its initial state. */\n _resetAnimation(): void {\n this._panelAnimationState = 'void';\n }\n\n /**\n * Starts the 'below' animation, moving a menu down, out of view below the\n * viewport. Used to close the whole menu, for example when clicking\n * the backdrop.\n */\n _startTouchCloseDownAnimation(): void {\n this._panelAnimationState = 'below';\n }\n\n /**\n * Starts the 'below-with-delay' animation, moving a menu down, out of view below the\n * viewport. Used to close the whole menu as a response to the user tapping\n * a menu item. There is a short delay before the animation starts, to that\n * the user gets a visual feedback on what item was selected.\n */\n _startTouchCloseDownAnimationWithDelay(): void {\n this._panelAnimationState = 'below-with-delay';\n }\n\n /**\n * Starts the 'void' animation, moving a (sub) menu out of view to the side\n * of the viewport. Used when going \"back\" from a sub menu.\n */\n _startTouchCloseSideAnimation(): void {\n this._resetAnimation();\n }\n\n /**\n * Starts the enter-from-below animation, moving a (root) menu into view,\n * Animates upwards from a starting position below the viewport.\n */\n _startTouchRootEnterAnimation(): void {\n this._panelAnimationState = 'enter-from-below';\n this.xOffset = 0;\n }\n\n /** Starts the enter animation, moving a (sub) menu into view. */\n _startTouchSubmenuEnterAnimation(): void {\n this._panelAnimationState = 'enter';\n this.xOffset = 0;\n }\n\n /**\n * Starts the pan animation, to position a submenu in a response\n * to user dragging sideways (panning).\n */\n _startTouchPanAnimation(xOffset: number): void {\n this._panelAnimationState = 'pan';\n this.xOffset = xOffset;\n }\n\n /**\n * Starts the pan-hidden animation, to position a parent menu next to an\n * active submenu that the user is dragging sideways (panning).\n */\n _startTouchHidePanAnimation(xOffset: number): void {\n this._panelAnimationState = 'pan-hidden';\n this.xOffset = xOffset;\n }\n\n /**\n * Starts the hide animation, to make a parent menu slide out to leave\n * space for a submenu.\n */\n _startTouchHideAnimation(): void {\n this._panelAnimationState = 'hide';\n this.xOffset = 0;\n }\n\n /** Callback that is invoked when the panel animation completes. */\n _onAnimationDone(event: AnimationEvent): void {\n this._animationDone.next(event);\n this._isAnimating = false;\n }\n\n _onAnimationStart(event: AnimationEvent): void {\n this._isAnimating = true;\n\n // Scroll the content element to the top as soon as the animation starts. This is necessary,\n // because we move focus to the first item while it's still being animated, which can throw\n // the browser off when it determines the scroll position. Alternatively we can move focus\n // when the animation is done, however moving focus asynchronously will interrupt screen\n // readers which are in the process of reading out the menu already. We take the `element`\n // from the `event` since we can't use a `ViewChild` to access the pane.\n if (\n (event.toState === 'enter' || event.toState === 'enter-from-below') &&\n this._keyManager.activeItemIndex === 0\n ) {\n event.element.scrollTop = 0;\n }\n }\n\n /**\n * Handle click on the menu by emitting on the `closed` emitter\n * with a `click` reason\n */\n _handleClick(): void {\n this.closed.emit('click');\n }\n\n /**\n * Handle click on the close button by emitting on the `closed` emitter\n * without any particular reason\n */\n _handleCloseClick(): void {\n this.closed.emit();\n }\n\n /**\n * Handle click on the back icon by emitting on the `clicked` emitter\n */\n _handleBackClick(e: MouseEvent): void {\n if (this.showBackButton) {\n // Close submenu keydown-style: close only this menu and leave parents open\n this.closed.emit('keydown');\n }\n e.stopPropagation();\n }\n\n /**\n * Update client device information for the menu and its menu items.\n */\n _setDevice(\n clientInput: ClientInputInterface,\n clientOutput: ClientOutputInterface\n ): void {\n this._clientInput = clientInput;\n this._clientOutput = clientOutput;\n\n this._directDescendantItems.forEach((item) => {\n item._clientInput = clientInput;\n item._clientOutput = clientOutput;\n });\n\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Resets the active item in the menu. This is used when the menu is opened, allowing\n * the user to start from the first option when pressing the down arrow.\n */\n resetActiveItem(): void {\n this._keyManager.setActiveItem(-1);\n }\n\n /**\n * Sets up a stream that will keep track of any newly-added menu items and will update the list\n * of direct descendants. We collect the descendants this way, because `_allItems` can include\n * items that are part of child menus, and using a custom way of registering items is unreliable\n * when it comes to maintaining the item order.\n */\n private _updateDirectDescendants() {\n this._allItems.changes\n .pipe(startWith(this._allItems))\n .subscribe((items: QueryList<GraniteMenuItemComponent>) => {\n this._directDescendantItems.reset(\n items.filter((item) => item._parentMenu === this)\n );\n this._directDescendantItems.notifyOnChanges();\n });\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[graniteMenuTouchCloseItem]',\n standalone: false,\n template: '<ng-content></ng-content>',\n exportAs: 'graniteMenuTouchCloseItem',\n styleUrls: ['./menu-item.component.scss'],\n host: {\n '[class.granite-device-output-touch]': 'true',\n },\n})\nexport class GraniteMenuTouchCloseComponent {}\n","import { Component, Inject, Optional } from '@angular/core';\nimport { GRANITE_MENU_PANEL } from './menu-panel';\nimport { _MenuBaseComponent } from './menu-base';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[graniteMenuTouchTitleItem]',\n standalone: false,\n template: `\n <ng-container *ngIf=\"_triggersBack\">\n <granite-icon\n class=\"caret-left\"\n [fontIcon]=\"'icon-caret-left'\"\n ></granite-icon>\n <granite-icon\n class=\"caret-right\"\n [fontIcon]=\"'icon-caret-right'\"\n ></granite-icon>\n </ng-container>\n <ng-content></ng-content>\n `,\n exportAs: 'graniteMenuTouchTitleItem',\n styleUrls: ['./menu-item.component.scss'],\n host: {\n '[class.granite-menu-item-title]': 'true',\n '[class.granite-menu-item-back-trigger]': '_triggersBack',\n '[class.granite-device-output-touch]': 'true',\n },\n})\nexport class GraniteMenuTouchTitleItemComponent {\n /**\n * Whether the menu item acts as a trigger to return to a parent menu\n * (used for styling)\n */\n _triggersBack: boolean = false;\n\n constructor(\n /** If this is an item on a _submenu_, its parent menu will have a parent */\n @Inject(GRANITE_MENU_PANEL)\n @Optional()\n _parentMenu: _MenuBaseComponent\n ) {\n this._triggersBack = !!_parentMenu.parentMenu;\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nimport { graniteMenuDesktopAnimations } from './menu-desktop-animations';\nimport { graniteMenuTouchAnimations } from './menu-touch-animations';\nimport { GRANITE_MENU_PANEL } from './menu-panel';\nimport { _MenuBaseComponent } from './menu-base';\n\n@Component({\n selector: 'granite-menu',\n templateUrl: 'menu.component.html',\n styleUrls: ['menu.component.scss'],\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'graniteMenu',\n animations: [\n graniteMenuDesktopAnimations.transformMenuDesktop,\n graniteMenuTouchAnimations.transformMenuTouch,\n graniteMenuTouchAnimations.transformCloseButton,\n ],\n providers: [\n { provide: GRANITE_MENU_PANEL, useExisting: GraniteMenuComponent },\n ],\n})\nexport class GraniteMenuComponent extends _MenuBaseComponent {}\n","<!--\n Using separate template part for desktop and touch output, because of\n animation triggers and slightly different content.\n-->\n<ng-template>\n <!-- Desktop -->\n <ng-container *ngIf=\"_clientOutput.device === 'desktop'\">\n <div\n #menu\n class=\"granite-menu\"\n [class.is-menu-empty]=\"_isMenuEmpty$ | async\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [@transformMenuDesktop]=\"_transformMenu | async\"\n (@transformMenuDesktop.start)=\"_onAnimationStart($event)\"\n (@transformMenuDesktop.done)=\"_onAnimationDone($event)\"\n (click)=\"_handleClick()\"\n (keydown)=\"_handleKeydown($event)\"\n >\n <div class=\"granite-menu-content\">\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Touch -->\n <ng-container *ngIf=\"_clientOutput?.device === 'touch'\">\n <div\n #menu\n class=\"granite-menu granite-device-output-touch\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [@transformMenuTouch]=\"_transformMenu | async\"\n (@transformMenuTouch.start)=\"_onAnimationStart($event)\"\n (@transformMenuTouch.done)=\"_onAnimationDone($event)\"\n (click)=\"_handleClick()\"\n (keydown)=\"_handleKeydown($event)\"\n >\n <div class=\"granite-menu-content\">\n <div *ngIf=\"showTitle\" class=\"header-container\">\n <button\n [disabled]=\"!showBackButton\"\n graniteMenuTouchTitleItem\n (click)=\"_handleBackClick($event)\"\n >\n {{ title }}\n </button>\n </div>\n\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n\n <div class=\"footer-container\"></div>\n </div>\n </div>\n\n <!-- Close button -->\n <div class=\"close\" [@transformCloseButton]=\"_transformMenu | async\">\n <button\n *ngIf=\"showCloseButton\"\n graniteMenuTouchCloseItem\n (click)=\"_handleCloseClick()\"\n >\n {{ closeLabel }}\n </button>\n </div>\n </ng-container>\n\n <!--\n Content template shared between desktop and touch parts, as <ng-content>\n can't be used in two places in the same template\n -->\n <ng-template #content>\n <ng-content></ng-content>\n </ng-template>\n</ng-template>\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Injection token used to provide components knowledge of what device types\n * are being used for input.\n */\nexport const GRANITE_CLIENT_INPUT = new InjectionToken<ClientInputInterface>(\n 'GRANITE_CLIENT_INPUT'\n);\n\n/**\n * Injection token used to provide components knowledge of what device type\n * is being used for output.\n */\nexport const GRANITE_CLIENT_OUTPUT = new InjectionToken<ClientOutputInterface>(\n 'GRANITE_CLIENT_OUTPUT'\n);\n\nexport type InputDeviceTypes =\n | void\n | 'touch'\n | 'mouse'\n | 'keyboard'\n | 'onscreen-keyboard';\n\nexport type OutputDeviceTypes =\n | void\n | 'touch' // TODO: Change to 'touch-screen' for touch\n | 'desktop'; // TODO: Change to 'screen' for desktop\n\nexport interface ClientInputInterface {\n devices: InputDeviceTypes[];\n}\n\nexport interface ClientOutputInterface {\n device: OutputDeviceTypes;\n}\n\ninterface DevicePrefabInterface {\n input: ClientInputInterface;\n output: ClientOutputInterface;\n}\n\nexport const deviceDesktop: DevicePrefabInterface = {\n input: { devices: ['mouse', 'keyboard'] },\n output: { device: 'desktop' },\n};\n\nexport const deviceTouch: DevicePrefabInterface = {\n input: { devices: ['touch', 'onscreen-keyboard'] },\n output: { device: 'touch' },\n};\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Self,\n SimpleChanges,\n ViewContainerRef,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport {\n FocusMonitor,\n FocusOrigin,\n isFakeMousedownFromScreenReader,\n} from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport {\n FlexibleConnectedPositionStrategy,\n HorizontalConnectionPos,\n Overlay,\n OverlayConfig,\n OverlayRef,\n PositionStrategy,\n ScrollStrategy,\n VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\n\nimport {\n asapScheduler,\n fromEvent,\n merge,\n Observable,\n of as observableOf,\n Subscription,\n} from 'rxjs';\nimport { delay, filter, take, takeUntil } from 'rxjs/operators';\n\nimport { _MenuBaseComponent } from './menu-base';\nimport { GraniteMenuItemComponent } from './menu-item.component';\nimport { ClosedEventType, GRANITE_MENU_PANEL } from './menu-panel';\n\n//#region --- Touch device customizations ---\nimport {\n ClientInputInterface,\n ClientOutputInterface,\n GRANITE_CLIENT_INPUT,\n GRANITE_CLIENT_OUTPUT,\n OutputDeviceTypes,\n} from '../core/client-environment';\nimport { throwGraniteMenuMissingError } from './menu-errors';\n\n/** Options for binding a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({\n passive: true,\n});\n//#endregion --- Touch device customizations ---\n\n/**\n * Directive used to turn a button element into a (popup) menu trigger\n *\n * Stripped-down version of Angular Material's menu trigger directive (.../menu/menu-trigger.ts)\n */\n@Directive({\n selector: `[graniteMenuTriggerFor]`,\n standalone: false,\n exportAs: 'graniteMenuTriggerFor',\n host: {\n class: 'granite-menu-trigger', // Required for test harness host selector\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'isMenuOpened || null',\n '[attr.aria-controls]': 'isMenuOpened ? menu.panelId : null',\n '(mousedown)': '_handleMousedown($event)',\n '(keydown)': '_handleKeydown($event)',\n '(click)': '_handleClick($event)',\n },\n})\nexport class GraniteMenuTriggerForDirective\n implements AfterContentInit, OnDestroy, OnChanges\n{\n /** References the menu instance that the trigger is associated with. */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('graniteMenuTriggerFor')\n menu: _MenuBaseComponent;\n\n @Input() openOnClick?: boolean = true;\n\n /** Whether the associated menu is open */\n isMenuOpened: boolean = false;\n\n // Tracking input type is necessary so it's possible to only auto-focus\n // the first item of the list when the menu is opened via the keyboard\n private openedBy: 'mouse' | 'touch' | null = null;\n\n private _hoverSubscription = Subscription.EMPTY;\n private _menuCloseSubscription = Subscription.EMPTY;\n private _closingActionsSubscription = Subscription.EMPTY;\n\n private _portal: TemplatePortal | null = null;\n private _overlayRef: OverlayRef | null = null;\n private _document?: Document;\n\n // ----------------------------------------- //\n // --- Here be poor man's touch gestures --- //\n // ----------------------------------------- //\n\n // TODO: Replace with Hammer or other gesture library\n\n private _touchStartTime: number;\n private _touchTimeTaken: number;\n private _touchStartX: number;\n private _touchStartY: number;\n private _touchCurrentX: number;\n private _touchCurrentY: number;\n private _touchTranslateX: number;\n private _touchLockedX: boolean | null;\n private _touchMaxX: number;\n private _touchTouchingElement: boolean = false;\n\n constructor(\n private _overlay: Overlay,\n private _element: ElementRef<HTMLElement>,\n private _viewContainerRef: ViewContainerRef,\n private _changeDetectionRef: ChangeDetectorRef,\n\n /** If this is a _submenu_ trigger, it will have a parent menu */\n @Inject(GRANITE_MENU_PANEL)\n @Optional()\n private _parentMenu: _MenuBaseComponent,\n\n //#region --- Touch device customizations ---\n /** Client input device information */\n @Inject(GRANITE_CLIENT_INPUT)\n @Optional()\n private _clientInput: ClientInputInterface,\n\n /** Client output device information */\n @Inject(GRANITE_CLIENT_OUTPUT)\n @Optional()\n private _clientOutput: ClientOutputInterface,\n //#endregion --- Touch device customizations ---\n\n /**\n * If this is a _submenu_ trigger, there should be a corresponding menu\n * item directive present as well:\n *\n * <button graniteMenuItem [graniteMenuTriggerFor]=\"...\">\n * ^-- This one\n */\n @Optional() @Self() private _menuItemInstance: GraniteMenuItemComponent,\n\n @Optional() private _dir: Directionality,\n private _focusMonitor: FocusMonitor,\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n @Inject(DOCUMENT) document?: any\n ) {\n _element.nativeElement.addEventListener(\n 'touchstart',\n this._handleTouchStart,\n passiveEventListenerOptions\n );\n\n if (_menuItemInstance) {\n _menuItemInstance._triggersSubmenu = this.triggersSubmenu();\n }\n\n this._document = document as Document;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.menu) {\n this._handleMenuChange();\n }\n }\n\n ngAfterContentInit(): void {\n // removed checkMenu here to avoid errors in dynamically genarated menus\n // menu is checked when opening the menu\n // this._checkMenu();\n this._handleHover();\n }\n\n ngOnDestroy(): void {\n if (this._overlayRef) {\n //#region --- Touch device customizations ---\n this.removeOverlayListeners();\n //#endregion --- Touch device customizations ---\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n\n this._element.nativeElement.removeEventListener(\n 'touchstart',\n this._handleTouchStart,\n passiveEventListenerOptions\n );\n\n this._hoverSubscription.unsubscribe();\n this._menuCloseSubscription.unsubscribe();\n this._closingActionsSubscription.unsubscribe();\n }\n\n /** Handles change of associated menu */\n _handleMenuChange(): void {\n this._menuCloseSubscription.unsubscribe();\n\n // Close the menu overlay when the menu itself says it wants to be closed\n if (this.menu) {\n const closed = this.menu.closed as Observable<ClosedEventType>;\n\n this._menuCloseSubscription = closed.subscribe((reason) => {\n //#region --- Touch device customizations ---\n if (this.menu._isClosing) {\n return;\n }\n this.menu._isClosing = true;\n\n // Get rid of the menu and tell any parent to restore its position\n if (this._clientOutput.device === 'touch') {\n // First we wait for any running animation to complete\n const runningAnimationDone: Observable<any> = this.menu._isAnimating\n ? this.menu._animationDone\n : observableOf([null]);\n\n runningAnimationDone\n .pipe(take(1), delay(0, asapScheduler))\n .subscribe(() => {\n this.animateCloseMenu(reason !== 'keydown', reason === 'click');\n this.menu._animationDone\n .pipe(take(1), delay(0, asapScheduler))\n .subscribe(() => this._destroyMenu());\n });\n } else {\n //#endregion --- Touch device customizations ---\n this._destroyMenu();\n }\n\n // If a click closed the menu, we should close the entire chain of nested menus.\n if ((reason === 'click' || reason === 'tab') && this._parentMenu) {\n this._parentMenu.closed.emit(reason);\n }\n });\n }\n }\n\n isOpen(): boolean {\n return this.isMenuOpened;\n }\n\n /** Open the associated menu */\n openMenu(): void {\n if (this.isMenuOpened) {\n return;\n }\n this.openedEvent();\n\n this._checkMenu();\n\n this.menu.parentMenu = this.triggersSubmenu()\n ? this._parentMenu\n : undefined;\n this.menu.direction = this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n\n if (this._parentMenu) {\n // Menu triggers inherit target device types from their parent.\n // Ultimately it is the root trigger that determines device types for\n // the whole menu hierarchy.\n this._clientInput = this._parentMenu._clientInput;\n this._clientOutput = this._parentMenu._clientOutput;\n }\n\n //#region --- Touch device customizations ---\n // Make the menu we're about to open use the same devices as the trigger\n this.menu._setDevice(this._clientInput, this._clientOutput);\n\n if (this._clientOutput.device === 'touch') {\n this.menu.showBackButton = !!this._parentMenu;\n this.menu._updateShowTitle();\n\n if (!this.menu.closeLabel) {\n this.menu.closeLabel = this._parentMenu?.closeLabel;\n }\n\n this.menu.showCloseButton = !!this.menu.closeLabel;\n }\n this.menu._isClosing = false;\n\n const panelClass: string[] = [];\n if (this._clientOutput.device === 'touch') {\n panelClass.push('granite-overlay-pane-fill-width-bottom');\n }\n\n // setting scrollStrategy options to overlay\n const scrollStrategy = this.setScrollStrategyToOverylay(\n this._clientOutput.device,\n this.menu.scrollStrategy\n );\n\n const hasBackdrop =\n this._clientOutput.device === 'touch' && !this.triggersSubmenu();\n //#endregion --- Touch device customizations ---\n\n // Create an overlay to stuff the menu (portal) into below\n if (!this._overlayRef) {\n const config = new OverlayConfig({\n positionStrategy: this._positionStrategy(),\n backdropClass: 'granite-overlay-dark-glass-backdrop',\n scrollStrategy,\n direction: this._dir,\n panelClass,\n hasBackdrop,\n });\n\n this._overlayRef = this._overlay.create(config);\n\n //#region --- Touch device customizations ---\n // Add touch listener for submenu back pan/swipe\n if (this._clientOutput.device === 'touch') {\n this.addOverlayListeners();\n }\n //#endregion --- Touch device customizations ---\n } else {\n // Reset animation state for reused overlays\n if (this._clientOutput.device === 'touch') {\n this.menu._panelAnimationState = 'void';\n }\n }\n\n // Create portal from associated menu's template\n if (!this._portal || this._portal.templateRef !== this.menu.templateRef) {\n this._portal = new TemplatePortal(\n this.menu.templateRef,\n this._viewContainerRef\n );\n }\n\n // Attach menu portal to overlay ref (which is a portal outlet)\n this._overlayRef.attach(this._portal);\n\n // Subscribe to stream that emits whenever an action that should close the menu occurs\n this._closingActionsSubscription = this._menuClosingActions().subscribe(\n () => this.closeMenu()\n );\n\n this.animateOpenMenu();\n\n this._setIsMenuOpen(true);\n this.menu.focusFirstItem(this.openedBy || 'program');\n }\n\n /** Emits an eventtype when the menu is opened */\n openedEvent(): void {\n if (this.openedBy === 'touch' || this.openedBy === 'mouse') {\n this.menu.opened.emit('click');\n } else {\n this.menu.opened.emit('keydown');\n }\n }\n\n /** Whether the menu triggers a sub-menu or a top-level one. */\n triggersSubmenu(): boolean {\n return !!(this._menuItemInstance && this._parentMenu);\n }\n\n /** Toggles the menu between the open and closed states. */\n toggleMenu(): void {\n if (this.isMenuOpened) {\n this.closeMenu();\n } else if (this.openOnClick) {\n this.openMenu();\n }\n }\n\n /** Close the associated menu */\n closeMenu(): void {\n this.menu.closed.emit();\n }\n\n /**\n * Focuses the menu trigger.\n * @param origin Source of the menu trigger's focus.\n */\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(this._element, origin, options);\n } else {\n this._element.nativeElement.focus(options);\n }\n }\n\n /** Detach menu portal from overlay and update open state */\n _destroyMenu(): void {\n if (!this._overlayRef || !this.isMenuOpened) {\n return;\n }\n\n this._closingActionsSubscription.unsubscribe();\n this._overlayRef.detach();\n this._restoreFocus();\n this.menu._resetAnimation();\n\n this._setIsMenuOpen(false);\n }\n\n /** Handles mouse presses on the trigger. */\n _handleMousedown(event: MouseEvent): void {\n if (!isFakeMousedownFromScreenReader(event)) {\n if (this.openedBy !== 'touch') {\n // Since right or middle button clicks won't trigger the `click` event,\n // we shouldn't consider the menu as opened by mouse in those cases.\n this.openedBy = event.button === 0 ? 'mouse' : null;\n }\n\n // Since clicking on the trigger won't close the menu if it opens a sub-menu,\n // we should prevent focus from moving onto it via click to avoid the\n // highlight from lingering on the menu item.\n if (this.triggersSubmenu() && !this._toggleOnSubmenuClick()) {\n event.preventDefault();\n }\n }\n }\n\n /** Handles key presses on the trigger. */\n _handleKeydown(event: KeyboardEvent): void {\n const key = event.key;\n\n if (\n this.triggersSubmenu() &&\n ((key === 'ArrowRight' && this._dir.value === 'ltr') ||\n (key === 'ArrowLeft' && this._dir.value === 'rtl'))\n ) {\n this.openMenu();\n }\n }\n\n /** Handles click events on the trigger. */\n _handleClick(event: MouseEvent): void {\n if (this.triggersSubmenu()) {\n // Stop event propagation to avoid closing the parent menu.\n event.stopPropagation();\n\n this._toggleOnSubmenuClick() ? this.toggleMenu() : this.openMenu();\n } else {\n this.toggleMenu();\n }\n }\n\n /**\n * Handles touch start events on the trigger.\n * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n */\n private _handleTouchStart = () => {\n this.openedBy = 'touch';\n };\n\n /** Handles the cases where the user hovers over the trigger. */\n private _handleHover() {\n // Subscribe to changes in the hovered item in order to toggle the panel.\n if (!this.triggersSubmenu() || !this._parentMenu) {\n return;\n }\n\n this._hoverSubscription = this._parentMenu\n ._hovered()\n .pipe(\n filter(() => this._openOnHover()),\n // Since we might have multiple competing triggers for the same menu (e.g. a sub-menu\n // with different data and triggers), we have to delay it by a tick to ensure that\n // it won't be closed immediately after it is opened.\n filter(\n (active) => active === this._menuItemInstance /*&& !active.disabled*/\n ),\n delay(0, asapScheduler)\n )\n .subscribe(() => {\n this.openedBy = 'mouse';\n\n // If the same menu is used between multiple triggers, it might still be animating\n // while the new trigger tries to re-open it. Wait for the animation to finish\n // before doing so. Also interrupt if the user moves to another item.\n if (this.menu instanceof _MenuBaseComponent && this.menu._isAnimating) {\n // We need the `delay(0)` here in order to avoid\n // 'changed after checked' errors in some cases. See Angular Material #12194.\n this.menu._animationDone\n .pipe(\n take(1),\n delay(0, asapScheduler),\n takeUntil(this._parentMenu._hovered())\n )\n .subscribe(() => this.openMenu());\n } else {\n this.openMenu();\n }\n });\n }\n\n /**\n * Restores focus to the element that was focused before the menu was open.\n * Could be the root trigger button or a submenu trigger item\n */\n private _restoreFocus() {\n // We should reset focus if the user is navigating using a keyboard or\n // if we have a top-level trigger which might cause focus to be lost\n // when clicking outside of the menu.\n if (!this.openedBy) {\n // Note that the focus style will show up both for `program` and\n // `keyboard` so we don't have to specify which one it is.\n this.focus();\n } else if (!this.triggersSubmenu()) {\n this.focus(this.openedBy);\n }\n\n this.openedBy = null;\n }\n\n // Set state rather than toggle to support triggers sharing a menu\n private _setIsMenuOpen(isOpen: boolean): void {\n if (this.isMenuOpened !== isOpen) {\n this._changeDetectionRef.markForCheck();\n }\n\n this.isMenuOpened = isOpen;\n\n if (this.triggersSubmenu()) {\n this._menuItemInstance._highlighted =\n isOpen && this._clientOutput.device !== 'touch';\n }\n }\n\n /**\n * This method checks that a valid instance of MenuComponent has been passed into\n * graniteMenuTriggerFor. If not, an exception is thrown.\n */\n private _checkMenu() {\n if (!this.menu) {\n throwGraniteMenuMissingError();\n }\n }\n\n /**\n * Returns strategy for positioning the overlay for desktop devices:\n * Place adjacent to the trigger button (preferably immediately below)\n * in order to show as much of the menu as possible.\n */\n private _desktopPositionStrategy(): PositionStrategy {\n const positionStrategy: FlexibleConnectedPositionStrategy = this._overlay\n .position()\n .flexibleConnectedTo(this._element)\n .withLockedPosition()\n .withTransformOriginOn('.granite-menu');\n\n this._setPosition(positionStrategy);\n return positionStrategy;\n }\n\n /**\n * Sets the appropriate positions on a position strategy\n * so the overlay connects with the trigger correctly.\n * @param positionStrategy Strategy whose position to update.\n */\n private _setPosition(positionStrategy: FlexibleConnectedPositionStrategy) {\n const MENU_PANEL_TOP_PADDING = 0;\n\n let [originX, originFallbackX]: HorizontalConnectionPos[] =\n this.menu.xPosition === 'before' ? ['end', 'start'] : ['start', 'end'];\n\n const [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\n this.menu.yPosition === 'above' ? ['bottom', 'top'] : ['top', 'bottom'];\n\n let [originY, originFallbackY] = [overlayY, overlayFallbackY];\n let [overlayX, overlayFallbackX] = [originX, originFallbackX];\n let offsetY = 0;\n\n if (this.triggersSubmenu()) {\n // When the menu is a sub-menu, it should always align itself\n // to the edges of the trigger, instead of overlapping it.\n overlayFallbackX = originX =\n this.menu.xPosition === 'before' ? 'start' : 'end';\n originFallbackX = overlayX = originX === 'end' ? 'start' : 'end';\n offsetY =\n overlayY === 'bottom'\n ? MENU_PANEL_TOP_PADDING\n : -MENU_PANEL_TOP_PADDING;\n } else {\n originY = overlayY === 'top' ? 'bottom' : 'top';\n originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n }\n\n positionStrategy.withPositions([\n { originX, originY, overlayX, overlayY, offsetY },\n {\n originX: originFallbackX,\n originY,\n overlayX: overlayFallbackX,\n overlayY,\n offsetY,\n },\n {\n originX,\n originY: originFallbackY,\n overlayX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n {\n originX: originFallbackX,\n originY: originFallbackY,\n overlayX: overlayFallbackX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n ]);\n }\n\n /** Returns a stream that emits whenever an action that should close the menu occurs. */\n private _menuClosingActions() {\n const detachments = this._overlayRef?.detachments();\n const parentClose = this._parentMenu\n ? this._parentMenu.closed\n : observableOf<ClosedEventType>(null);\n\n const hover =\n this._clientOutput.device === 'desktop' && this._parentMenu\n ? this._parentMenu._hovered().pipe(\n filter((item) => item !== this._menuItemInstance),\n filter(() => this.isMenuOpened)\n )\n : observableOf<ClosedEventType>(null);\n\n // Note: Quick fix. Feature reportedly exists in CDK for Angular 10\n // Filter to prevent closing when animating added though. Applied to\n // root menu only.\n const outsideClick = !this._parentMenu\n ? fromEvent<MouseEvent>(this._document, 'click').pipe(\n filter(\n (e: MouseEvent) =>\n (e.target as HTMLElement) !== this._element.nativeElement &&\n (e.target as HTMLElement).closest('.granite-menu') === null\n ),\n filter(() => !this.menu._isAnimating)\n )\n : observableOf<MouseEvent | null>(null);\n\n return merge(detachments, hover, parentClose, outsideClick).pipe(\n filter((event) => event !== null)\n );\n }\n\n /**\n * Whether to automatically open submenus on hover. This is true when showing\n * desktop menus and having mouse support.\n */\n private _openOnHover(): boolean {\n return (\n (this.triggersSubmenu()\n ? this._parentMenu.openOnHover\n : this.menu.openOnHover) &&\n this._parentMenu._clientOutput?.device === 'desktop' &&\n this._parentMenu._clientInput?.devices.includes('mouse')\n );\n }\n\n /**\n * Whether to toggle submenus on click. This is true when showing desktop menus\n * without mouse support. Which, by the way, is not a great idea to begin with.\n */\n private _toggleOnSubmenuClick(): boolean {\n return (\n !(this.triggersSubmenu()\n ? this._parentMenu.openOnHover\n : this.menu.openOnHover) ||\n (this._parentMenu._clientOutput?.device === 'desktop' &&\n !this._parentMenu._clientInput?.devices.includes('mouse'))\n );\n }\n\n // ------------------------------------------- //\n // --- Here be touch device customizations --- //\n // ------------------------------------------- //\n\n /** Set animation state to bring a newly opened menu into view */\n private animateOpenMenu() {\n this._clientOutput.device === 'touch'\n ? this.animateTouchOpenMenu()\n : this.menu._startAnimation();\n }\n\n private animateTouchOpenMenu() {\n if (this.triggersSubmenu()) {\n // Slide newly opened sub menu into view from the side,\n // pushing any parent menu out of view on the other side\n this.menu._startTouchSubmenuEnterAnimation();\n this._parentMenu._startTouchHideAnimation();\n } else {\n // Slide root menu into view from below\n this.menu._startTouchRootEnterAnimation();\n }\n }\n\n /** Set animation state to close the active menu */\n private animateCloseMenu(toBelow: boolean, withDelay: boolean) {\n this._clientOutput.device === 'touch'\n ? this._animateTouchCloseMenu(toBelow, withDelay)\n : this._parentMenu._resetAnimation();\n }\n\n private _animateTouchCloseMenu(toBelow: boolean, withDelay: boolean) {\n if (toBelow) {\n // Slide menu out of view below the viewport\n withDelay\n ? this.menu._startTouchCloseDownAnimationWithDelay()\n : this.menu._startTouchCloseDownAnimation();\n } else {\n // Slide the closed menu out of view to the side\n // and slide any parent menu back into view\n this.menu._startTouchCloseSideAnimation();\n this._parentMenu?._startTouchSubmenuEnterAnimation();\n }\n }\n\n /**\n * Set animation state to place the menu and any parent at the given\n * horizontal position, i.e. following touch pan movement.\n *\n * @param xOffset Horizontal offset\n */\n private animateSetMenuPosition(xOffset: number) {\n this.menu._startTouchPanAnimation(xOffset);\n if (this._parentMenu) {\n this._parentMenu._startTouchHidePanAnimation(xOffset);\n }\n }\n\n /**\n * Returns strategy for positioning the overlay depending on what type of\n * device the menu is being shown on\n */\n private _positionStrategy(): PositionStrategy {\n return this._clientOutput.device === 'touch'\n ? this._touchPositionStrategy()\n : this._desktopPositionStrategy();\n }\n\n /**\n * Returns strategy for positioning the overlay for touch devices:\n * Place centered at the bottom of the screen.\n */\n private _touchPositionStrategy(): PositionStrategy {\n return this._overlay.position().global();\n }\n\n // ----------------------------------------- //\n // --- Here be poor man's touch gestures --- //\n // ----------------------------------------- //\n\n // TODO: Replace with Hammer or other gesture library\n\n /**\n * Handles touch start events on the overlay host element (wrapper).\n * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n */\n private _handleOverlayTouchStart = (event: TouchEvent) => {\n if (this.menu._isAnimating) {\n return;\n }\n\n this._touchStartTime = new Date().getTime();\n\n this._touchStartX = event.changedTouches[0].clientX;\n this._touchStartY = event.changedTouches[0].clientY;\n this._touchCurrentX = this._touchStartX;\n this._touchCurrentY = this._touchStartY;\n this._touchTranslateX = 0;\n this._touchMaxX =\n this._overlayRef.hostElement.getBoundingClientRect().width;\n this._touchLockedX = null;\n this._touchTouchingElement = true;\n };\n\n private _handleOverlayTouchMove = (event: TouchEvent) => {\n if (!this._touchTouchingElement || this.menu._isAnimating) {\n return;\n }\n\n if (this._touchLockedX) {\n return;\n }\n\n this._touchCurrentX = event.changedTouches[0].clientX;\n this._touchCurrentY = event.changedTouches[0].clientY;\n\n // Lock X-axis pan if initiating pan on Y-axis\n if (this._touchLockedX === null) {\n const dy = Math.abs(this._touchCurrentY - this._touchStartY);\n const dx = Math.abs(this._touchCurrentX - this._touchStartX);\n if (dx > 10 || dy > 10) {\n this._touchLockedX = dy > dx;\n return;\n }\n }\n\n // Restrict to right pan/swipe and make menu movement extremely slow when\n // moved past allowed limits.\n const menuMargin = 16;\n this._touchTranslateX = this._touchCurrentX - this._touchStartX;\n\n if (this._touchTranslateX < 0) {\n this._touchTranslateX = this.easeOutExpo(\n this._touchTranslateX,\n 0,\n -menuMargin / 2,\n this._touchMaxX * -4\n );\n } else if (!this._parentMenu) {\n this._touchTranslateX = this.easeOutExpo(\n this._touchTranslateX,\n 0,\n menuMargin / 2,\n this._touchMaxX * 4\n );\n } else if (this._touchTranslateX > this._touchMaxX) {\n this._touchTranslateX = this.easeOutExpo(\n this._touchTranslateX - this._touchMaxX,\n this._touchMaxX,\n menuMargin / 2,\n this._touchMaxX * 4\n );\n }\n\n // Set new sub menu position and tell any parent to follow;\n this.animateSetMenuPosition(this._touchTranslateX);\n };\n\n private _handleOverlayTouchEnd = () => {\n if (!this._touchTouchingElement || this.menu._isAnimating) {\n return;\n }\n\n this._touchTranslateX = this._touchCurrentX - this._touchStartX;\n if (this._touchTranslateX === 0) {\n return;\n }\n\n this._touchTouchingElement = false;\n this._touchTimeTaken = new Date().getTime() - this._touchStartTime;\n\n const swipeMinDistance = 10;\n const swipeMinTime = 50;\n const swipeMaxTime = 300;\n\n const pannedHalfwayRight = this._touchTranslateX > this._touchMaxX / 2;\n const swipedRight =\n this._touchTranslateX > this._touchMaxX / swipeMinDistance &&\n this._touchTimeTaken > swipeMinTime &&\n this._touchTimeTaken < swipeMaxTime;\n\n if (!!this._parentMenu && (swipedRight || pannedHalfwayRight)) {\n // Close submenu keydown-style: close only this menu and leave parents open\n this.menu.closed.emit('keydown');\n } else {\n // Pan ended but the menu was not moved far enough. Reset menus to\n // where they were before panning stared.\n this.animateOpenMenu();\n }\n };\n\n /**\n * Remove touch device pan/swipe listeners from overlay host element\n */\n private addOverlayListeners() {\n this._overlayRef.hostElement.addEventListener(\n 'touchstart',\n this._handleOverlayTouchStart,\n passiveEventListenerOptions\n );\n\n this._overlayRef.hostElement.addEventListener(\n 'touchmove',\n this._handleOverlayTouchMove,\n passiveEventListenerOptions\n );\n\n this._overlayRef.hostElement.addEventListener(\n 'touchend',\n this._handleOverlayTouchEnd,\n passiveEventListenerOptions\n );\n }\n\n /**\n * Remove touch device pan/swipe listeners from overlay host element\n */\n private removeOverlayListeners() {\n this._overlayRef.hostElement.removeEventListener(\n 'touchstart',\n this._handleOverlayTouchStart,\n passiveEventListenerOptions\n );\n\n this._overlayRef.hostElement.removeEventListener(\n 'touchmove',\n this._handleOverlayTouchMove,\n passiveEventListenerOptions\n );\n\n this._overlayRef.hostElement.removeEventListener(\n 'touchend',\n this._handleOverlayTouchEnd,\n passiveEventListenerOptions\n );\n }\n\n /**\n * Standard exponential ease out function\n *\n * @param current Current value\n * @param offset Offset value, to which calculated value will be added\n * @param target The target value\n * @param end Value to which current value is compared\n */\n private easeOutExpo(\n current: number,\n offset: number,\n target: number,\n end: number\n ): number {\n return current === end\n ? offset + target\n : target * (-Math.pow(2, (-10 * current) / end) + 1) + offset;\n }\n\n /**\n * Sets the scroll strategy for the overlay based on the client output device and menu scroll strategy input.\n *\n * @param {OutputDeviceTypes} clientOutputDevice - The type of client output device (e.g., 'touch').\n * @param {'reposition' | 'close'} menuScrollStrategyInput - The scroll strategy input for the menu.\n * @returns {ScrollStrategy} The appropriate scroll strategy for the overlay.\n */\n private setScrollStrategyToOverylay(\n clientOutputDevice: OutputDeviceTypes,\n menuScrollStrategyInput: 'reposition' | 'close'\n ): ScrollStrategy {\n if (clientOutputDevice === 'touch') {\n return undefined;\n } else {\n if (menuScrollStrategyInput === 'close') {\n return this._overlay.scrollStrategies.close();\n } else if (menuScrollStrategyInput === 'reposition') {\n return this._overlay.scrollStrategies.reposition();\n } else {\n return undefined;\n }\n }\n }\n}\n","import { Directive, Input } from '@angular/core';\n\n@Directive({\n selector: '[graniteDivider]',\n standalone: false,\n exportAs: 'graniteDivider',\n host: {\n '[class.granite-divider-top]': 'dividerDirection === \"top\"',\n '[class.granite-divider-bottom]': 'dividerDirection === \"bottom\"',\n },\n})\nexport class GraniteDividerDirective {\n @Input()\n dividerDirection: string = 'top';\n}\n","import { NgModule } from '@angular/core';\nimport { GraniteIconComponent } from './icon.component';\n\n@NgModule({\n declarations: [GraniteIconComponent],\n exports: [GraniteIconComponent],\n})\nexport class GraniteIconModule {}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[graniteTitle]',\n standalone: false,\n exportAs: 'graniteTitle',\n host: {\n '[class.granite-title]': 'true',\n },\n})\nexport class GraniteTitleDirective {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\n\nimport { GraniteMenuComponent } from './menu.component';\nimport { GraniteMenuItemComponent } from './menu-item.component';\nimport { GraniteMenuTriggerForDirective } from './menu-trigger-for.directive';\nimport { GraniteMenuTouchCloseComponent } from './menu-touch-close.component';\nimport { GraniteMenuTouchTitleItemComponent } from './menu-touch-title.component';\nimport { GraniteDividerDirective } from './divider.directive';\nimport { GraniteIconModule } from '../icon/icon.module';\nimport { GraniteTitleDirective } from './title.directive';\n\n@NgModule({\n declarations: [\n GraniteMenuComponent,\n GraniteMenuItemComponent,\n GraniteMenuTriggerForDirective,\n GraniteMenuTouchCloseComponent,\n GraniteMenuTouchTitleItemComponent,\n GraniteDividerDirective,\n GraniteTitleDirective,\n ],\n imports: [CommonModule, OverlayModule, PortalModule, GraniteIconModule],\n exports: [\n GraniteMenuComponent,\n GraniteMenuItemComponent,\n GraniteMenuTriggerForDirective,\n GraniteMenuTouchCloseComponent,\n GraniteMenuTouchTitleItemComponent,\n GraniteDividerDirective,\n GraniteTitleDirective,\n ],\n})\nexport class GraniteMenuModule {}\n","import {\n ComponentHarness,\n TestKey,\n TestElement,\n BaseHarnessFilters,\n HarnessPredicate,\n} from '@angular/cdk/testing';\n\n/**\n * Test harness for menu component\n *\n * Stripped-down version of the Angular Material menu test harness (.../menu/menu-harness.ts)\n * just to get things going.\n */\nexport class GraniteMenuHarness extends ComponentHarness {\n /**\n * The selector for the host element of a `MenuComponent` instance,\n * i.e. the button element used to open the menu.\n */\n static hostSelector = '.granite-menu-trigger';\n\n private _documentRootLocator = this.documentRootLocatorFactory();\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MenuHarness` that meets\n * certain criteria.\n * @param options Options for filtering which menu item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(\n options: GraniteMenuHarnessFilters = {}\n ): HarnessPredicate<GraniteMenuHarness> {\n return new HarnessPredicate(GraniteMenuHarness, options).addOption(\n 'text',\n options.text,\n /* @dynamic */ (harness, text) =>\n HarnessPredicate.stringMatches(harness.getText(), text)\n );\n }\n\n /** Gets the text of the menu trigger */\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n\n /** Opens the menu, unless already open */\n async open(): Promise<void> {\n if (!(await this.isOpen())) {\n await (await this.host()).click();\n // This is necessary so that we wait for the opening animation to finish.\n return this.forceStabilize();\n }\n }\n\n /** Closes the menu, unless already closed */\n async close(): Promise<void> {\n await (await this._getMenuPanel())?.sendKeys(TestKey.ESCAPE);\n // This is necessary so that we wait for the closing animation to finish.\n return this.forceStabilize();\n }\n\n /** Whether the menu is open */\n async isOpen(): Promise<boolean> {\n return !!(await this._getMenuPanel());\n }\n\n /**\n * Gets a list of `GraniteMenuItemHarness` representing the items in the menu.\n * @param filters Optionally filters which menu items are included.\n */\n async getItems(\n filters: Omit<GraniteMenuItemHarnessFilters, 'ancestor'> = {}\n ): Promise<GraniteMenuItemHarness[]> {\n const panelId = await this._getPanelId();\n if (panelId) {\n return this._documentRootLocator.locatorForAll(\n GraniteMenuItemHarness.with({ ...filters, ancestor: `#${panelId}` })\n )();\n }\n return [];\n }\n\n /** Gets the menu panel (popup) associated with the menu */\n private async _getMenuPanel(): Promise<TestElement | null> {\n const panelId = await this._getPanelId();\n return panelId\n ? this._documentRootLocator.locatorForOptional(`#${panelId}`)()\n : null;\n }\n\n /** Gets the id of the menu panel (popup) associated with this menu */\n private async _getPanelId(): Promise<string | null> {\n const panelId = await (await this.host()).getAttribute('aria-controls');\n return panelId || null;\n }\n}\n\nexport class GraniteMenuItemHarness extends ComponentHarness {\n /** The selector for the host element of a `MenuItemComponent` instance. */\n static hostSelector = '.granite-menu-item';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `GraniteMenuItemHarness` that meets\n * certain criteria.\n * @param options Options for filtering which menu item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(\n options: GraniteMenuItemHarnessFilters = {}\n ): HarnessPredicate<GraniteMenuItemHarness> {\n return new HarnessPredicate(GraniteMenuItemHarness, options).addOption(\n 'text',\n options.text,\n /* @dynamic */ (harness, text) =>\n HarnessPredicate.stringMatches(harness.getText(), text)\n );\n }\n\n /** Gets the text of the menu item. */\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n\n /** Whether this item has a submenu. */\n async hasSubmenu(): Promise<boolean> {\n return (await this.host()).matchesSelector(GraniteMenuHarness.hostSelector);\n }\n\n /** Gets the submenu associated with this menu item, or null if none. */\n async getSubmenu(): Promise<GraniteMenuHarness | null> {\n if (await this.hasSubmenu()) {\n return new GraniteMenuHarness(this.locatorFactory);\n }\n return null;\n }\n\n /** Clicks the menu item. */\n async click(): Promise<void> {\n await (await this.host()).click();\n // This is necessary so that we wait for the opening animation to finish. (i.e. if it opens another menu)\n return this.forceStabilize();\n }\n}\n\n/** A set of criteria that can be used to filter a list of `MenuHarness` instances. */\nexport interface GraniteMenuHarnessFilters extends BaseHarnessFilters {\n /** Only find instances whose text matches the given value. */\n text?: string | RegExp;\n}\n\n/** A set of criteria that can be used to filter a list of `GraniteMenuItemHarness` instances. */\nexport interface GraniteMenuItemHarnessFilters extends BaseHarnessFilters {\n /** Only find instances whose text matches the given value. */\n text?: string | RegExp;\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n Output,\n OnChanges,\n SimpleChanges,\n EventEmitter,\n ElementRef,\n ViewChild,\n} from '@angular/core';\n\nimport { Position } from '../core/types';\n\n@Component({\n selector: 'granite-toggle-switch',\n standalone: false,\n exportAs: 'graniteToggleSwitch',\n host: {\n class: 'granite-toggle-switch',\n '[class.granite-toggle-switch-checked]': 'checked',\n '[class.granite-toggle-switch-disabled]': 'disabled',\n '[class.granite-toggle-switch-readonly]': 'readonly',\n '[class.granite-toggle-switch-label-before]': '_positionBefore',\n },\n templateUrl: './toggle-switch.component.html',\n styleUrls: ['./toggle-switch.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteToggleSwitchComponent implements OnChanges {\n @Input()\n id: string | null = null;\n\n @Input()\n checked: boolean = false;\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n readonly: boolean = false;\n\n @Input()\n labelPosition: Position = 'after';\n\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n\n @Output()\n readonly valueChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @Output()\n readonly toggleChange: EventEmitter<void> = new EventEmitter<void>();\n\n @Output()\n readonly toggleBlur: EventEmitter<void> = new EventEmitter<void>();\n\n @ViewChild('input')\n private _inputElement: ElementRef<HTMLInputElement>;\n\n _positionBefore: boolean = false;\n _toggleSwitchDisabled: boolean = false;\n\n constructor(private _focusMonitor: FocusMonitor) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.checked) {\n this.checked = coerceBooleanProperty(changes.checked.currentValue);\n }\n\n if (changes.disabled) {\n this.disabled = coerceBooleanProperty(changes.disabled.currentValue);\n }\n\n if (changes.readonly) {\n this.readonly = coerceBooleanProperty(changes.readonly.currentValue);\n }\n\n if (changes.labelPosition != null) {\n this._positionBefore =\n changes.labelPosition.currentValue != null &&\n changes.labelPosition.currentValue === 'before';\n }\n\n // conditional checker if the control is either/both in readonly or disabled state\n if (changes.disabled || changes.readonly) {\n if (this.disabled || this.readonly) {\n this._toggleSwitchDisabled = true;\n } else this._toggleSwitchDisabled = false;\n }\n }\n\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n this._focusMonitor.focusVia(this._getInputElement(), origin, options);\n }\n\n _onBlur(): void {\n this.toggleBlur.emit();\n }\n\n _toggleSwitchChange(): void {\n this.checked = this._getInputElement().checked;\n this.valueChange.emit(this.checked);\n }\n\n _toggleSwitchClick(): void {\n this.toggleChange.emit();\n }\n\n private _getInputElement(): HTMLInputElement {\n return this._inputElement.nativeElement;\n }\n}\n","<label [attr.for]=\"id\" class=\"granite-toggle-switch-label\">\n <div class=\"granite-toggle-switch-bar\">\n <input\n #input\n [id]=\"id\"\n class=\"granite-toggle-switch-input cdk-visually-hidden\"\n role=\"switch\"\n type=\"checkbox\"\n [attr.aria-checked]=\"checked.toString()\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [checked]=\"checked\"\n [disabled]=\"_toggleSwitchDisabled\"\n [readonly]=\"readonly\"\n (click)=\"_toggleSwitchClick()\"\n (change)=\"_toggleSwitchChange()\"\n (blur)=\"_onBlur()\"\n />\n <div class=\"granite-toggle-switch-thumb\"></div>\n </div>\n <span class=\"granite-toggle-switch-text\"><ng-content></ng-content></span>\n</label>\n","import { NgModule } from '@angular/core';\nimport { GraniteToggleSwitchComponent } from './toggle-switch.component';\n\n@NgModule({\n declarations: [GraniteToggleSwitchComponent],\n exports: [GraniteToggleSwitchComponent],\n})\nexport class GraniteToggleSwitchModule {}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n ElementRef,\n} from '@angular/core';\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport { Position } from '../core/types';\n@Component({\n selector: 'granite-radio-button',\n standalone: false,\n exportAs: 'graniteRadioButton',\n host: {\n class: 'granite-radio-button',\n '[class.granite-radio-button-disabled]': 'disabled',\n '[class.granite-radio-button-label-before]': '_positionBefore',\n '[class.granite-radio-button-checked]': 'checked',\n '[class.granite-radio-button-readonly]': 'readonly',\n },\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteRadioButtonComponent implements OnChanges, OnDestroy {\n // Selected value for the radio group.\n @Input()\n value: any;\n\n @Input()\n id: string | null = null;\n\n @Input()\n name: string;\n\n @Input()\n checked: boolean = false;\n\n @Input()\n required: boolean = false;\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n readonly: boolean = false;\n\n @Input()\n labelPosition: Position = 'after';\n\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n\n @Output()\n readonly radioChange: EventEmitter<any> = new EventEmitter();\n\n @Output()\n readonly radioBlur: EventEmitter<void> = new EventEmitter<void>();\n\n @ViewChild('input')\n private _inputElement: ElementRef<HTMLInputElement>;\n\n _positionBefore: boolean = false;\n _radioDisabled: boolean = false;\n\n private _removeUniqueSelectionListenerFn: () => void;\n\n constructor(\n private _focusMonitor: FocusMonitor,\n private _radioDispatcher: UniqueSelectionDispatcher\n ) {\n this._removeUniqueSelectionListenerFn = _radioDispatcher.listen(\n (id: string, name: string) => {\n if (id !== this.id && name === this.name) {\n this.checked = false;\n }\n }\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.checked) {\n this.checked = coerceBooleanProperty(changes.checked.currentValue);\n }\n\n if (changes.required) {\n this.required = coerceBooleanProperty(changes.required.currentValue);\n }\n\n if (changes.readonly) {\n this.readonly = coerceBooleanProperty(changes.readonly.currentValue);\n }\n\n if (changes.disabled) {\n this.disabled = coerceBooleanProperty(changes.disabled.currentValue);\n }\n\n if (changes.labelPosition != null) {\n this._positionBefore =\n changes.labelPosition.currentValue != null &&\n changes.labelPosition.currentValue === 'before';\n }\n if (changes.disabled || changes.readonly) {\n if (this.disabled || this.readonly) {\n this._radioDisabled = true;\n } else this._radioDisabled = false;\n }\n }\n\n ngOnDestroy(): void {\n if (this._removeUniqueSelectionListenerFn instanceof Function) {\n this._removeUniqueSelectionListenerFn();\n }\n }\n\n // Focuses the radio button.\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n this._focusMonitor.focusVia(this._getInputElement(), origin, options);\n }\n\n _radioChange(element: Partial<HTMLInputElement>): void {\n this.checked = this._getInputElement().checked;\n // Notify all radio buttons with the same name to un-check\n this._radioDispatcher.notify(this.id, this.name);\n this.radioChange.emit(element?.value);\n }\n\n _onBlur(): void {\n this.radioBlur.emit();\n }\n\n private _getInputElement(): HTMLInputElement {\n return this._inputElement.nativeElement;\n }\n}\n","<label class=\"granite-radio-button-label\">\n <div class=\"granite-radio-button-outer-circle\">\n <input\n #input\n [id]=\"id\"\n class=\"granite-radio-button-input cdk-visually-hidden\"\n type=\"radio\"\n [attr.name]=\"name\"\n [disabled]=\"_radioDisabled\"\n [checked]=\"checked\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-checked]=\"checked.toString()\"\n [value]=\"value\"\n (change)=\"_radioChange($event.target)\"\n (blur)=\"_onBlur()\"\n />\n <div class=\"granite-radio-button-inner-circle\"></div>\n </div>\n <span class=\"granite-radio-button-text\">\n <ng-content></ng-content>\n </span>\n</label>\n","import { Directive, Input } from '@angular/core';\nimport { Layout } from './types';\n\n@Directive()\nexport abstract class GraniteRadioCheckboxBase {\n @Input()\n layout: Layout = 'horizontal';\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { GraniteRadioCheckboxBase } from '../core/radio-checkbox-base';\n\n@Component({\n selector: 'granite-radio-group',\n standalone: false,\n host: {\n class: 'granite-radio-group',\n '[attr.role]': '\"radiogroup\"',\n '[attr.aria-labelledby]': 'ariaLabelledby',\n '[class.granite-radio-checkbox-base-layout-horizontal]':\n 'layout === \"horizontal\"',\n },\n\n template: '<ng-content></ng-content>',\n styleUrls: ['./radio-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteRadioGroupComponent extends GraniteRadioCheckboxBase {}\n","import { NgModule } from '@angular/core';\nimport { GraniteRadioButtonComponent } from './radio-button.component';\nimport { GraniteRadioGroupComponent } from './radio-group.component';\n\n@NgModule({\n declarations: [GraniteRadioButtonComponent, GraniteRadioGroupComponent],\n exports: [GraniteRadioButtonComponent, GraniteRadioGroupComponent],\n})\nexport class GraniteRadioButtonModule {}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n Output,\n OnChanges,\n SimpleChanges,\n EventEmitter,\n ElementRef,\n ViewChild,\n} from '@angular/core';\nimport { Position } from '../core/types';\n\n@Component({\n selector: 'granite-checkbox',\n standalone: false,\n exportAs: 'graniteCheckbox',\n host: {\n class: 'granite-checkbox',\n '[class.granite-checkbox-checked]': 'checked',\n '[class.granite-checkbox-disabled]': 'disabled',\n '[class.granite-checkbox-readonly]': 'readonly',\n '[class.granite-checkbox-label-before]': '_positionBefore',\n },\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteCheckboxComponent implements OnChanges {\n @Input()\n id: string | null = null;\n\n @Input()\n checked: boolean = false;\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n readonly: boolean = false;\n\n @Input()\n labelPosition: Position = 'after';\n\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n\n @Output()\n readonly valueChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @Output()\n readonly checkboxChange: EventEmitter<void> = new EventEmitter<void>();\n\n @Output()\n readonly checkboxBlur: EventEmitter<void> = new EventEmitter<void>();\n\n @ViewChild('input')\n private _inputElement: ElementRef<HTMLInputElement>;\n\n _positionBefore: boolean = false;\n _checkboxDisabled: boolean = false;\n\n constructor(private _focusMonitor: FocusMonitor) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.checked) {\n this.checked = coerceBooleanProperty(changes.checked.currentValue);\n }\n\n if (changes.disabled) {\n this.disabled = coerceBooleanProperty(changes.disabled.currentValue);\n }\n\n if (changes.readonly) {\n this.readonly = coerceBooleanProperty(changes.readonly.currentValue);\n }\n\n if (changes.labelPosition != null) {\n this._positionBefore =\n changes.labelPosition.currentValue != null &&\n changes.labelPosition.currentValue === 'before';\n }\n\n if (changes.disabled || changes.readonly) {\n if (this.disabled || this.readonly) {\n this._checkboxDisabled = true;\n } else this._checkboxDisabled = false;\n }\n }\n\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n this._focusMonitor.focusVia(this._getInputElement(), origin, options);\n }\n\n _onBlur(): void {\n this.checkboxBlur.emit();\n }\n\n _checkboxChange(): void {\n this.checked = this._getInputElement().checked;\n this.valueChange.emit(this.checked);\n }\n\n _checkboxClick(): void {\n this.checkboxChange.emit();\n }\n\n private _getInputElement(): HTMLInputElement {\n return this._inputElement.nativeElement;\n }\n}\n","<label [attr.for]=\"id\" class=\"granite-checkbox-label\">\n <div class=\"granite-checkbox-box\">\n <input\n #input\n [id]=\"id\"\n class=\"granite-checkbox-input cdk-visually-hidden\"\n role=\"checkbox\"\n type=\"checkbox\"\n [attr.aria-checked]=\"checked.toString()\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [checked]=\"checked\"\n [disabled]=\"_checkboxDisabled\"\n [readonly]=\"readonly\"\n (click)=\"_checkboxClick()\"\n (change)=\"_checkboxChange()\"\n (blur)=\"_onBlur()\"\n />\n <div class=\"granite-checkbox-check\"></div>\n </div>\n <span class=\"granite-checkbox-text\"><ng-content></ng-content></span>\n</label>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { GraniteRadioCheckboxBase } from '../core/radio-checkbox-base';\n\n@Component({\n selector: 'granite-checkbox-group',\n standalone: false,\n host: {\n class: 'granite-checkbox-group',\n '[attr.role]': '\"group\"',\n '[attr.aria-labelledby]': 'ariaLabelledby',\n '[class.granite-radio-checkbox-base-layout-horizontal]':\n 'layout === \"horizontal\"',\n },\n\n template: '<ng-content></ng-content>',\n styleUrls: ['./checkbox-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteCheckboxGroupComponent extends GraniteRadioCheckboxBase {}\n","import { NgModule } from '@angular/core';\nimport { GraniteCheckboxComponent } from './checkbox.component';\nimport { GraniteCheckboxGroupComponent } from './checkbox-group.component';\n\n@NgModule({\n declarations: [GraniteCheckboxComponent, GraniteCheckboxGroupComponent],\n exports: [GraniteCheckboxComponent, GraniteCheckboxGroupComponent],\n})\nexport class GraniteCheckboxModule {}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Input, OnChanges, SimpleChanges, Directive } from '@angular/core';\n\ntype Constructor<T> = new (...args: any[]) => T;\n\nexport const disabledMixin = <T extends Constructor<Record<string, unknown>>>(\n Base: T = class {} as any\n) => {\n @Directive()\n // eslint-disable-next-line @angular-eslint/directive-class-suffix\n class Derived extends Base implements OnChanges {\n @Input()\n disabled: boolean = false;\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.disabled) {\n this.disabled = coerceBooleanProperty(changes.disabled.currentValue);\n }\n }\n }\n\n return Derived;\n};\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Input,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\n\nimport { disabledMixin } from '../core/common-behaviors/disabled';\n\nexport enum ButtonSelectors {\n graniteButton = 'granite-button',\n granitePrimaryButton = 'granite-primary-button',\n graniteFlatButton = 'granite-flat-button',\n graniteToolbarButton = 'granite-toolbar-button',\n}\n\nconst ButtonComponentMixin = disabledMixin();\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: `button[graniteButton],\n button[granitePrimaryButton],\n button[graniteFlatButton],\n button[graniteToolbarButton]\n `,\n host: {\n class: 'granite-button-base',\n '[class.granite-button-disabled]': 'disabled',\n '[class.granite-button-toggled]': '_buttonToggled',\n '[attr.disabled]': 'disabled || null',\n },\n exportAs: 'graniteButton',\n template: '<ng-content></ng-content>',\n styleUrls: ['./button.component.scss'],\n standalone: false,\n inputs: ['disabled'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteButtonComponent\n extends ButtonComponentMixin\n implements OnChanges\n{\n @Input()\n toggled: boolean = false;\n\n _buttonToggled: boolean = false;\n\n constructor(\n protected _focusMonitor: FocusMonitor,\n protected _elementRef: ElementRef\n ) {\n super();\n\n for (const selector of Object.keys(ButtonSelectors)) {\n if (this._getHostElement().hasAttribute(selector)) {\n this._getHostElement().classList.add(ButtonSelectors[selector]);\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n super.ngOnChanges(changes);\n\n if (changes.toggled) {\n this._buttonToggled = coerceBooleanProperty(changes.toggled.currentValue);\n }\n }\n\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n this._focusMonitor.focusVia(this._getHostElement(), origin, options);\n }\n\n private _getHostElement(): HTMLButtonElement | HTMLAnchorElement {\n return this._elementRef.nativeElement;\n }\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: `a[graniteButton],\n a[graniteFlatButton]`,\n host: {\n class: 'granite-button-base',\n '[attr.tabindex]': 'disabled ? -1 : 0',\n '[class.granite-button-disabled]': 'disabled',\n },\n exportAs: 'graniteAnchor',\n template: '<ng-content></ng-content>',\n styleUrls: ['./button.component.scss'],\n standalone: false,\n inputs: ['disabled'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteAnchorComponent\n extends GraniteButtonComponent\n implements OnChanges\n{\n constructor(\n protected _focusMonitor: FocusMonitor,\n protected _elementRef: ElementRef\n ) {\n super(_focusMonitor, _elementRef);\n }\n\n @HostListener('click', ['$event'])\n _anchorClick(event: Event): void {\n if (this.disabled) {\n event.preventDefault();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n super.ngOnChanges(changes);\n }\n}\n","import { NgModule } from '@angular/core';\nimport {\n GraniteAnchorComponent,\n GraniteButtonComponent,\n} from './button.component';\n\n@NgModule({\n declarations: [GraniteButtonComponent, GraniteAnchorComponent],\n exports: [GraniteButtonComponent, GraniteAnchorComponent],\n})\nexport class GraniteButtonModule {}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nconst GRANITE_INPUT_INCLUDES = ['text', 'number', 'password', 'textarea'];\n\n@Component({\n selector: 'granite-input-field',\n exportAs: 'graniteInputField',\n templateUrl: './input-field.component.html',\n styleUrls: ['./input-field.component.scss'],\n standalone: false,\n host: {\n class: 'granite-input-field',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteInputFieldComponent implements OnInit, OnChanges {\n @Input()\n id: string | null = null;\n\n @Input()\n name: string | null = null;\n\n @Input()\n type: string = 'text';\n\n @Input()\n value: string | number = '';\n\n @Input()\n required: boolean = false;\n\n @Input()\n readonly: boolean = false;\n\n @Input()\n invalid: boolean = false;\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n placeholder: string = '';\n\n @Input()\n prefixicon: string;\n\n @Input()\n maxlength: number = 255;\n\n @Input()\n countcharacters: boolean = false;\n\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n\n @Output()\n readonly valueChange: EventEmitter<string> = new EventEmitter<string>();\n\n @ViewChild('input')\n private _inputElement: ElementRef<HTMLInputElement>;\n\n @ViewChild('textarea')\n private _textareaElement: ElementRef<HTMLTextAreaElement>;\n\n _supported: boolean = true;\n _empty: boolean = false;\n _passwordFieldIcon: string = 'view';\n _passwordField: boolean = false;\n _currentCharCount = 0;\n private _passwordToggled: boolean = false;\n private _lastEmittedValue: string = '';\n\n constructor(private _focusMonitor: FocusMonitor) {}\n\n ngOnInit(): void {\n this._validateType();\n\n this._passwordField = this.type == 'password';\n this._empty = this.value == null || this.value === '';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.required) {\n this.required = coerceBooleanProperty(changes.required.currentValue);\n }\n\n if (changes.readonly) {\n this.readonly = coerceBooleanProperty(changes.readonly.currentValue);\n }\n\n if (changes.invalid) {\n this.invalid = coerceBooleanProperty(changes.invalid.currentValue);\n }\n\n if (changes.disabled) {\n this.disabled = coerceBooleanProperty(changes.disabled.currentValue);\n }\n\n if (changes.countcharacters) {\n this.countcharacters = coerceBooleanProperty(\n changes.countcharacters.currentValue\n );\n }\n\n if (changes.value) {\n this._empty = this.value == null || this.value === '';\n }\n\n if (changes.value || changes.maxlength || changes.countcharacters) {\n this._applyCharacterCount(this.value?.toString());\n }\n\n if (changes.type) {\n this._validateType();\n }\n }\n\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n if (this.type === 'text') {\n this._focusMonitor.focusVia(this._getInputElement(), origin, options);\n } else if (this.type === 'textarea') {\n this._focusMonitor.focusVia(this._getTextareaElement(), origin, options);\n }\n }\n\n _togglePassword(): void {\n if (this._passwordToggled) {\n this._passwordToggled = false;\n this.type = 'password';\n this._passwordFieldIcon = 'view';\n } else {\n this._passwordToggled = true;\n this.type = 'text';\n this._passwordFieldIcon = 'view-disabled';\n }\n }\n\n _onInput(event: Event): void {\n const inputEvent = event.target as HTMLInputElement;\n this._applyCharacterCount(inputEvent.value);\n this._empty = inputEvent.value == null || inputEvent.value === '';\n this._emitValueIfChanged(inputEvent.value);\n }\n\n protected _validateType(): void {\n if (GRANITE_INPUT_INCLUDES.indexOf(this.type) < 0) {\n this._supported = false;\n throw Error(\n `Input type \"${this.type}\" isn't supported by graniteInputField.`\n );\n }\n }\n\n private _applyCharacterCount(inputString: string): void {\n if (this.countcharacters && inputString != null) {\n this._currentCharCount = inputString.length;\n\n if (this._currentCharCount > this.maxlength) {\n inputString = inputString.slice(0, this.maxlength);\n this.value = inputString;\n this._emitValueIfChanged(inputString);\n this._currentCharCount = this.maxlength;\n }\n }\n }\n\n private _getInputElement(): HTMLInputElement {\n return this._inputElement.nativeElement;\n }\n\n private _getTextareaElement(): HTMLTextAreaElement {\n return this._textareaElement.nativeElement;\n }\n\n private _emitValueIfChanged(value: string): void {\n if (value !== this._lastEmittedValue) {\n this._lastEmittedValue = value;\n this.valueChange.emit(value);\n }\n }\n}\n","<div\n *ngIf=\"_supported\"\n class=\"granite-input-container\"\n [class.granite-input-disabled]=\"disabled\"\n [class.granite-input-readonly]=\"readonly\"\n [class.granite-input-disabled]=\"disabled\"\n [class.granite-input-readonly]=\"readonly\"\n>\n <div\n class=\"granite-input-top-row\"\n [class.granite-input-required]=\"required\"\n [class.granite-input-empty]=\"_empty\"\n [class.granite-input-disabled]=\"disabled\"\n [class.granite-input-readonly]=\"readonly\"\n [class.granite-input-invalid]=\"invalid\"\n >\n <div\n *ngIf=\"prefixicon\"\n class=\"granite-input-prepend\"\n [class.granite-input-required]=\"required\"\n [class.granite-input-empty]=\"_empty\"\n >\n <granite-icon class=\"granite-input-prepend-icon\">\n {{ prefixicon }}\n </granite-icon>\n </div>\n\n <ng-container\n *ngIf=\"type !== 'textarea'; then inputElement; else textareaElement\"\n ></ng-container>\n\n <ng-template #inputElement>\n <input\n #input\n [id]=\"id\"\n class=\"granite-input-base\"\n [class.granite-input-invalid]=\"invalid\"\n [class.granite-input-empty]=\"_empty\"\n [name]=\"name\"\n [attr.type]=\"type\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [attr.maxlength]=\"maxlength\"\n [value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-invalid]=\"invalid\"\n (input)=\"_onInput($event)\"\n />\n </ng-template>\n\n <button\n *ngIf=\"_passwordField\"\n class=\"granite-input-append\"\n [class.granite-input-required]=\"required\"\n [class.granite-input-empty]=\"_empty\"\n (click)=\"_togglePassword()\"\n >\n <granite-icon class=\"granite-input-password-toggle-icon\">\n {{ _passwordFieldIcon }}\n </granite-icon>\n </button>\n\n <ng-container *ngIf=\"!_passwordField\">\n <ng-content select=\"[graniteInputSuffixButton]\"></ng-content>\n </ng-container>\n\n <ng-template #textareaElement>\n <textarea\n #textarea\n [id]=\"id\"\n class=\"granite-input-base granite-text-area\"\n [class.granite-input-invalid]=\"invalid\"\n [class.granite-input-empty]=\"_empty\"\n rows=\"1\"\n [name]=\"name\"\n [attr.type]=\"type\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [attr.maxlength]=\"maxlength\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n (input)=\"_onInput($event)\"\n ></textarea>\n </ng-template>\n </div>\n\n <div *ngIf=\"countcharacters\" class=\"granite-input-bottom-row\">\n <div class=\"granite-input-char-count\">\n {{ _currentCharCount }}/{{ maxlength }}\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteInputFieldComponent } from './input-field.component';\nimport { GraniteIconModule } from '../icon/icon.module';\nimport { GraniteButtonModule } from '../button/button.module';\n\n@NgModule({\n imports: [CommonModule, GraniteIconModule, GraniteButtonModule],\n declarations: [GraniteInputFieldComponent],\n exports: [GraniteInputFieldComponent],\n})\nexport class GraniteInputFieldModule {}\n","import { FocusableOption } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { BACKSPACE, DELETE, SPACE } from '@angular/cdk/keycodes';\nimport {\n Attribute,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n} from '@angular/core';\nimport { take } from 'rxjs/operators';\n\n/** Event fired on an individual `granite-chip` element. */\nexport interface GraniteChipEvent {\n /** The chip the event was fired on. */\n chip: GraniteChipComponent;\n}\n\n/** Event object emitted by GraniteChip when selected or deselected. */\nexport class GraniteChipSelectionChangeEvent {\n /** Reference to the chip that emitted the event. */\n source: GraniteChipComponent;\n /** Whether the chip that emitted the event is selected. */\n selected: boolean;\n /** Whether the selection change was a result of a user interaction. */\n isUserInput: boolean = false;\n}\n\n@Component({\n selector: `granite-chip, granite-input-chip`,\n standalone: false,\n inputs: ['tabIndex'],\n exportAs: 'graniteChip',\n styleUrls: ['./chip.component.scss'],\n templateUrl: './chip.component.html',\n host: {\n class: 'granite-chip',\n '[class.granite-chip-input]': 'inputChip',\n '[class.granite-chip-selectable]': 'selectable',\n '[class.granite-chip-selected]': 'selected',\n '[class.granite-chip-disabled]': 'disabled',\n '[class.granite-chip-invalid]': 'invalid',\n '[class.granite-chip-removable]': '!disabled && (removable || inputChip)',\n '[attr.tabindex]': 'disabled ? null : tabIndex',\n '[attr.role]': 'role',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-label]': 'ariaLabel',\n '[attr.aria-labelledby]': 'ariaLabelledby',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-selected]': 'ariaSelected',\n '(click)': '_handleClick($event)',\n '(keydown)': '_handleKeydown($event)',\n '(blur)': '_blur()',\n '(focus)': 'focus()',\n },\n})\nexport class GraniteChipComponent implements FocusableOption, OnDestroy {\n /** ARIA role that should be applied to the chip. */\n @Input() role: string = 'option';\n\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n\n /** Emitted when the chip is selected or deselected. */\n @Output()\n readonly selectionChange: EventEmitter<GraniteChipSelectionChangeEvent> =\n new EventEmitter<GraniteChipSelectionChangeEvent>();\n\n /** Emitted when a chip is to be removed. */\n @Output() readonly removed: EventEmitter<GraniteChipEvent> =\n new EventEmitter<GraniteChipEvent>();\n\n /** Emitted when the chip is destroyed. */\n @Output() readonly destroyed: EventEmitter<GraniteChipEvent> =\n new EventEmitter<GraniteChipEvent>();\n\n /** Emits when the chip is focused. */\n @Output() readonly chipFocus: EventEmitter<GraniteChipEvent> =\n new EventEmitter<GraniteChipEvent>();\n\n /** Emits when the chip is blurred. */\n @Output() readonly chipBlur: EventEmitter<GraniteChipEvent> =\n new EventEmitter<GraniteChipEvent>();\n\n /** Whether the chip has focus. */\n _hasFocus: boolean = false;\n\n /** Whether the chip list is selectable */\n _chipListSelectable: boolean = true;\n\n /** Whether the chip list is in multi-selection mode. */\n _chipListMultiple: boolean = false;\n\n /** Whether the chip list as a whole is disabled. */\n _chipListDisabled: boolean = false;\n\n tabIndex: number = -1;\n inputChip: boolean = false;\n\n protected _selected: boolean = false;\n protected _selectable: boolean = true;\n protected _disabled: boolean = false;\n protected _removable: boolean = false;\n protected _invalid: boolean = false;\n\n /** Whether the chip is selected. */\n @Input()\n get selected(): boolean {\n return this._selected;\n }\n set selected(value: boolean) {\n const coercedValue = coerceBooleanProperty(value);\n\n if (coercedValue !== this._selected) {\n this._selected = coercedValue;\n }\n }\n\n /** The value of the chip. Defaults to the text content inside `<granite-chip>` tags. */\n @Input()\n get value(): any {\n return this._value != null\n ? this._value\n : this._elementRef.nativeElement.textContent;\n }\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n set value(val: any) {\n this._value = val;\n }\n private _value: any;\n\n /**\n * Whether or not the chip is selectable. When a chip is not selectable,\n * changes to its selected state are always ignored. By default a chip is\n * selectable, and it becomes non-selectable if its parent chip list is\n * not selectable.\n */\n @Input()\n get selectable(): boolean {\n return this._selectable && this._chipListSelectable;\n }\n set selectable(value: boolean) {\n this._selectable = coerceBooleanProperty(value);\n }\n\n /** Whether the chip is disabled. Also the individual chips are disabled when chip list is disabled */\n @Input()\n get disabled(): boolean {\n return this._chipListDisabled || this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n /**\n * Whether the chip can be removed from the list\n */\n @Input()\n get removable(): boolean {\n return this._removable;\n }\n set removable(value: boolean) {\n this._removable = coerceBooleanProperty(value);\n }\n\n /** Whether the chip is in an invalid state. */\n @Input()\n get invalid(): boolean {\n return this._invalid;\n }\n set invalid(value: boolean) {\n this._invalid = coerceBooleanProperty(value);\n }\n\n constructor(\n public _elementRef: ElementRef,\n private _ngZone: NgZone,\n @Optional() private _changeDetectorRef: ChangeDetectorRef,\n @Attribute('tabindex') tabIndex?: string\n ) {\n const inputChipAttrName = 'granite-input-chip';\n const element = this._elementRef.nativeElement as HTMLElement;\n if (\n element.hasAttribute(inputChipAttrName) ||\n element.tagName.toLowerCase() === inputChipAttrName\n ) {\n this.inputChip = true;\n }\n\n this.tabIndex = tabIndex != null ? parseInt(tabIndex) || -1 : -1;\n }\n\n ngOnDestroy(): void {\n this.destroyed.emit({ chip: this });\n }\n\n /** Selects the chip. */\n select(isUserInput: boolean = false): void {\n if (!this._selected) {\n this._selected = true;\n this._dispatchSelectionChange(isUserInput);\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** Deselects the chip. */\n deselect(): void {\n if (this._selected) {\n this._selected = false;\n this._dispatchSelectionChange();\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** Toggles the current selected state of this chip. */\n toggleSelected(isUserInput: boolean = false): boolean {\n this._selected = !this.selected;\n this._dispatchSelectionChange(isUserInput);\n this._changeDetectorRef.markForCheck();\n return this.selected;\n }\n\n /** Allows for programmatic focusing of the chip unless it's disabled. */\n focus(): void {\n if (!this.disabled) {\n if (!this._hasFocus) {\n this._elementRef.nativeElement.focus();\n this.chipFocus.next({ chip: this });\n }\n this._hasFocus = true;\n }\n }\n\n /**\n * Allows for programmatic removal of the chip.\n * Called by the GraniteChipList when the DELETE or BACKSPACE keys are pressed.\n * Informs any listeners of the removal request. Does not remove the chip from the DOM.\n */\n remove(): void {\n if (this.removable || this.inputChip) {\n this.removed.emit({ chip: this });\n }\n }\n\n /** Handles click events on the chip. */\n _handleClick(event: Event): void {\n if (this.disabled) {\n event.preventDefault();\n return;\n }\n if (this.selectable) {\n this.toggleSelected(true);\n }\n }\n\n /** Handle custom key presses. */\n _handleKeydown(event: KeyboardEvent): void {\n if (this.disabled) {\n return;\n }\n\n switch (event.keyCode) {\n case DELETE:\n case BACKSPACE:\n // If the chip is removable, remove the focused chip\n this.remove();\n // Always prevent so page navigation does not occur\n event.preventDefault();\n break;\n case SPACE:\n // If we are selectable, toggle the focused chip\n if (this.selectable) {\n this.toggleSelected(true);\n }\n\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n break;\n }\n }\n\n _handleRemoveClick(event: Event): void {\n this.remove();\n // We need to stop event propagation because otherwise the event will bubble up to the\n // form field and cause the `onContainerClick` method to be invoked. This method would then\n // reset the focused chip that has been focused after chip removal.\n event.stopPropagation();\n event.preventDefault();\n }\n\n _blur(): void {\n // When animations are enabled, Angular may end up removing the chip from the DOM a little\n // earlier than usual, causing it to be blurred and throwing off the logic in the chip list\n // that moves focus not the next item. To work around the issue, we defer marking the chip\n // as not focused until the next time the zone stabilizes.\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n this._ngZone.run(() => {\n this._hasFocus = false;\n this.chipBlur.next({ chip: this });\n });\n });\n }\n\n private _dispatchSelectionChange(isUserInput = false) {\n this.selectionChange.emit({\n source: this,\n isUserInput,\n selected: this._selected,\n });\n }\n\n /** The ARIA selected applied to the chip. */\n get ariaSelected(): string | null {\n // Remove the `aria-selected` when the chip is deselected in single-selection mode, because\n // it adds noise to NVDA users where \"not selected\" will be read out for each chip.\n return this.selectable && (this._chipListMultiple || this.selected)\n ? this.selected.toString()\n : null;\n }\n}\n","<ng-content></ng-content>\n<button\n *ngIf=\"!disabled && (removable || inputChip)\"\n class=\"granite-chip-remove\"\n (click)=\"_handleRemoveClick($event)\"\n>\n <granite-icon\n fontIcon=\"icon-close\"\n class=\"granite-chip-remove-icon\"\n [class.granite-chip-remove-icon-invalid]=\"invalid\"\n ></granite-icon>\n</button>\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DoCheck,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n Self,\n EventEmitter,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroupDirective,\n NgControl,\n NgForm,\n} from '@angular/forms';\nimport { merge, Observable, Subject, Subscription } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\nimport {\n GraniteChipComponent,\n GraniteChipEvent,\n GraniteChipSelectionChangeEvent,\n} from './chip.component';\nimport { GraniteChipTextControl } from './chip-input';\n\nabstract class GraniteChipListBase {\n readonly stateChanges = new EventEmitter<void>();\n\n constructor(\n public _parentForm: NgForm,\n public _parentFormGroup: FormGroupDirective,\n public ngControl: NgControl\n ) {}\n}\n\n// Increasing integer for generating unique ids for chip-list components.\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'granite-chip-list',\n template: `<ng-content></ng-content>`,\n standalone: false,\n exportAs: 'graniteChipList',\n host: {\n class: 'granite-chip-list',\n '[class.granite-chip-list-disabled]': 'disabled',\n '[attr.tabindex]': 'disabled ? null : _tabIndex',\n '[attr.role]': 'role',\n '[attr.aria-label]': 'ariaLabel',\n '[attr.aria-labelledby]': 'ariaLabelledby',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-multiselectable]': 'multiselect',\n '[attr.aria-orientation]': 'ariaOrientation',\n '[id]': '_uid',\n '(focus)': 'focus()',\n '(blur)': '_blur()',\n '(keydown)': '_keydown($event)',\n },\n styleUrls: ['./chip-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteChipListComponent\n extends GraniteChipListBase\n implements ControlValueAccessor, AfterContentInit, DoCheck, OnInit, OnDestroy\n{\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @Input('aria-labelledby')\n ariaLabelledby: string | null = null;\n\n @Input('aria-orientation')\n ariaOrientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /** The chips contained within this chip list. */\n @ContentChildren(GraniteChipComponent, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true,\n })\n chips: QueryList<GraniteChipComponent>;\n\n readonly controlType: string = 'granite-chip-list';\n\n /** Uid of the chip list */\n _uid: string = `granite-chip-list-${nextUniqueId++}`;\n\n /** Tab index for the chip list. */\n _tabIndex = 0;\n\n /**\n * User defined tab index.\n * When it is not null, use user defined tab index. Otherwise use _tabIndex\n */\n _userTabIndex: number | null = null;\n\n /** The FocusKeyManager which handles focus. */\n _keyManager: FocusKeyManager<GraniteChipComponent>;\n\n _selectionModel: SelectionModel<GraniteChipComponent>;\n\n /** The chip input to add more chips */\n protected _chipInput: GraniteChipTextControl;\n\n protected _disabled: boolean = false;\n protected _selectable: boolean = true;\n\n /**\n * When a chip is destroyed, we store the index of the destroyed chip until the chips\n * query list notifies about the update. This is necessary because we cannot determine an\n * appropriate chip that should receive focus until the array of chips updated completely.\n */\n private _lastDestroyedChipIndex: number | null = null;\n\n /** Subject that emits when the component has been destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** Subscription to focus changes in the chips. */\n private _chipFocusSubscription: Subscription | null;\n\n /** Subscription to blur changes in the chips. */\n private _chipBlurSubscription: Subscription | null;\n\n /** Subscription to selection changes in chips. */\n private _chipSelectionSubscription: Subscription | null;\n\n /** Subscription to remove changes in chips. */\n private _chipRemoveSubscription: Subscription | null;\n\n /** The ARIA role applied to the chip list. */\n @Input()\n get role(): string | null {\n if (this._explicitRole) {\n return this._explicitRole;\n }\n\n return this.empty ? null : 'listbox';\n }\n set role(role: string | null) {\n this._explicitRole = role;\n }\n private _explicitRole?: string | null;\n\n /** Whether the user should be allowed to select multiselect chips. */\n @Input()\n get multiselect(): boolean {\n return this._multiple;\n }\n set multiselect(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n this._syncChipsState();\n }\n private _multiple: boolean = false;\n\n /**\n * Whether the chip list is disabled.\n */\n @Input()\n get disabled(): boolean {\n return this.ngControl ? !!this.ngControl.disabled : this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this._syncChipsState();\n }\n\n /**\n * Whether or not this chip list is selectable. When a chip list is not selectable,\n * the selected states for all the chips inside the chip list are always ignored.\n */\n @Input()\n get selectable(): boolean {\n return this._selectable;\n }\n set selectable(value: boolean) {\n this._selectable = coerceBooleanProperty(value);\n\n if (this.chips) {\n this.chips.forEach(\n (chip) => (chip._chipListSelectable = this._selectable)\n );\n }\n }\n\n @Input()\n set tabindex(value: number) {\n this._userTabIndex = value;\n this._tabIndex = value;\n }\n\n /** Unique identifier for the chip list. */\n get id(): string {\n return this._chipInput ? this._chipInput.id : this._uid;\n }\n\n /** Whether any chips or the matChipInput inside of this chip-list has focus. */\n get focused(): boolean {\n return (\n (this._chipInput && this._chipInput.focused) || this._hasFocusedChip()\n );\n }\n\n /** Whether the chip list is empty. */\n get empty(): boolean {\n return (\n (!this._chipInput || this._chipInput.empty) &&\n (!this.chips || this.chips.length === 0)\n );\n }\n\n /** The array of selected chips inside chip list. */\n get selected(): GraniteChipComponent[] | GraniteChipComponent {\n return this.multiselect\n ? this._selectionModel?.selected || []\n : this._selectionModel?.selected[0];\n }\n\n /** Combined stream of all of the child chips' selection change events. */\n get chipSelectionChanges(): Observable<GraniteChipSelectionChangeEvent> {\n return merge(...this.chips.map((chip) => chip.selectionChange));\n }\n\n /** Combined stream of all of the child chips' focus change events. */\n get chipFocusChanges(): Observable<GraniteChipEvent> {\n return merge(...this.chips.map((chip) => chip.chipFocus));\n }\n\n /** Combined stream of all of the child chips' blur change events. */\n get chipBlurChanges(): Observable<GraniteChipEvent> {\n return merge(...this.chips.map((chip) => chip.chipBlur));\n }\n\n /** Combined stream of all of the child chips' remove change events. */\n get chipRemoveChanges(): Observable<GraniteChipEvent> {\n return merge(...this.chips.map((chip) => chip.destroyed));\n }\n\n constructor(\n protected _elementRef: ElementRef<HTMLElement>,\n private _changeDetectorRef: ChangeDetectorRef,\n @Optional() private _dir: Directionality,\n @Optional() _parentForm: NgForm,\n @Optional() _parentFormGroup: FormGroupDirective,\n @Optional() @Self() ngControl: NgControl\n ) {\n super(_parentForm, _parentFormGroup, ngControl);\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /** Function when changed */\n _onChange: (value: any) => void = () => {\n // Implemented as part of ControlValueAccessor\n };\n\n /** Function when changed */\n _onTouched: () => void = () => {\n // Implemented as part of ControlValueAccessor\n };\n\n ngAfterContentInit(): void {\n this._keyManager = new FocusKeyManager<GraniteChipComponent>(this.chips)\n .withWrap()\n .withVerticalOrientation()\n .withHomeAndEnd()\n .withHorizontalOrientation(this._dir ? this._dir.value : 'ltr');\n\n if (this._dir) {\n this._dir.change\n .pipe(takeUntil(this._destroyed))\n .subscribe((dir) => this._keyManager.withHorizontalOrientation(dir));\n }\n\n this._keyManager.tabOut.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._allowFocusEscape();\n });\n\n // When the list changes, re-subscribe\n this.chips.changes\n .pipe(startWith(null), takeUntil(this._destroyed))\n .subscribe(() => {\n if (this.disabled) {\n // Since this happens after the content has been\n // checked, we need to defer it to the next tick.\n Promise.resolve().then(() => {\n this._syncChipsState();\n });\n }\n\n this._resetChips();\n\n // Reset chips selected/deselected status\n this._initializeSelection();\n\n // Check to see if we need to update our tab index\n this._updateTabIndex();\n\n // Check to see if we have a destroyed chip and need to refocus\n this._updateFocusForDestroyedChips();\n\n this.stateChanges.next();\n });\n }\n\n ngOnInit(): void {\n this._selectionModel = new SelectionModel<GraniteChipComponent>(\n this.multiselect,\n undefined,\n false\n );\n this.stateChanges.next();\n }\n\n ngDoCheck(): void {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n\n if (this.ngControl.disabled !== this._disabled) {\n this.disabled = !!this.ngControl.disabled;\n }\n }\n }\n\n ngOnDestroy(): void {\n this._destroyed.next();\n this._destroyed.complete();\n this.stateChanges.complete();\n\n this._dropSubscriptions();\n }\n\n /** Associates an HTML input element with this chip list. */\n registerInput(inputElement: GraniteChipTextControl): void {\n this._chipInput = inputElement;\n\n // We use this attribute to match the chip list to its input in test harnesses.\n // Set the attribute directly here to avoid \"changed after checked\" errors.\n this._elementRef.nativeElement.setAttribute(\n 'data-granite-chip-input',\n inputElement.id\n );\n }\n\n // Implemented as part of ControlValueAccessor.\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n writeValue(value: any): void {\n if (this.chips) {\n this._setSelectionByValue(value, false);\n }\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.stateChanges.next();\n }\n\n /**\n * Focus chip list when click on the container.\n */\n onContainerClick(event: MouseEvent): void {\n if (!this._originatesFromChip(event)) {\n this.focus();\n }\n }\n\n /**\n * Focuses the first non-disabled chip in this chip list, or the associated input when there\n * are no eligible chips.\n */\n focus(options?: FocusOptions): void {\n if (this.disabled) {\n return;\n }\n\n // Focus on first element if there's no chipInput inside chip-list\n if (this._chipInput && this._chipInput.focused) {\n // do nothing\n } else if (this.chips.length > 0) {\n this._keyManager.setFirstItemActive();\n this.stateChanges.next();\n } else {\n this._focusInput(options);\n this.stateChanges.next();\n }\n }\n\n /** Attempt to focus an input if we have one. */\n _focusInput(options?: FocusOptions): void {\n if (this._chipInput) {\n this._chipInput.setFocus(options);\n }\n }\n\n /**\n * Pass events to the keyboard manager. Available here for tests.\n */\n _keydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n\n if (target && target.classList.contains('granite-chip')) {\n this._keyManager.onKeydown(event);\n this.stateChanges.next();\n }\n }\n\n /** When blurred, mark the field as touched when focus moved outside the chip list. */\n _blur(): void {\n if (!this._hasFocusedChip()) {\n this._keyManager.setActiveItem(-1);\n }\n\n if (!this.disabled) {\n if (this._chipInput) {\n // If there's a chip input, we should check whether the focus moved to chip input.\n // If the focus is not moved to chip input, mark the field as touched. If the focus moved\n // to chip input, do nothing.\n // Timeout is needed to wait for the focus() event trigger on chip input.\n setTimeout(() => {\n if (!this.focused) {\n this._markAsTouched();\n }\n });\n } else {\n // If there's no chip input, then mark the field as touched.\n this._markAsTouched();\n }\n }\n }\n\n /** Mark the field as touched */\n _markAsTouched(): void {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n /**\n * Removes the `tabindex` from the chip list and resets it back afterwards, allowing the\n * user to tab out of it. This prevents the list from capturing focus and redirecting\n * it back to the first chip, creating a focus trap, if it user tries to tab away.\n */\n _allowFocusEscape(): void {\n if (this._tabIndex !== -1) {\n this._tabIndex = -1;\n\n setTimeout(() => {\n this._tabIndex = this._userTabIndex || 0;\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n\n /**\n * Check the tab index as you should not be allowed to focus an empty list.\n */\n protected _updateTabIndex(): void {\n // If we have 0 chips, we should not allow keyboard focus\n this._tabIndex = this._userTabIndex || (this.chips.length === 0 ? -1 : 0);\n }\n\n /**\n * If the amount of chips changed, we need to update the\n * key manager state and focus the next closest chip.\n */\n protected _updateFocusForDestroyedChips(): void {\n // Move focus to the closest chip. If no other chips remain, focus the chip-list itself.\n if (this._lastDestroyedChipIndex != null) {\n if (this.chips.length) {\n const newChipIndex = Math.min(\n this._lastDestroyedChipIndex,\n this.chips.length - 1\n );\n this._keyManager.setActiveItem(newChipIndex);\n } else {\n this.focus();\n }\n }\n\n this._lastDestroyedChipIndex = null;\n }\n\n /**\n * Utility to ensure all indexes are valid.\n *\n * @param index The index to be checked.\n * @returns True if the index is valid for our list of chips.\n */\n private _isValidIndex(index: number): boolean {\n return index >= 0 && index < this.chips.length;\n }\n\n private _setSelectionByValue(value: any, isUserInput: boolean = true): void {\n this._clearSelection();\n this.chips.forEach((chip) => chip.deselect());\n\n if (Array.isArray(value)) {\n value.forEach((currentValue) =>\n this._selectValue(currentValue, isUserInput)\n );\n this._sortValues();\n } else {\n const correspondingChip = this._selectValue(value, isUserInput);\n\n // Shift focus to the active item. Note that we shouldn't do this in multiselect\n // mode, because we don't know what chip the user interacted with last.\n if (correspondingChip) {\n if (isUserInput) {\n this._keyManager.setActiveItem(correspondingChip);\n }\n }\n }\n }\n\n /**\n * Finds and selects the chip based on its value.\n * @returns Chip that has the corresponding value.\n */\n private _selectValue(\n value: any,\n isUserInput: boolean = true\n ): GraniteChipComponent | undefined {\n const correspondingChip = this.chips.find((chip) => {\n return chip.value != null && this._compareWith(chip.value, value);\n });\n\n if (correspondingChip) {\n correspondingChip.select(isUserInput);\n this._selectionModel.select(correspondingChip);\n }\n\n return correspondingChip;\n }\n\n private _initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n if (this.ngControl) {\n this._setSelectionByValue(this.ngControl.value, false);\n this.stateChanges.next();\n }\n });\n }\n\n /**\n * Deselects every chip in the list.\n * @param skip Chip that should not be deselected.\n */\n private _clearSelection(skip?: GraniteChipComponent): void {\n this._selectionModel.clear();\n this.chips.forEach((chip) => {\n if (chip !== skip) {\n chip.deselect();\n }\n });\n this.stateChanges.next();\n }\n\n /**\n * Sorts the model values, ensuring that they keep the same\n * order that they have in the panel.\n */\n private _sortValues(): void {\n if (this._multiple) {\n this._selectionModel.clear();\n\n this.chips.forEach((chip) => {\n if (chip.selected) {\n this._selectionModel.select(chip);\n }\n });\n this.stateChanges.next();\n }\n }\n\n private _compareWith = (o1: any, o2: any) => o1 === o2;\n\n private _resetChips(): void {\n this._dropSubscriptions();\n this._listenToChipsFocus();\n this._listenToChipsSelection();\n this._listenToChipsRemoved();\n }\n\n private _dropSubscriptions(): void {\n if (this._chipFocusSubscription) {\n this._chipFocusSubscription.unsubscribe();\n this._chipFocusSubscription = null;\n }\n\n if (this._chipBlurSubscription) {\n this._chipBlurSubscription.unsubscribe();\n this._chipBlurSubscription = null;\n }\n\n if (this._chipSelectionSubscription) {\n this._chipSelectionSubscription.unsubscribe();\n this._chipSelectionSubscription = null;\n }\n\n if (this._chipRemoveSubscription) {\n this._chipRemoveSubscription.unsubscribe();\n this._chipRemoveSubscription = null;\n }\n }\n\n /** Listens to user-generated selection events on each chip. */\n private _listenToChipsSelection(): void {\n this._chipSelectionSubscription = this.chipSelectionChanges.subscribe(\n (event) => {\n event.source.selected\n ? this._selectionModel.select(event.source)\n : this._selectionModel.deselect(event.source);\n\n // For single selection chip list, make sure the deselected value is unselected.\n if (!this.multiselect) {\n this.chips.forEach((chip) => {\n if (!this._selectionModel.isSelected(chip) && chip.selected) {\n chip.deselect();\n }\n });\n }\n }\n );\n }\n\n /** Listens to user-generated selection events on each chip. */\n private _listenToChipsFocus(): void {\n this._chipFocusSubscription = this.chipFocusChanges.subscribe((event) => {\n const chipIndex: number = this.chips.toArray().indexOf(event.chip);\n\n if (this._isValidIndex(chipIndex)) {\n this._keyManager.updateActiveItem(chipIndex);\n }\n this.stateChanges.next();\n });\n\n this._chipBlurSubscription = this.chipBlurChanges.subscribe(() => {\n this._blur();\n this.stateChanges.next();\n });\n }\n\n private _listenToChipsRemoved(): void {\n this._chipRemoveSubscription = this.chipRemoveChanges.subscribe((event) => {\n const chip = event.chip;\n const chipIndex = this.chips.toArray().indexOf(event.chip);\n\n // In case the chip that will be removed is currently focused, we temporarily store\n // the index in order to be able to determine an appropriate sibling chip that will\n // receive focus.\n if (this._isValidIndex(chipIndex) && chip._hasFocus) {\n this._lastDestroyedChipIndex = chipIndex;\n }\n });\n }\n\n /** Checks whether an event comes from inside a chip element. */\n private _originatesFromChip(event: Event): boolean {\n let currentElement = event.target as HTMLElement | null;\n\n while (\n currentElement &&\n currentElement !== this._elementRef.nativeElement\n ) {\n if (currentElement.classList.contains('granite-chip')) {\n return true;\n }\n\n currentElement = currentElement.parentElement;\n }\n\n return false;\n }\n\n /** Checks whether any of the chips is focused. */\n private _hasFocusedChip(): boolean {\n return this.chips && this.chips.some((chip) => chip._hasFocus);\n }\n\n /** Syncs the list's state with the individual chips. */\n private _syncChipsState(): void {\n if (this.chips) {\n this.chips.forEach((chip) => {\n chip._chipListDisabled = this._disabled;\n chip._chipListMultiple = this.multiselect;\n });\n }\n }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { BACKSPACE, ENTER, hasModifierKey, TAB } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { GraniteChipListComponent } from './chip-list.component';\n\nexport interface GraniteChipTextControl {\n /** Unique identifier for the text control. */\n id: string;\n /** The text control's placeholder text. */\n placeholder: string;\n /** Whether the text control has browser focus. */\n focused: boolean;\n /** Whether the text control is empty. */\n empty: boolean;\n /** Focuses the text control. */\n setFocus(options?: FocusOptions): void;\n}\n\n/** Represents an input event on a `graniteChipInput`. */\nexport interface GraniteChipInputEvent {\n /** The native `<input>` element that the event is being fired for. */\n input: HTMLInputElement;\n /** The value of the input. */\n value: string;\n /** Reference to the chip input that emitted the event. */\n chipInput: GraniteChipInputDirective;\n}\n\nlet nextUniqueId = 0;\n\n@Directive({\n selector: 'input[graniteChipInputFor]',\n standalone: false,\n exportAs: 'graniteChipInput, graniteChipInputFor',\n host: {\n class: 'granite-chip-input',\n '[id]': 'id',\n '[attr.disabled]': 'disabled || null',\n '[attr.placeholder]': 'placeholder || null',\n '[attr.aria-required]': 'required || null',\n '(keydown)': '_keydown($event)',\n '(keyup)': '_keyup($event)',\n '(blur)': '_blur()',\n '(focus)': '_focus()',\n '(input)': '_onInput()',\n },\n})\nexport class GraniteChipInputDirective\n implements GraniteChipTextControl, OnChanges, OnDestroy, AfterContentInit\n{\n /** Unique id for the input. */\n @Input() id: string = `granite-chip-list-input-${nextUniqueId++}`;\n\n /** The input's placeholder text. */\n @Input() placeholder: string = '';\n\n /** Emitted when a chip is to be added. */\n @Output() readonly graniteChipInputTokenEnd =\n new EventEmitter<GraniteChipInputEvent>();\n\n /** Register input for chip list */\n @Input()\n set graniteChipInputFor(value: GraniteChipListComponent) {\n if (value) {\n this._chipList = value;\n this._chipList.registerInput(this);\n }\n }\n\n /**\n * The list of key codes that will trigger a chipEnd event.\n *\n * Defaults to `[ENTER]`.\n */\n @Input()\n graniteChipInputSeparatorKeyCodes: readonly number[] | ReadonlySet<number> = [\n ENTER,\n ] as const;\n\n /**\n * Whether or not the chipEnd event will be emitted when the input is blurred.\n */\n @Input()\n get graniteChipInputAddOnBlur(): boolean {\n return this._addOnBlur;\n }\n set graniteChipInputAddOnBlur(value: boolean) {\n this._addOnBlur = coerceBooleanProperty(value);\n }\n _addOnBlur: boolean = true;\n\n /**\n * Whether this is a required field, currently we use it only for setting aria-required.\n */\n @Input()\n get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n /** The native input element to which this directive is attached. */\n readonly inputElement!: HTMLInputElement;\n _chipList: GraniteChipListComponent;\n focused: boolean = false;\n\n protected _required: boolean | undefined;\n\n /** Whether the input is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled || (this._chipList && this._chipList.disabled);\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n /** Whether the input is empty. */\n get empty(): boolean {\n return !this.inputElement.value;\n }\n\n private _disabled: boolean = false;\n\n /** Used to prevent focus moving to chips while user is holding backspace */\n private _focusLastChipOnBackspace: boolean;\n\n constructor(protected _elementRef: ElementRef<HTMLInputElement>) {\n this.inputElement = this._elementRef.nativeElement as HTMLInputElement;\n }\n\n ngOnChanges(): void {\n this._chipList.stateChanges.next();\n }\n\n ngOnDestroy(): void {\n this.graniteChipInputTokenEnd.complete();\n }\n\n ngAfterContentInit(): void {\n this._focusLastChipOnBackspace = this.empty;\n }\n\n /** Utility method to make host definition/tests more clear. */\n _keydown(event?: KeyboardEvent): void {\n if (event) {\n // Allow the user's focus to escape when they're tabbing forward. Note that we don't\n // want to do this when going backwards, because focus should go back to the first chip.\n if (event.keyCode === TAB && !hasModifierKey(event, 'shiftKey')) {\n this._chipList._allowFocusEscape();\n }\n\n // To prevent the user from accidentally deleting chips when pressing BACKSPACE continuously,\n // We focus the last chip on backspace only after the user has released the backspace button,\n // and the input is empty (see behaviour in _keyup)\n if (event.keyCode === BACKSPACE && this._focusLastChipOnBackspace) {\n this._chipList._keyManager.setLastItemActive();\n event.preventDefault();\n return;\n } else {\n this._focusLastChipOnBackspace = false;\n }\n }\n\n this._emitChipEnd(event);\n }\n\n /**\n * Pass events to the keyboard manager. Available here for tests.\n */\n _keyup(event: KeyboardEvent): void {\n // Allow user to move focus to chips next time he presses backspace\n if (\n !this._focusLastChipOnBackspace &&\n event.keyCode === BACKSPACE &&\n this.empty\n ) {\n this._focusLastChipOnBackspace = true;\n event.preventDefault();\n }\n }\n\n /** Checks to see if the blur should emit the (chipEnd) event. */\n _blur(): void {\n if (this.graniteChipInputAddOnBlur) {\n this._emitChipEnd();\n }\n this.focused = false;\n // Blur the chip list if it is not focused\n if (!this._chipList.focused) {\n this._chipList._blur();\n }\n this._chipList.stateChanges.next();\n }\n\n _focus(): void {\n this.focused = true;\n this._focusLastChipOnBackspace = this.empty;\n this._chipList.stateChanges.next();\n }\n\n /** Checks to see if the (chipEnd) event needs to be emitted. */\n _emitChipEnd(event?: KeyboardEvent): void {\n if (!this.inputElement.value && !!event) {\n this._chipList._keydown(event);\n }\n\n if (!event || this._isSeparatorKey(event)) {\n this.graniteChipInputTokenEnd.emit({\n input: this.inputElement,\n value: this.inputElement.value,\n chipInput: this,\n });\n\n event?.preventDefault();\n }\n }\n\n _onInput(): void {\n // Let chip list know whenever the value changes.\n this._chipList.stateChanges.next();\n }\n\n /** Focuses the input (called from parent level). */\n setFocus(options?: FocusOptions): void {\n this.inputElement.focus(options);\n }\n\n /** Clears the input */\n clear(): void {\n this.inputElement.value = '';\n this._focusLastChipOnBackspace = true;\n }\n\n /** Checks whether a keycode is one of the configured separators. */\n private _isSeparatorKey(event: KeyboardEvent): boolean {\n return (\n !hasModifierKey(event) &&\n new Set(this.graniteChipInputSeparatorKeyCodes).has(event.keyCode)\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { GraniteIconModule } from '../icon/icon.module';\nimport { GraniteChipListComponent } from './chip-list.component';\nimport { GraniteChipComponent } from './chip.component';\nimport { GraniteChipInputDirective } from './chip-input';\n\nconst CHIP_DECLARATIONS = [\n GraniteChipListComponent,\n GraniteChipComponent,\n GraniteChipInputDirective,\n];\n\n@NgModule({\n imports: [CommonModule, FormsModule, ReactiveFormsModule, GraniteIconModule],\n declarations: CHIP_DECLARATIONS,\n exports: CHIP_DECLARATIONS,\n})\nexport class GraniteChipsModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Component({\n selector: 'granite-label',\n standalone: false,\n exportAs: 'graniteLabel',\n host: {\n class: 'granite-label',\n },\n templateUrl: './label.component.html',\n styleUrls: ['./label.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GraniteLabelComponent implements OnChanges {\n @Input()\n for: string | null = null;\n\n @Input()\n form: string | null = null;\n\n @Input()\n required: boolean = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.required) {\n this.required = coerceBooleanProperty(changes.required.currentValue);\n }\n }\n}\n","<label [attr.for]=\"for\" [attr.form]=\"form\">\n <i *ngIf=\"required\" aria-label=\"required\">*</i>\n <ng-content></ng-content>\n</label>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteLabelComponent } from './label.component';\n\n@NgModule({\n declarations: [GraniteLabelComponent],\n imports: [CommonModule],\n exports: [GraniteLabelComponent],\n})\nexport class GraniteLabelModule {}\n","import { TemplateRef, ViewChild, Directive } from '@angular/core';\nimport {\n ClientInputInterface,\n ClientOutputInterface,\n} from '../../core/client-environment';\nimport { Direction } from '@angular/cdk/bidi';\n\nexport type PositionX = 'before' | 'after';\nexport type PositionY = 'above' | 'below';\n\nlet contactsPanelUid = 0;\n\n@Directive({})\nexport class ContactsTriggerDataComponent {\n @ViewChild(TemplateRef) templateRef: TemplateRef<unknown>;\n\n xPosition: PositionX = 'after';\n\n yPosition: PositionY = 'below';\n\n direction: Direction;\n\n /**\n * Used for locating the panel in tests and setting the aria-control attribute\n * for the contacts trigger.\n */\n readonly panelId = `granite-contacts-panel-${contactsPanelUid++}`;\n\n /** Client input device information */\n clientInput: ClientInputInterface;\n\n /** Client output device information */\n clientOutput: ClientOutputInterface;\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[graniteCustomStatus]',\n standalone: false,\n})\nexport class GraniteCustomStatusDirective {\n @Input()\n graniteCustomStatus: string;\n\n constructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[graniteCustomProfile]',\n standalone: false,\n})\nexport class GraniteCustomProfileDirective {\n constructor(public templateRef: TemplateRef<unknown>) {}\n}\n","type firstName = string;\ntype lastName = string;\n\ntype NamesFormat = {\n firstName?: firstName | null;\n lastName?: lastName | null;\n name?: string;\n};\n\ntype NameData = {\n firstName?: firstName;\n lastName?: lastName;\n initials: string;\n};\n\nexport class NamesUtilsService {\n static getInitialsFrom(firstName: string): string {\n return firstName\n .split(' ')\n .map((part) => part.charAt(0).toUpperCase())\n .join('');\n }\n\n static buildNameData(namesFormat: NamesFormat): NameData {\n const { firstName, lastName, name } = namesFormat;\n\n const getInitials = (fullName: string | null | undefined) =>\n NamesUtilsService.getInitialsFrom(fullName);\n\n if (firstName && lastName) {\n return {\n firstName: firstName,\n lastName: lastName,\n initials: `${getInitials(firstName)[0]}${getInitials(lastName)[0]}`,\n };\n }\n\n if (firstName) {\n const firstNameInitials = getInitials(firstName);\n return {\n firstName: firstName,\n initials: `${firstNameInitials[0]}${firstNameInitials[1] || ''}`,\n };\n }\n\n if (lastName) {\n const lastNameInitials = getInitials(lastName);\n return {\n lastName: lastName,\n initials: `${lastNameInitials[0]}${lastNameInitials[1] || ''}`,\n };\n }\n\n if (name) {\n const nameInitials = getInitials(name);\n const nameParts = name.split(' ');\n const firstNameParts =\n nameParts.length > 1 ? nameParts.slice(0, -1) : [name];\n const lastName =\n nameParts.length > 1 ? nameParts[nameParts.length - 1] : '';\n const firstName = firstNameParts.join(' ');\n\n return {\n firstName: firstName,\n lastName: lastName,\n initials: `${nameInitials[0]}${nameInitials[1] || ''}`,\n };\n }\n\n return {\n firstName: '',\n lastName: '',\n initials: '',\n };\n }\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[graniteCustomAvatarStatus]',\n standalone: false,\n})\nexport class GraniteCustomAvatarStatusDirective {\n @Input()\n graniteCustomAvatarStatus: string;\n\n constructor(public templateRef: TemplateRef<unknown>) {}\n}\n","export type AvatarDefaultStatuses =\n (typeof AVATAR_DEFAULT_STATUS)[keyof typeof AVATAR_DEFAULT_STATUS];\n\nexport const AVATAR_DEFAULT_STATUS = {\n AVAILABLE: 'Available',\n DO_NOT_DISTURB: 'DoNotDisturb',\n DISABLED: 'Disabled',\n AWAY: 'Away',\n} as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\nimport {\n AVATAR_DEFAULT_STATUS,\n AvatarDefaultStatuses,\n} from '../avatar.component.public-types';\n\nexport type StatusClasses =\n | 'available'\n | 'do-not-disturb'\n | 'disabled'\n | 'away';\n\n@Component({\n selector: 'granite-avatar-default-status',\n host: {\n class: 'granite-avatar-default-status',\n },\n template: '',\n styleUrls: ['./avatar-default-status.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteAvatarDefaultStatusComponent {\n @Input() status: AvatarDefaultStatuses;\n\n AVATAR_STATUS = AVATAR_DEFAULT_STATUS;\n\n @HostBinding('class') get statusClass(): StatusClasses {\n switch (this.status) {\n case this.AVATAR_STATUS.AVAILABLE:\n return 'available';\n\n case this.AVATAR_STATUS.DO_NOT_DISTURB:\n return 'do-not-disturb';\n\n case this.AVATAR_STATUS.DISABLED: {\n return 'disabled';\n }\n case this.AVATAR_STATUS.AWAY: {\n return 'away';\n }\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'granite-empty-avatar',\n host: {\n class: 'granite-empty-avatar',\n },\n template: `\n <div class=\"no-profile-avatar\" [attr.aria-label]=\"ariaLabel\" role=\"img\">\n <span\n data-fnd=\"no-profile-avatar-initials\"\n class=\"no-profile-avatar-initials\"\n >{{ initials }}</span\n >\n </div>\n `,\n styleUrls: ['./empty-avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteEmptyAvatarComponent {\n @Input() initials: string;\n\n @Input('aria-label')\n ariaLabel: string | null = null;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n ContentChildren,\n QueryList,\n AfterContentChecked,\n TemplateRef,\n ChangeDetectorRef,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { ContactsTriggerDataComponent } from '../contacts/contacts-trigger/contacts-trigger-data';\nimport { GraniteCustomAvatarStatusDirective } from './custom-avatar-status.directive';\nimport { AvatarDefaultStatuses } from './avatar.component.public-types';\nimport { NamesUtilsService } from '../core/services/names-utils-service';\n\n@Component({\n selector: 'granite-avatar',\n exportAs: 'graniteAvatar',\n host: {\n class: 'granite-avatar',\n },\n templateUrl: './avatar.component.html',\n styleUrls: ['./avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteAvatarComponent\n extends ContactsTriggerDataComponent\n implements AfterContentChecked, OnChanges\n{\n @Input() name: string;\n @Input() firstName: string;\n @Input() lastName: string;\n @Input() avatar: string;\n @Input() status: AvatarDefaultStatuses;\n @Input('aria-label')\n ariaLabel: string | null = null;\n\n @ContentChildren(GraniteCustomAvatarStatusDirective)\n _customStatusesQueryList: QueryList<GraniteCustomAvatarStatusDirective>;\n _customStatusDirectives: Record<string, TemplateRef<unknown>>;\n\n _nameInitials: string;\n\n avatarAriaLabel: string = '';\n\n constructor(private cd: ChangeDetectorRef) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.firstName ||\n changes.lastName ||\n changes.name ||\n changes.ariaLabel\n ) {\n const nameData = NamesUtilsService.buildNameData({\n firstName: changes.firstName?.currentValue,\n lastName: changes.lastName?.currentValue,\n name: changes.name?.currentValue,\n });\n\n this._nameInitials = nameData?.initials;\n\n this.avatarAriaLabel =\n changes.ariaLabel?.currentValue ??\n `${nameData?.firstName ?? ''} ${nameData?.lastName ?? ''}`.trim();\n\n this.cd.markForCheck();\n }\n }\n\n ngAfterContentChecked(): void {\n this._customStatusDirectives = this._customStatusesQueryList\n .toArray()\n .reduce((directives, next) => {\n return {\n ...directives,\n [next.graniteCustomAvatarStatus]: next.templateRef,\n };\n }, {});\n }\n}\n","<img\n data-fnd=\"profile-avatar\"\n *ngIf=\"avatar; else noProfileAvatar\"\n [src]=\"avatar\"\n alt=\"avatar\"\n class=\"profile-avatar profile-size\"\n [attr.aria-label]=\"avatarAriaLabel\"\n/>\n\n<ng-template #noProfileAvatar>\n <granite-empty-avatar\n class=\"profile-size\"\n [initials]=\"_nameInitials\"\n [aria-label]=\"avatarAriaLabel\"\n ></granite-empty-avatar>\n</ng-template>\n\n@if (status && _customStatusDirectives[status]) {\n <ng-container *ngTemplateOutlet=\"customStatus\"></ng-container>\n} @else if (status) {\n <ng-container *ngTemplateOutlet=\"defaultStatus\"></ng-container>\n}\n\n<ng-template #defaultStatus>\n <granite-avatar-default-status\n class=\"profile-default-status\"\n [attr.data-fnd]=\"status + '-status'\"\n [status]=\"status\"\n ></granite-avatar-default-status>\n</ng-template>\n\n<ng-template #customStatus>\n <div\n [attr.data-fnd]=\"'profile-status-custom'\"\n [class]=\"'profile-status-' + status\"\n class=\"profile-custom-status\"\n >\n <ng-container\n *ngTemplateOutlet=\"_customStatusDirectives[status]\"\n ></ng-container>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ProfileData } from '../contacts-types/contacts.component.private-types';\n\n@Component({\n selector: 'granite-contacts-profile',\n host: {\n class: 'granite-contacts-profile',\n },\n templateUrl: './contacts-profile.component.html',\n styleUrls: ['./contacts-profile.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteContactsProfileComponent {\n @Input() profile: ProfileData;\n @Input() profileClass;\n}\n","<div [class]=\"profileClass\" data-fnd=\"profile\" class=\"profile\">\n <granite-avatar\n data-fnd=\"profile-avatar\"\n class=\"profile-avatar\"\n [firstName]=\"profile.firstName\"\n [lastName]=\"profile.lastName\"\n [avatar]=\"profile.avatar\"\n ></granite-avatar>\n\n <ng-template #noProfileAvatar>\n <div class=\"no-profile-avatar\">\n <span\n data-fnd=\"no-profile-avatar-initials\"\n class=\"no-profile-avatar-initials\"\n >{{ profile?.initials }}</span\n >\n </div>\n </ng-template>\n\n <div class=\"profile-info\">\n <p data-fnd=\"profile-info-names\" class=\"profile-info-names\">\n {{ profile?.firstName }} {{ profile?.lastName }}\n </p>\n <p data-fnd=\"profile-info-job-title\" class=\"profile-info-job-title\">\n {{ profile?.jobTitle }}\n </p>\n </div>\n</div>\n","export type ContactDefaultStatuses =\n (typeof CONTACT_DEFAULT_STATUS)[keyof typeof CONTACT_DEFAULT_STATUS];\n\nexport const CONTACT_DEFAULT_STATUS = {\n AVAILABLE: 'Available',\n AWAY: 'Away',\n BE_RIGHT_BACK: 'BeRightBack',\n BUSY: 'Busy',\n DO_NOT_DISTURB: 'DoNotDisturb',\n OFFLINE: 'Offline',\n} as const;\n\nexport interface Contact<T = unknown> {\n name: string;\n label: string;\n iconName?: string;\n status?: ContactDefaultStatuses | string;\n options?: ContactOption<T>[];\n disabled?: boolean;\n data?: T;\n}\n\nexport interface SelectedContact<T = unknown> {\n contact: ContactOption<T>;\n parent?: Contact<T>;\n}\n\nexport type ContactOption<T = unknown> = Omit<Contact<T>, 'options'>;\n\nexport interface Profile {\n firstName?: string;\n lastName?: string;\n name?: string;\n jobTitle?: string;\n avatar?: string;\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport {\n CONTACT_DEFAULT_STATUS,\n ContactDefaultStatuses,\n} from '../contacts-types/contacts.component.public-types';\n\n@Component({\n selector: 'granite-contact-item-default-status',\n host: {\n class: 'granite-contact-item-default-status',\n },\n templateUrl: './contact-item-default-status.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class ContactItemDefaultStatusComponent {\n @Input() status: ContactDefaultStatuses;\n CONTACT_STATUS = CONTACT_DEFAULT_STATUS;\n}\n","<ng-container [ngSwitch]=\"status\">\n <ng-container *ngSwitchCase=\"CONTACT_STATUS.AVAILABLE\">\n <svg\n data-fnd=\"available\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"9\"\n height=\"10\"\n viewBox=\"0 0 9 10\"\n fill=\"none\"\n >\n <path\n d=\"M4.085 0.915009C1.83008 0.915009 0 2.74509 0 5.00001C0 7.25493 1.83008 9.08501 4.085 9.08501C6.33992 9.08501 8.17 7.25493 8.17 5.00001C8.17 2.74509 6.33992 0.915009 4.085 0.915009Z\"\n fill=\"#17A511\"\n />\n <path\n d=\"M2.45099 4.82838L3.47224 6.06418L5.51474 4.21048\"\n stroke=\"white\"\n stroke-linecap=\"round\"\n />\n </svg>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"CONTACT_STATUS.BUSY\">\n <svg\n data-fnd=\"busy\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n >\n <path\n d=\"M4.25504 0.169922C2.00012 0.169922 0.170044 2 0.170044 4.25492C0.170044 6.50984 2.00012 8.33992 4.25504 8.33992C6.50996 8.33992 8.34004 6.50984 8.34004 4.25492C8.34004 2 6.50996 0.169922 4.25504 0.169922Z\"\n fill=\"#D23335\"\n />\n </svg>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"CONTACT_STATUS.DO_NOT_DISTURB\">\n <svg\n data-fnd=\"doNotDisturb\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n >\n <path\n d=\"M4.085 0C1.83008 0 0 1.83008 0 4.085C0 6.33992 1.83008 8.17 4.085 8.17C6.33992 8.17 8.17 6.33992 8.17 4.085C8.17 1.83008 6.33992 0 4.085 0Z\"\n fill=\"#D23335\"\n />\n <path d=\"M2 4L6 4\" stroke=\"white\" stroke-linecap=\"round\" />\n </svg>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"CONTACT_STATUS.AWAY\">\n <svg\n data-fnd=\"away\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n >\n <path\n d=\"M4.085 0C1.83008 0 0 1.83008 0 4.085C0 6.33992 1.83008 8.17 4.085 8.17C6.33992 8.17 8.17 6.33992 8.17 4.085C8.17 1.83008 6.33992 0 4.085 0Z\"\n fill=\"#EDA000\"\n />\n <path d=\"M4 2L4 3.875L5.5 5.5\" stroke=\"white\" stroke-linecap=\"round\" />\n </svg>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"CONTACT_STATUS.OFFLINE\">\n <svg\n data-fnd=\"offline\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n >\n <path\n d=\"M0.5 4.085C0.5 2.10622 2.10622 0.5 4.085 0.5C6.06378 0.5 7.67 2.10622 7.67 4.085C7.67 6.06378 6.06378 7.67 4.085 7.67C2.10622 7.67 0.5 6.06378 0.5 4.085Z\"\n stroke=\"#7D7D7D\"\n />\n <path d=\"M3 3L5 5\" stroke=\"#7D7D7D\" stroke-linecap=\"round\" />\n <path d=\"M5 3L3 5\" stroke=\"#7D7D7D\" stroke-linecap=\"round\" />\n </svg>\n </ng-container>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ContactExtended } from '../contacts-types/contacts.component.private-types';\n\n@Component({\n selector: 'granite-contact-item-title',\n host: {\n class: 'granite-contact-item-title',\n },\n templateUrl: './contact-item-title.component.html',\n styleUrls: ['./contact-item-title.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteContactItemTitleComponent {\n @Input() contact: ContactExtended;\n}\n","<button\n tabindex=\"0\"\n data-fnd=\"contact-item-title\"\n [class.title-status-active]=\"!contact.disabled && !contact.options\"\n [class.title-status-disabled]=\"contact.disabled\"\n [class.title-status-parent]=\"!contact.disabled && contact.options\"\n>\n {{ contact.label }}\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { SelectedContact } from '../contacts-types/contacts.component.public-types';\nimport { ContactExtended } from '../contacts-types/contacts.component.private-types';\n\n@Component({\n selector: 'granite-contact-item',\n host: {\n class: 'granite-contact-item',\n },\n templateUrl: './contact-item.component.html',\n styleUrls: ['./contact-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteContactItemComponent {\n @Input() contact: ContactExtended;\n\n @Output() readonly selectedContact = new EventEmitter<SelectedContact>();\n\n emitSelectedContact(selectedContact: SelectedContact): void {\n this.selectedContact.emit(selectedContact);\n }\n}\n","<div class=\"contact-item\" [attr.data-fnd]=\"contact.name\">\n <div class=\"contact-item-main\">\n <ng-container\n *ngTemplateOutlet=\"\n contactItem;\n context: {\n contact: contact,\n testName: 'contact',\n selectedContactOutput: { contact }\n }\n \"\n ></ng-container>\n </div>\n\n <ul *ngIf=\"contact.options\" class=\"contact-item-options\">\n <li\n tabindex=\"0\"\n *ngFor=\"let option of contact.options; let i = index\"\n class=\"option-item\"\n [attr.data-fnd]=\"'contact-option-' + i\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n contactItem;\n context: {\n contact: option,\n testName: 'contact-option-' + i,\n selectedContactOutput: { contact: option, parent: contact }\n }\n \"\n ></ng-container>\n </li>\n </ul>\n</div>\n\n<ng-template\n let-testName=\"testName\"\n let-contact=\"contact\"\n let-selectedContactOutput=\"selectedContactOutput\"\n #contactItem\n>\n <granite-icon\n [attr.data-fnd]=\"testName + '-icon'\"\n fontIcon=\"{{ contact.iconName }}\"\n ></granite-icon>\n\n <granite-contact-item-title\n [attr.data-fnd]=\"testName + '-title'\"\n tabindex=\"0\"\n [contact]=\"contact\"\n [class.contact-item-disabled]=\"contact.options || contact.disabled\"\n (click)=\"emitSelectedContact(selectedContactOutput)\"\n ></granite-contact-item-title>\n\n <ng-container *ngIf=\"contact.statusTemplate; else defaultStatus\">\n <ng-container *ngTemplateOutlet=\"contact.statusTemplate\"></ng-container>\n </ng-container>\n\n <ng-template #defaultStatus>\n <granite-contact-item-default-status\n [attr.data-fnd]=\"testName + '-status'\"\n [status]=\"contact.status\"\n ></granite-contact-item-default-status>\n </ng-template>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n Output,\n EventEmitter,\n ContentChildren,\n QueryList,\n AfterContentChecked,\n ContentChild,\n OnChanges,\n SimpleChanges,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {\n Contact,\n Profile,\n SelectedContact,\n} from './contacts-types/contacts.component.public-types';\nimport { ContactsTriggerDataComponent } from './contacts-trigger/contacts-trigger-data';\nimport { GraniteCustomStatusDirective } from './custom-status.directive';\nimport {\n ContactExtended,\n ProfileData,\n} from './contacts-types/contacts.component.private-types';\nimport { GraniteCustomProfileDirective } from './custom-profile.directive';\nimport { NamesUtilsService } from '../core/services/names-utils-service';\n\n@Component({\n selector: 'granite-contacts',\n exportAs: 'graniteContacts',\n host: {\n class: 'granite-contacts',\n },\n templateUrl: './contacts.component.html',\n styleUrls: ['./contacts.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteContactsComponent\n extends ContactsTriggerDataComponent\n implements OnChanges, AfterContentChecked\n{\n @Input() contacts: Contact[] = [];\n @Input() contactsClass: string;\n @Input() profile: Profile | unknown;\n @Input() profileClass: string;\n @Input() defaultShow = false;\n\n @Output() readonly selectedContact = new EventEmitter<SelectedContact>();\n\n @ContentChildren(GraniteCustomStatusDirective)\n _customStatuses: QueryList<GraniteCustomStatusDirective>;\n\n @ContentChild(GraniteCustomProfileDirective)\n customProfileDirective: GraniteCustomProfileDirective;\n\n _contactsExtended: ContactExtended[] = [];\n _profile: ProfileData;\n\n constructor(private cd: ChangeDetectorRef) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.contacts && !changes.contacts.currentValue) {\n this.contacts = [];\n }\n\n if (changes.profile?.currentValue) {\n const profile = changes.profile.currentValue as Profile;\n this._profile = this.createProfileData(profile);\n }\n this.cd.markForCheck();\n }\n\n ngAfterContentChecked(): void {\n this._contactsExtended = this.setProperCustomStatusTemplates(\n this._customStatuses.toArray(),\n this.contacts\n );\n }\n\n onSelectedContact(contact: SelectedContact): void {\n this.selectedContact.emit(contact);\n }\n\n private setProperCustomStatusTemplates(\n customStatusDirectives: GraniteCustomStatusDirective[],\n contacts: Contact[]\n ): ContactExtended[] {\n return this.applyTemplates(contacts, customStatusDirectives);\n }\n\n private applyTemplates(\n contacts: Contact[] | ContactExtended[],\n directives: GraniteCustomStatusDirective[]\n ): ContactExtended[] {\n return contacts.map((item) => {\n const matchingDirective = directives.find(\n (d) => d.graniteCustomStatus === item.status\n );\n\n const result = { ...item };\n\n if (matchingDirective) {\n result.statusTemplate = matchingDirective.templateRef;\n }\n\n if (item.options) {\n result.options = this.applyTemplates(item.options, directives);\n }\n\n return result;\n });\n }\n\n private createProfileData(profile: Profile): ProfileData {\n const nameData = NamesUtilsService.buildNameData({\n firstName: profile.firstName,\n lastName: profile.lastName,\n name: profile.name,\n });\n\n return {\n firstName: nameData.firstName,\n lastName: nameData.lastName,\n initials: nameData.initials,\n jobTitle: profile.jobTitle,\n avatar: profile.avatar,\n };\n }\n}\n","<ng-template #contactsTemplate>\n <div data-fnd=\"contacts\" [class]=\"contactsClass\" class=\"granite-contact\">\n <ng-container *ngIf=\"customProfileDirective; else defaultProfile\">\n <ng-container\n *ngTemplateOutlet=\"customProfileDirective.templateRef\"\n ></ng-container>\n </ng-container>\n\n <ng-template #defaultProfile>\n <granite-contacts-profile\n data-fnd=\"default-profile\"\n [profileClass]=\"profileClass\"\n [profile]=\"_profile\"\n ></granite-contacts-profile>\n </ng-template>\n\n <ul class=\"contact-list\">\n <li *ngFor=\"let contact of _contactsExtended\">\n <granite-contact-item\n [contact]=\"contact\"\n (selectedContact)=\"onSelectedContact($event)\"\n ></granite-contact-item>\n </li>\n </ul>\n </div>\n</ng-template>\n\n<ng-container *ngIf=\"defaultShow\">\n <ng-container *ngTemplateOutlet=\"contactsTemplate\"></ng-container>\n</ng-container>\n","import {\n AfterContentInit,\n Directive,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n Optional,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport {\n FlexibleConnectedPositionStrategy,\n HorizontalConnectionPos,\n Overlay,\n OverlayConfig,\n OverlayOutsideClickDispatcher,\n OverlayRef,\n PositionStrategy,\n VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\n\nimport { Subscription } from 'rxjs';\nimport { GraniteContactsComponent } from '../contacts.component';\nimport {\n ClientInputInterface,\n ClientOutputInterface,\n GRANITE_CLIENT_INPUT,\n GRANITE_CLIENT_OUTPUT,\n} from '../../core/client-environment';\n\n@Directive({\n selector: `[graniteContactsTriggerFor]`,\n standalone: false,\n host: {\n class: 'granite-contacts-trigger',\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': '_isContactsOpen || null',\n '[attr.aria-controls]': '_isContactsOpen ? contacts.panelId : null',\n '(keydown)': '_handleKeydown($event)',\n '(click)': '_handleClick($event)',\n },\n})\nexport class GraniteContactsTriggerForDirective\n implements AfterContentInit, OnDestroy\n{\n /** References the contacts instance that the trigger is associated with. */\n @Input('graniteContactsTriggerFor')\n contacts: GraniteContactsComponent;\n\n /** Whether the associated contacts is open */\n _isContactsOpen: boolean = false;\n\n private _contactsCloseSubscription = Subscription.EMPTY;\n\n private _portal: TemplatePortal | null = null;\n private _overlayRef: OverlayRef | null = null;\n\n constructor(\n private _overlay: Overlay,\n private _element: ElementRef<HTMLElement>,\n private _viewContainerRef: ViewContainerRef,\n private _outsideClickDispatcher: OverlayOutsideClickDispatcher,\n\n /** Client input device information */\n @Inject(GRANITE_CLIENT_INPUT)\n @Optional()\n public _clientInput: ClientInputInterface,\n\n /** Client output device information */\n @Inject(GRANITE_CLIENT_OUTPUT)\n @Optional()\n public _clientOutput: ClientOutputInterface,\n\n @Optional()\n private _dir: Directionality,\n\n private _focusMonitor: FocusMonitor\n ) {}\n\n ngAfterContentInit(): void {\n const selectedContact = this.contacts.selectedContact;\n\n this._contactsCloseSubscription = selectedContact.subscribe(() =>\n this.closeContacts()\n );\n }\n\n ngOnDestroy(): void {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n this._contactsCloseSubscription.unsubscribe();\n }\n\n isOpen(): boolean {\n return this._isContactsOpen;\n }\n\n openContacts(): void {\n if (this._isContactsOpen) {\n return;\n }\n\n this.contacts.direction = this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n this.contacts.clientInput = this._clientInput;\n this.contacts.clientOutput = this._clientOutput;\n\n const panelClass: string[] = [];\n if (this._clientOutput?.device === 'touch') {\n panelClass.push('granite-overlay-pane-center');\n }\n\n const scrollStrategy =\n this._clientOutput?.device !== 'touch'\n ? this._overlay.scrollStrategies.reposition()\n : this._overlay.scrollStrategies.block();\n\n const hasBackdrop = this._clientOutput?.device === 'touch';\n\n if (!this._overlayRef) {\n const config = new OverlayConfig({\n positionStrategy: this._positionStrategy(),\n backdropClass: 'granite-overlay-dark-glass-backdrop',\n scrollStrategy,\n direction: this._dir,\n panelClass,\n hasBackdrop,\n });\n\n this._overlayRef = this._overlay.create(config);\n }\n\n if (\n !this._portal ||\n this._portal.templateRef !== this.contacts.templateRef\n ) {\n this._portal = new TemplatePortal(\n this.contacts.templateRef,\n this._viewContainerRef\n );\n }\n // Attach portal to overlay ref (which is a portal outlet)\n this._overlayRef.attach(this._portal);\n this._outsideClickDispatcher.add(this._overlayRef);\n this._overlayRef.outsidePointerEvents().subscribe((event: MouseEvent) => {\n event.stopPropagation();\n this.closeContacts();\n });\n\n this._isContactsOpen = true;\n }\n\n /** Toggles the contacts between the open and closed states. */\n toggleContacts(): void {\n if (this._isContactsOpen) {\n this.closeContacts();\n } else {\n this.openContacts();\n }\n }\n\n /** Close the associated contacts */\n closeContacts(): void {\n if (!this._overlayRef || !this._isContactsOpen) {\n return;\n }\n\n this._outsideClickDispatcher.remove(this._overlayRef);\n this._overlayRef.detach();\n\n this._restoreFocus();\n this._isContactsOpen = false;\n }\n\n /** Handles key presses on the trigger. */\n _handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n this.toggleContacts();\n }\n }\n\n /** Handles click events on the trigger. */\n _handleClick(): void {\n this.toggleContacts();\n }\n\n /**\n * Restores focus to the element that was focused before the contacts was open.\n */\n _restoreFocus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(this._element, origin, options);\n } else {\n this._element.nativeElement.focus(options);\n }\n }\n\n /**\n * Returns strategy for positioning the overlay for desktop devices:\n */\n private _desktopPositionStrategy(): PositionStrategy {\n const positionStrategy: FlexibleConnectedPositionStrategy = this._overlay\n .position()\n .flexibleConnectedTo(this._element)\n .withLockedPosition()\n .withTransformOriginOn('.granite-contacts')\n .withPush(false);\n\n this._setPosition(positionStrategy);\n return positionStrategy;\n }\n\n /**\n * Sets the appropriate positions on a position strategy\n * so the overlay connects with the trigger correctly.\n * @param positionStrategy Strategy whose position to update.\n */\n private _setPosition(positionStrategy: FlexibleConnectedPositionStrategy) {\n const [originX, originFallbackX]: HorizontalConnectionPos[] =\n this.contacts.xPosition === 'before'\n ? ['end', 'start']\n : ['start', 'end'];\n\n const [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\n this.contacts.yPosition === 'above'\n ? ['bottom', 'top']\n : ['top', 'bottom'];\n\n let [originY, originFallbackY] = [overlayY, overlayFallbackY];\n const [overlayX, overlayFallbackX] = [originX, originFallbackX];\n const offsetY = 0;\n\n originY = overlayY === 'top' ? 'bottom' : 'top';\n originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n\n positionStrategy.withPositions([\n { originX, originY, overlayX, overlayY, offsetY },\n {\n originX: originFallbackX,\n originY,\n overlayX: overlayFallbackX,\n overlayY,\n offsetY,\n },\n {\n originX,\n originY: originFallbackY,\n overlayX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n {\n originX: originFallbackX,\n originY: originFallbackY,\n overlayX: overlayFallbackX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n ]);\n }\n\n /**\n * Returns strategy for positioning the overlay depending on what type of\n * device the contacts is being shown on\n */\n private _positionStrategy(): PositionStrategy {\n if (this._clientOutput?.device !== 'touch') {\n return this._desktopPositionStrategy();\n }\n return this._touchPositionStrategy();\n }\n\n /**\n * Returns strategy for positioning the overlay for touch devices:\n * Place centered in the screen.\n */\n private _touchPositionStrategy(): PositionStrategy {\n return this._overlay.position().global();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteAvatarComponent } from './avatar.component';\nimport { GraniteCustomAvatarStatusDirective } from './custom-avatar-status.directive';\nimport { GraniteAvatarDefaultStatusComponent } from './avatar-default-status/avatar-default-status.component';\nimport { GraniteEmptyAvatarComponent } from './empty-avatar/empty-avatar.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n GraniteAvatarComponent,\n GraniteAvatarDefaultStatusComponent,\n GraniteCustomAvatarStatusDirective,\n GraniteEmptyAvatarComponent,\n ],\n exports: [\n GraniteAvatarComponent,\n GraniteAvatarDefaultStatusComponent,\n GraniteCustomAvatarStatusDirective,\n GraniteEmptyAvatarComponent,\n ],\n})\nexport class GraniteAvatarModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteContactsComponent as GraniteContactsComponent } from './contacts.component';\nimport { GraniteIconModule } from '../icon/icon.module';\nimport { GraniteContactItemComponent } from './contact-item/contact-item.component';\nimport { ContactItemDefaultStatusComponent } from './contact-item-default-status/contact-item-default-status.component';\nimport { GraniteContactItemTitleComponent } from './contact-item-title/contact-item-title.component';\nimport { GraniteCustomStatusDirective } from './custom-status.directive';\nimport { GraniteContactsTriggerForDirective } from './contacts-trigger/contacts-trigger-for.directive';\nimport { GraniteContactsProfileComponent } from './contacts-profile/contacts-profile.component';\nimport { GraniteCustomProfileDirective } from './custom-profile.directive';\nimport { GraniteAvatarModule } from '../avatar/avatar.module';\n\n@NgModule({\n imports: [GraniteIconModule, GraniteAvatarModule, CommonModule],\n declarations: [\n GraniteContactsComponent,\n GraniteContactsProfileComponent,\n GraniteContactItemComponent,\n ContactItemDefaultStatusComponent,\n GraniteContactItemTitleComponent,\n GraniteContactsTriggerForDirective,\n GraniteCustomStatusDirective,\n GraniteCustomProfileDirective,\n ],\n exports: [\n GraniteContactsComponent,\n GraniteContactsTriggerForDirective,\n GraniteContactItemComponent,\n GraniteCustomStatusDirective,\n GraniteCustomProfileDirective,\n ],\n})\nexport class GraniteContactsModule {}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n OnDestroy,\n Renderer2,\n} from '@angular/core';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n@Directive({\n selector: '[graniteHideOnOverflow]',\n standalone: false,\n exportAs: 'graniteHideOnOverflow',\n})\nexport class GraniteHideOnOverflowDirective\n implements AfterViewInit, OnDestroy\n{\n resizeObserver: ResizeObserver;\n resizeSubscription: Subscription;\n mutationObserver: MutationObserver;\n\n constructor(\n private _elementRef: ElementRef,\n private renderer: Renderer2\n ) {}\n\n ngAfterViewInit(): void {\n this.hideOnOverflow();\n this.observeResize();\n this.observeContentChange();\n }\n\n ngOnDestroy(): void {\n this.unObserveResize();\n this.unObserveContentChange();\n }\n\n hideOnOverflow(): void {\n const element = this._elementRef?.nativeElement;\n\n if (element) {\n const contentWidth = element.scrollWidth;\n const containerWidth = element.clientWidth;\n\n if (contentWidth > containerWidth) {\n this.renderer.setStyle(element, 'visibility', 'hidden');\n } else {\n this.renderer.removeStyle(element, 'visibility');\n }\n }\n }\n\n observeResize(): void {\n if (window.ResizeObserver) {\n const element = this._elementRef?.nativeElement;\n\n if (element) {\n this.resizeObserver = new ResizeObserver(() => this.hideOnOverflow());\n this.resizeObserver.observe(element);\n }\n } else {\n this.subscribeToResize();\n }\n }\n\n unObserveResize(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n\n subscribeToResize(): void {\n this.resizeSubscription = fromEvent(window, 'resize')\n .pipe(debounceTime(1000))\n .subscribe(() => this.hideOnOverflow());\n }\n\n observeContentChange(): void {\n const element = this._elementRef?.nativeElement;\n\n if (element) {\n this.mutationObserver = new MutationObserver(() => this.hideOnOverflow());\n this.mutationObserver.observe(element, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n }\n }\n\n unObserveContentChange(): void {\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n }\n }\n}\n","import { Direction } from '@angular/cdk/bidi';\nimport { Directive, TemplateRef, ViewChild } from '@angular/core';\nimport {\n ClientInputInterface,\n ClientOutputInterface,\n} from './client-environment';\n\nexport type PositionX = 'before' | 'after';\nexport type PositionY = 'above' | 'below';\n\n@Directive({})\nexport class OverlayBaseComponent {\n @ViewChild(TemplateRef) templateRef: TemplateRef<any>;\n\n xPosition: PositionX = 'after';\n\n yPosition: PositionY = 'below';\n\n direction: Direction;\n\n clientInput: ClientInputInterface;\n\n clientOutput: ClientOutputInterface;\n}\n","import { Directive } from '@angular/core';\nimport { OverlayBaseComponent, PositionX } from '../core/overlay-base';\n\nlet legendPanelUid = 0;\n\n@Directive()\nexport class LegendBaseComponent extends OverlayBaseComponent {\n readonly panelId = `granite-progress-bar-legend-panel-${legendPanelUid++}`;\n override xPosition: PositionX = 'before';\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { LegendBaseComponent } from '../progress-bar-legend-base';\nimport { GraniteProgressLegendInterface } from '../progress-bar.model';\n\n@Component({\n selector: 'granite-progress-bar-legend',\n templateUrl: './progress-bar-legend.component.html',\n styleUrl: './progress-bar-legend.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteProgressBarLegendComponent extends LegendBaseComponent {\n @Input()\n legendItems: GraniteProgressLegendInterface[] = [];\n}\n","<ng-template>\n <div class=\"legend\" data-fnd=\"legend\">\n <div\n *ngFor=\"let item of legendItems\"\n class=\"legend-item\"\n data-fnd=\"legend-item\"\n >\n <div class=\"legend-label-text\">{{ item.label }}</div>\n <div\n [style.background-color]=\"item.backgroundColor\"\n class=\"color-box\"\n ></div>\n </div>\n </div>\n</ng-template>\n","import {\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayOutsideClickDispatcher,\n OverlayRef,\n PositionStrategy,\n} from '@angular/cdk/overlay';\nimport { ElementRef, Injectable, ViewContainerRef } from '@angular/core';\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { OverlayPositionConfig } from './overlay-position-config';\nimport { OverlayBaseComponent } from './overlay-base';\nimport { TemplatePortal } from '@angular/cdk/portal';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class OverlayService {\n constructor(\n private _overlay: Overlay,\n private _focusMonitor: FocusMonitor,\n private _outsideClickDispatcher: OverlayOutsideClickDispatcher\n ) {}\n\n createOverlay(\n config: OverlayConfig,\n component: OverlayBaseComponent,\n viewContainerRef: ViewContainerRef\n ): OverlayRef {\n const overlayRef = this._overlay.create(config);\n const portal = new TemplatePortal(component.templateRef, viewContainerRef);\n overlayRef.attach(portal);\n return overlayRef;\n }\n\n closeOverlay(overlayRef: OverlayRef, element: ElementRef<HTMLElement>): void {\n this._outsideClickDispatcher.remove(overlayRef);\n overlayRef.detach();\n this.restoreFocus(element);\n }\n\n restoreFocus(\n element: ElementRef<HTMLElement>,\n origin: FocusOrigin = 'program',\n options?: FocusOptions\n ): void {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(element, origin, options);\n } else {\n element.nativeElement.focus(options);\n }\n }\n\n desktopPositionStrategy(\n element: ElementRef<HTMLElement>,\n selector: string\n ): FlexibleConnectedPositionStrategy {\n return this._overlay\n .position()\n .flexibleConnectedTo(element)\n .withLockedPosition()\n .withTransformOriginOn(selector)\n .withPush(false);\n }\n\n touchPositionStrategy(): PositionStrategy {\n return this._overlay.position().global();\n }\n\n setPosition(\n positionStrategy: FlexibleConnectedPositionStrategy,\n positionConfig: OverlayPositionConfig\n ): FlexibleConnectedPositionStrategy {\n const {\n originX,\n originFallbackX,\n originY,\n originFallbackY,\n overlayX,\n overlayFallbackX,\n overlayY,\n overlayFallbackY,\n offsetX,\n offsetY,\n } = positionConfig;\n\n positionStrategy.withPositions([\n { originX, originY, overlayX, overlayY, offsetY },\n {\n originX: originFallbackX,\n originY,\n overlayX: overlayFallbackX,\n overlayY,\n offsetY,\n },\n {\n originX,\n originY: originFallbackY,\n overlayX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n {\n originX: originFallbackX,\n originY: originFallbackY,\n overlayX: overlayFallbackX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n ]);\n\n return positionStrategy;\n }\n\n subscribeOutsideClick(overlayRef: OverlayRef, callback?: () => void): void {\n this._outsideClickDispatcher.add(overlayRef);\n overlayRef.outsidePointerEvents().subscribe((event: MouseEvent) => {\n event.stopPropagation();\n if (callback) {\n callback();\n }\n });\n }\n}\n","import {\n BlockScrollStrategy,\n CloseScrollStrategy,\n FlexibleConnectedPositionStrategy,\n HorizontalConnectionPos,\n Overlay,\n OverlayConfig,\n OverlayRef,\n PositionStrategy,\n RepositionScrollStrategy,\n VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport {\n Directive,\n ElementRef,\n inject,\n OnDestroy,\n Optional,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n GRANITE_CLIENT_INPUT,\n GRANITE_CLIENT_OUTPUT,\n} from './client-environment';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { OverlayService } from './overlay.service';\nimport { OverlayPositionConfig } from './overlay-position-config';\nimport { OverlayBaseComponent } from './overlay-base';\n\n@Directive({\n selector: '[graniteOverlayTriggerForBase]',\n standalone: false,\n})\nexport class GraniteOverlayTriggerForBaseDirective implements OnDestroy {\n /** Client output device information */\n @Optional()\n private _clientOutput = inject(GRANITE_CLIENT_OUTPUT);\n\n /** Client input device information */\n @Optional()\n private _clientInput = inject(GRANITE_CLIENT_INPUT);\n\n @Optional()\n private _dir = inject(Directionality);\n\n protected componentRef: OverlayBaseComponent;\n protected selector: string;\n protected offsetX: number = 0;\n protected offsetY: number = 0;\n\n private _overlayRef: OverlayRef | null = null;\n\n private _overlay = inject(Overlay);\n private _element = inject(ElementRef<HTMLElement>);\n private _viewContainerRef = inject(ViewContainerRef);\n private _overlayService = inject(OverlayService);\n\n ngOnDestroy(): void {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n\n protected getPositionConfig(): OverlayPositionConfig {\n const [originX, originFallbackX]: HorizontalConnectionPos[] =\n this.componentRef.xPosition === 'before'\n ? ['end', 'start']\n : ['start', 'end'];\n\n const [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\n this.componentRef.yPosition === 'above'\n ? ['bottom', 'top']\n : ['top', 'bottom'];\n\n let [originY, originFallbackY] = [overlayY, overlayFallbackY];\n const [overlayX, overlayFallbackX] = [originX, originFallbackX];\n\n originY = overlayY === 'top' ? 'bottom' : 'top';\n originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n\n return {\n originX,\n originFallbackX,\n originY,\n originFallbackY,\n overlayX,\n overlayFallbackX,\n overlayY,\n overlayFallbackY,\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n };\n }\n\n protected getPositionStrategy(): PositionStrategy {\n let positionStrategy: FlexibleConnectedPositionStrategy =\n this._overlayService.desktopPositionStrategy(\n this._element,\n this.selector\n );\n const positionConfig: OverlayPositionConfig = this.getPositionConfig();\n positionStrategy = this._overlayService.setPosition(\n positionStrategy,\n positionConfig\n );\n return positionStrategy;\n }\n\n protected getScrollStrategy():\n | RepositionScrollStrategy\n | BlockScrollStrategy\n | CloseScrollStrategy {\n return this.setScrollStrategy('close');\n }\n\n protected setScrollStrategy(\n scrollStrategy: 'reposition' | 'block' | 'close'\n ): RepositionScrollStrategy | BlockScrollStrategy | CloseScrollStrategy {\n switch (scrollStrategy) {\n case 'reposition':\n return this._overlay.scrollStrategies.reposition();\n case 'block':\n return this._overlay.scrollStrategies.block();\n case 'close':\n return this._overlay.scrollStrategies.close();\n default:\n return this._overlay.scrollStrategies.close();\n }\n }\n\n protected toggleOverlay(isOpen: boolean): boolean {\n isOpen ? this._closeOverlay() : this._openOverlay();\n return !isOpen;\n }\n\n protected onOutsideClick(): void {\n this._closeOverlay();\n }\n\n private _openOverlay(): void {\n this.componentRef.direction = this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n this.componentRef.clientInput = this._clientInput;\n this.componentRef.clientOutput = this._clientOutput;\n\n const panelClass: string[] = [];\n if (this._clientOutput?.device === 'touch') {\n panelClass.push('granite-overlay-pane-center');\n }\n\n const hasBackdrop = this._clientOutput?.device === 'touch';\n\n const config = new OverlayConfig({\n positionStrategy: this.getPositionStrategy(),\n backdropClass: 'granite-overlay-dark-glass-backdrop',\n scrollStrategy: this.getScrollStrategy(),\n direction: this._dir,\n panelClass,\n hasBackdrop,\n });\n\n this._overlayRef = this._overlayService.createOverlay(\n config,\n this.componentRef,\n this._viewContainerRef\n );\n this._overlayService.subscribeOutsideClick(this._overlayRef, () =>\n this.onOutsideClick()\n );\n }\n\n private _closeOverlay(): void {\n if (!this._overlayRef) {\n return;\n }\n this._overlayService.closeOverlay(this._overlayRef, this._element);\n }\n}\n","import { Directive, Input } from '@angular/core';\nimport { GraniteProgressBarLegendComponent } from './progress-bar-legend/progress-bar-legend.component';\nimport { GraniteOverlayTriggerForBaseDirective } from '../core/overlay-trigger-for-base.directive';\nimport { OverlayBaseComponent } from '../core/overlay-base';\nimport {\n BlockScrollStrategy,\n CloseScrollStrategy,\n RepositionScrollStrategy,\n} from '@angular/cdk/overlay';\n\n@Directive({\n selector: '[graniteProgressBarLegendTriggerFor]',\n standalone: false,\n host: {\n class: 'granite-progress-bar-legend-trigger',\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'isLegendOpen || null',\n '[attr.aria-controls]': 'isLegendOpen ? legend.panelId : null',\n '(keydown)': 'handleKeydown($event)',\n '(click)': 'handleClick($event)',\n },\n})\nexport class GraniteProgressBarLegendTriggerForDirective extends GraniteOverlayTriggerForBaseDirective {\n @Input('graniteProgressBarLegendTriggerFor')\n get legend(): OverlayBaseComponent {\n return this.componentRef;\n }\n\n set legend(value: GraniteProgressBarLegendComponent) {\n this.componentRef = value;\n }\n\n isLegendOpen: boolean = false;\n\n protected override selector: string = '.granite-progress-bar-legend';\n protected override offsetY: number = 4;\n\n handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n this.isLegendOpen = this.toggleOverlay(this.isLegendOpen);\n }\n }\n\n handleClick(): void {\n this.isLegendOpen = this.toggleOverlay(this.isLegendOpen);\n }\n\n onOutsideClick(): void {\n super.onOutsideClick();\n this.isLegendOpen = false;\n }\n\n override getScrollStrategy():\n | RepositionScrollStrategy\n | BlockScrollStrategy\n | CloseScrollStrategy {\n return this.setScrollStrategy('reposition');\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport {\n GraniteProgressInterface,\n GraniteProgressLegendInterface,\n} from './progress-bar.model';\n\n@Component({\n selector: 'granite-progress-bar',\n exportAs: 'graniteProgressBar',\n templateUrl: './progress-bar.component.html',\n styleUrls: ['./progress-bar.component.scss'],\n host: {\n '[class.label-present]': 'showLabel',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteProgressBarComponent implements OnChanges {\n @Input()\n progressBarData: GraniteProgressInterface[] = [];\n\n @Input()\n legendData: GraniteProgressLegendInterface[] = [];\n\n @Input()\n showLabel: boolean = false;\n\n @Input()\n showLegend: boolean = false;\n\n DEFAULT_TOTAL = 100;\n DEFAULT_BACKGROUND = '--granite-color-background-selected';\n DEFAULT_STACK_COLOR = '--granite-color-categorical-3';\n DEFAULT_COLOR = '--granite-color-text';\n\n total: number = this.DEFAULT_TOTAL;\n legendItems: GraniteProgressLegendInterface[] = [];\n\n getBackgroundColor(): string {\n return this.getColorVar(this.DEFAULT_BACKGROUND);\n }\n\n getFontColor(color: string): string {\n return color\n ? this.getColorVar(color)\n : this.getColorVar(this.DEFAULT_COLOR);\n }\n\n getStackColor(color: string): string {\n return color\n ? this.getColorVar(color)\n : this.getColorVar(this.DEFAULT_STACK_COLOR);\n }\n\n getColorVar(color: string): string {\n return color?.startsWith('--granite') ? `var(${color})` : color;\n }\n\n getWidth(value: number): number {\n return (value / this.total) * 100;\n }\n\n getStringOfWidth(width: number): string {\n return String(width) + '%';\n }\n\n checkStackTotal(): void {\n const totalOfStackedValues = this.getStackTotal();\n if (totalOfStackedValues > this.total) {\n this.total = totalOfStackedValues;\n }\n }\n\n getStackTotal(): number {\n return this.progressBarData.reduce((acc, curr) => acc + curr.value, 0);\n }\n\n setLegendItems(): void {\n this.legendItems =\n this.legendData.length > 0\n ? this.getLegendItems(this.legendData)\n : this.getLegendItems(this.progressBarData);\n }\n\n getLegendItems(\n data: GraniteProgressInterface[] | GraniteProgressLegendInterface[]\n ): GraniteProgressLegendInterface[] {\n return data.map(\n ({\n label,\n backgroundColor,\n }: {\n label?: string;\n backgroundColor?: string;\n }) => {\n const legendItemColor = this.getStackColor(backgroundColor);\n return { label, backgroundColor: legendItemColor };\n }\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.progressBarData) {\n this.checkStackTotal();\n this.setLegendItems();\n }\n\n if (changes.legendData) {\n this.setLegendItems();\n }\n }\n}\n","<div\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n class=\"progress\"\n [style.background-color]=\"getBackgroundColor()\"\n>\n <div\n *ngFor=\"let bar of progressBarData; let i = index\"\n [style.background-color]=\"getStackColor(bar.backgroundColor)\"\n [style.width]=\"getStringOfWidth(getWidth(bar.value))\"\n [style.color]=\"getFontColor(bar.foregroundColor)\"\n [graniteTooltipTriggerFor]=\"tooltip\"\n class=\"progress-bar\"\n >\n <label *ngIf=\"showLabel\" graniteHideOnOverflow>{{ bar.valueLabel }}</label>\n <granite-tooltip #tooltip> {{ bar.valueLabel }} </granite-tooltip>\n </div>\n</div>\n\n<ng-container *ngIf=\"showLegend\">\n <button\n graniteFlatButton\n [graniteProgressBarLegendTriggerFor]=\"legend\"\n class=\"legend-btn\"\n >\n <granite-icon fontIcon=\"icon-caret-down\"></granite-icon>\n </button>\n</ng-container>\n\n<granite-progress-bar-legend\n #legend\n [legendItems]=\"legendItems\"\n></granite-progress-bar-legend>\n","import { Directive } from '@angular/core';\nimport { deviceDesktop, GRANITE_CLIENT_OUTPUT } from '../client-environment';\n\n/**\n * Directive used to tell components and their sub components that client output\n * should be adapted for desktop devices like personal computers.\n */\n@Directive({\n selector: `[graniteClientOutputDesktop]`,\n standalone: false,\n providers: [\n {\n provide: GRANITE_CLIENT_OUTPUT,\n useValue: deviceDesktop.output,\n },\n ],\n})\nexport class ClientOutputDesktopDirective {}\n","import { Directive } from '@angular/core';\nimport { GRANITE_CLIENT_OUTPUT, deviceTouch } from '../client-environment';\n\n/**\n * Directive used to tell components and their sub components that client output\n * should be adapted for touch devices like mobiles and tablets.\n */\n@Directive({\n selector: `[graniteClientOutputTouch]`,\n standalone: false,\n providers: [\n {\n provide: GRANITE_CLIENT_OUTPUT,\n useValue: deviceTouch.output,\n },\n ],\n})\nexport class ClientOutputTouchDirective {}\n","import { Directive } from '@angular/core';\nimport { deviceDesktop, GRANITE_CLIENT_INPUT } from '../client-environment';\n\n/**\n * Directive used to tell components and their sub components that client input\n * should be adapted for desktop devices, like personal computers.\n */\n@Directive({\n selector: `[graniteClientInputDesktop]`,\n standalone: false,\n providers: [\n {\n provide: GRANITE_CLIENT_INPUT,\n useValue: deviceDesktop.input,\n },\n ],\n})\nexport class ClientInputDesktopDirective {}\n","import { Directive } from '@angular/core';\nimport { deviceTouch, GRANITE_CLIENT_INPUT } from '../client-environment';\n\n/**\n * Directive used to tell components and their sub components that client input\n * should be adapted for touch devices, like mobiles and tablets.\n */\n@Directive({\n selector: `[graniteClientInputTouch]`,\n standalone: false,\n providers: [\n {\n provide: GRANITE_CLIENT_INPUT,\n useValue: deviceTouch.input,\n },\n ],\n})\nexport class ClientInputTouchDirective {}\n","import { NgModule } from '@angular/core';\nimport { ClientOutputDesktopDirective } from './devices/client-output-desktop.directive';\nimport { ClientOutputTouchDirective } from './devices/client-output-touch.directive';\nimport { ClientInputDesktopDirective } from './devices/client-input-desktop.directive';\nimport { ClientInputTouchDirective } from './devices/client-input-touch.directive';\nimport { GraniteHideOnOverflowDirective } from './hide-on-overflow.directive';\nimport { GraniteOverlayTriggerForBaseDirective } from './overlay-trigger-for-base.directive';\n\n// TODO: Move client devices into a separate module\n\n@NgModule({\n declarations: [\n ClientOutputDesktopDirective,\n ClientOutputTouchDirective,\n ClientInputDesktopDirective,\n ClientInputTouchDirective,\n GraniteHideOnOverflowDirective,\n GraniteOverlayTriggerForBaseDirective,\n ],\n exports: [\n ClientOutputDesktopDirective,\n ClientOutputTouchDirective,\n ClientInputDesktopDirective,\n ClientInputTouchDirective,\n GraniteHideOnOverflowDirective,\n ],\n})\nexport class GraniteCoreModule {}\n","import { NgModule } from '@angular/core';\nimport { GraniteProgressBarComponent } from './progress-bar.component';\nimport { CommonModule } from '@angular/common';\nimport { GraniteTooltipModule } from '@ifsworld/granite-components/tooltip';\nimport { GraniteCoreModule } from '../core/core.module';\nimport { GraniteIconModule } from '../icon/icon.module';\nimport { GraniteButtonModule } from '../button/button.module';\nimport { GraniteProgressBarLegendComponent } from './progress-bar-legend/progress-bar-legend.component';\nimport { GraniteProgressBarLegendTriggerForDirective } from './progress-bar-legend-trigger-for.directive';\n\n@NgModule({\n declarations: [\n GraniteProgressBarComponent,\n GraniteProgressBarLegendComponent,\n GraniteProgressBarLegendTriggerForDirective,\n ],\n exports: [GraniteProgressBarComponent],\n imports: [\n CommonModule,\n GraniteCoreModule,\n GraniteTooltipModule,\n GraniteIconModule,\n GraniteButtonModule,\n ],\n})\nexport class GraniteProgressBarModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'graniteTitle',\n standalone: false,\n})\nexport class GraniteTitlePipe implements PipeTransform {\n transform(value: string): string {\n const words: string[] = value.split(/(?=[A-Z ])/);\n return words\n .map((word) => word.trim())\n .filter(Boolean)\n .map((word) => word.charAt(0).toLocaleUpperCase() + word.slice(1))\n .join(' ');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { GraniteTitlePipe } from './title.pipe';\n\n@NgModule({\n exports: [GraniteTitlePipe],\n declarations: [GraniteTitlePipe],\n})\nexport class PurePipesModule {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card',\n template: '<ng-content></ng-content>',\n styleUrls: ['card.component.scss'],\n standalone: false,\n})\nexport class GraniteCardComponent {}\n","import { Component, Input } from '@angular/core';\n@Component({\n selector: 'granite-card-list',\n templateUrl: 'card-list.component.html',\n styleUrls: ['card-list.component.scss'],\n standalone: false,\n})\nexport class GraniteCardListComponent {\n /**Present cards in vertically or horizontally */\n @Input()\n orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n @Input()\n wrap: 'wrap' | 'nowrap' = 'nowrap';\n\n @Input()\n gap: 'small' | 'medium' | 'large' = 'small';\n}\n","<div\n class=\"card-list-wrapper\"\n [class.vertical]=\"orientation === 'vertical'\"\n [class.horizontal]=\"orientation === 'horizontal'\"\n [class.wrap]=\"wrap === 'wrap'\"\n [class.nowrap]=\"wrap === 'nowrap'\"\n [class.small]=\"gap === 'small'\"\n [class.medium]=\"gap === 'medium'\"\n [class.large]=\"gap === 'large'\"\n cdkScrollable\n>\n <ng-content></ng-content>\n</div>\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-content',\n template: '<ng-content></ng-content>',\n styleUrls: ['card-content.component.scss'],\n standalone: false,\n})\nexport class GraniteCardContentComponent {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-header',\n templateUrl: 'card-header.component.html',\n styleUrls: ['card-header.component.scss'],\n standalone: false,\n})\nexport class GraniteCardHeaderComponent {}\n","<div class=\"title-container\">\n <ng-content select=\"granite-card-header-title\"></ng-content>\n <ng-content select=\"granite-card-header-sub-title\"></ng-content>\n</div>\n<div class=\"content-container\">\n <ng-content></ng-content>\n</div>\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-actions',\n template: '<ng-content></ng-content>',\n styleUrls: ['card-actions.component.scss'],\n standalone: false,\n})\nexport class GraniteCardActionsComponent {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-body',\n template: '<ng-content></ng-content>',\n styleUrls: ['card-body.component.scss'],\n standalone: false,\n})\nexport class GraniteCardBodyComponent {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-footer',\n template: '<ng-content></ng-content>',\n styleUrls: ['card-footer.component.scss'],\n standalone: false,\n})\nexport class GraniteCardFooterComponent {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-avatar',\n template: '<ng-content></ng-content>',\n styleUrls: ['./card-avatar.component.scss'],\n standalone: false,\n})\nexport class GraniteCardAvatarComponent {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-header-title',\n template: '<ng-content></ng-content>',\n styleUrls: ['card-header-title.component.scss'],\n standalone: false,\n})\nexport class GraniteCardHeaderTitleComponent {}\n","import { Component } from '@angular/core';\n@Component({\n selector: 'granite-card-header-sub-title',\n template: '<ng-content></ng-content>',\n styleUrls: ['card-header-subtitle.component.scss'],\n standalone: false,\n})\nexport class GraniteCardHeaderSubTitleComponent {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteCardComponent } from './card/card.component';\nimport { GraniteCardListComponent } from './card-list.component';\nimport { GraniteCardContentComponent } from './card/card-content/card-content.component';\nimport { GraniteCardHeaderComponent } from './card/card-content/card-header.component';\nimport { GraniteCardActionsComponent } from './card/card-content/card-actions.component';\nimport { GraniteCardBodyComponent } from './card/card-content/card-body.component';\nimport { GraniteCardFooterComponent } from './card/card-content/card-footer.component';\nimport { GraniteCardAvatarComponent } from './card/card-avatar.component';\nimport { GraniteCardHeaderTitleComponent } from './card/card-content/card-header-title.component';\nimport { GraniteCardHeaderSubTitleComponent } from './card/card-content/card-header-subtitle.component';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\n\n@NgModule({\n declarations: [\n GraniteCardComponent,\n GraniteCardListComponent,\n GraniteCardContentComponent,\n GraniteCardHeaderComponent,\n GraniteCardActionsComponent,\n GraniteCardBodyComponent,\n GraniteCardFooterComponent,\n GraniteCardAvatarComponent,\n GraniteCardHeaderTitleComponent,\n GraniteCardHeaderSubTitleComponent,\n ],\n imports: [CommonModule, ScrollingModule],\n exports: [\n GraniteCardComponent,\n GraniteCardListComponent,\n GraniteCardContentComponent,\n GraniteCardHeaderComponent,\n GraniteCardBodyComponent,\n GraniteCardActionsComponent,\n GraniteCardFooterComponent,\n GraniteCardAvatarComponent,\n GraniteCardHeaderTitleComponent,\n GraniteCardHeaderSubTitleComponent,\n ],\n})\nexport class GraniteCardListModule {}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[graniteCollapsibleGroupBody]',\n standalone: false,\n exportAs: 'graniteCollapsibleGroupBody',\n})\nexport class GraniteCollapsibleConditionalBodyDirective {\n template = inject(TemplateRef);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[graniteCollapsibleGroupHeader]',\n standalone: false,\n exportAs: 'graniteCollapsibleGroupHeader',\n})\nexport class GraniteCollapsibleConditionalHeaderDirective {\n template = inject(TemplateRef);\n}\n","import {\n Component,\n ContentChild,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { GraniteCollapsibleConditionalBodyDirective } from './collapsible-group-body.directive';\nimport { GraniteCollapsibleConditionalHeaderDirective } from './collapsible-group-header.directive';\n@Component({\n selector: 'granite-collapsible-group',\n templateUrl: 'collapsible-group.component.html',\n styleUrls: ['collapsible-group.component.scss'],\n standalone: false,\n})\nexport class GraniteCollapsibleGroupComponent {\n @Input()\n collapsed: boolean = false;\n\n @Input()\n id: string = '';\n\n @Input()\n arialabel: string | null = null;\n\n @Output()\n readonly collapsedChanged: EventEmitter<boolean> =\n new EventEmitter<boolean>();\n\n @ContentChild(GraniteCollapsibleConditionalBodyDirective)\n conditionalBodyContentRef: GraniteCollapsibleConditionalBodyDirective;\n\n @ContentChild(GraniteCollapsibleConditionalHeaderDirective)\n conditionalHeaderContentRef: GraniteCollapsibleConditionalHeaderDirective;\n\n toggleCollapsibleGroup(): void {\n this.collapsed = !this.collapsed;\n this.collapsedChanged.emit(this.collapsed);\n }\n\n _toogleCollapsing(event: KeyboardEvent): void {\n if (event.code === 'Enter' || event.code === 'Space') {\n event.preventDefault();\n event.stopPropagation();\n this.toggleCollapsibleGroup();\n }\n }\n}\n","<div class=\"collapsible-wrapper\">\n <div\n data-fnd=\"collapsible-group-header\"\n class=\"collapsible-group-header\"\n [class]=\"collapsed ? 'collapsed-header' : 'expanded-header'\"\n role=\"button\"\n (click)=\"toggleCollapsibleGroup()\"\n (keydown)=\"_toogleCollapsing($event)\"\n [attr.id]=\"id ? 'collapsible-group-header-' + id : null\"\n [attr.aria-label]=\"arialabel\"\n [attr.aria-expanded]=\"!collapsed\"\n [attr.aria-controls]=\"id ? 'collapsible-group-body-' + id : null\"\n tabindex=\"0\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n conditionalHeaderContentRef\n ? conditionalHeaderContentRef.template\n : null\n \"\n ></ng-container>\n\n <div class=\"collapse-icon\">\n <granite-icon\n [fontIcon]=\"collapsed ? 'icon-caret-down' : 'icon-caret-up'\"\n ></granite-icon>\n </div>\n </div>\n <div\n data-fnd=\"collapsible-group-body\"\n class=\"collapsible-group-body\"\n [class]=\"collapsed ? 'collapse' : 'expand'\"\n role=\"region\"\n [attr.id]=\"id ? 'collapsible-group-body-' + id : null\"\n [attr.aria-labelledby]=\"id ? 'collapsible-group-header-' + id : null\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n !collapsed && conditionalBodyContentRef\n ? conditionalBodyContentRef.template\n : null\n \"\n >\n </ng-container>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteIconModule } from '../icon/icon.module';\nimport { GraniteCollapsibleGroupComponent } from './collapsible-group.component';\nimport { GraniteCollapsibleConditionalBodyDirective } from './collapsible-group-body.directive';\nimport { GraniteCollapsibleConditionalHeaderDirective } from './collapsible-group-header.directive';\n\n@NgModule({\n imports: [CommonModule, GraniteIconModule],\n declarations: [\n GraniteCollapsibleGroupComponent,\n GraniteCollapsibleConditionalHeaderDirective,\n GraniteCollapsibleConditionalBodyDirective,\n ],\n exports: [\n GraniteCollapsibleGroupComponent,\n GraniteCollapsibleConditionalHeaderDirective,\n GraniteCollapsibleConditionalBodyDirective,\n ],\n})\nexport class GraniteCollapsibleGroupModule {}\n","/*\n * Public API Surface of ui\n */\n\nexport * from './lib/arrange-grid/arrange-grid.module';\nexport * from './lib/arrange-grid/arrange-grid.component';\nexport * from './lib/arrange-grid/arrange-grid-item.component';\n\nexport * from './lib/grid/grid.module';\nexport * from './lib/grid/grid.component';\n\nexport * from './lib/badge/badge.module';\nexport * from './lib/badge/badge.component';\nexport * from './lib/badge/testing/badge.harness';\n\nexport * from './lib/menu/menu.module';\nexport * from './lib/menu/menu.component';\nexport * from './lib/menu/menu-desktop-animations';\nexport * from './lib/menu/menu-touch-animations';\nexport * from './lib/menu/menu-item.component';\nexport * from './lib/menu/menu-trigger-for.directive';\nexport * from './lib/menu/testing/menu.harness';\nexport * from './lib/menu/divider.directive';\nexport * from './lib/menu/title.directive';\nexport * from './lib/menu/menu-touch-close.component';\nexport * from './lib/menu/menu-touch-title.component';\n\nexport * from './lib/icon/icon.module';\nexport * from './lib/icon/icon.component';\n\nexport * from './lib/toggle-switch/toggle-switch.module';\nexport * from './lib/toggle-switch/toggle-switch.component';\n\nexport * from './lib/radio-button/radio-button.module';\nexport * from './lib/radio-button/radio-button.component';\n\nexport * from './lib/radio-button/radio-group.component';\n\nexport * from './lib/checkbox/checkbox.module';\nexport * from './lib/checkbox/checkbox.component';\n\nexport * from './lib/checkbox/checkbox-group.component';\n\nexport * from './lib/button/button.module';\nexport * from './lib/button/button.component';\n\nexport * from './lib/input-field/input-field.module';\nexport * from './lib/input-field/input-field.component';\n\nexport * from './lib/chips/chips.module';\nexport * from './lib/chips/chip-list.component';\nexport * from './lib/chips/chip.component';\nexport * from './lib/chips/chip-input';\n\nexport * from './lib/label/label.module';\nexport * from './lib/label/label.component';\n\nexport * from './lib/contacts/contacts.module';\nexport * from './lib/contacts/contacts.component';\nexport * from './lib/contacts/contacts-types/contacts.component.public-types';\nexport * from './lib/contacts/contacts-profile/contacts-profile.component';\nexport * from './lib/contacts/contact-item/contact-item.component';\nexport * from './lib/contacts/contact-item-default-status/contact-item-default-status.component';\nexport * from './lib/contacts/contact-item-title/contact-item-title.component';\nexport * from './lib/contacts/contacts-trigger/contacts-trigger-for.directive';\nexport * from './lib/contacts/custom-status.directive';\nexport * from './lib/contacts/custom-profile.directive';\nexport * from './lib/contacts/contacts-types/contacts.component.public-types';\n\nexport * from './lib/avatar/avatar.module';\nexport * from './lib/avatar/avatar.component';\nexport * from './lib/avatar/avatar-default-status/avatar-default-status.component';\nexport * from './lib/avatar/custom-avatar-status.directive';\nexport * from './lib/avatar/empty-avatar/empty-avatar.component';\nexport * from './lib/avatar/avatar.component.public-types';\n\nexport * from './lib/progress-bar/progress-bar.module';\nexport * from './lib/progress-bar/progress-bar.component';\nexport * from './lib/progress-bar/progress-bar.model';\n\n// Temporary\nexport * from './lib/core/client-environment';\nexport * from './lib/core/core.module';\nexport * from './lib/core/devices/client-output-touch.directive';\nexport * from './lib/core/devices/client-output-desktop.directive';\nexport * from './lib/core/devices/client-input-touch.directive';\nexport * from './lib/core/devices/client-input-desktop.directive';\nexport * from './lib/core/common-behaviors/disabled';\nexport * from './lib/core/hide-on-overflow.directive';\n\nexport * from './lib/core/pipes/pure-pipes.module';\nexport * from './lib/core/pipes/title.pipe';\nexport * from './lib/core/types';\n\nexport * from './lib/card-list/card-list.module';\nexport * from './lib/card-list/card-list.component';\nexport * from './lib/card-list/card/card.component';\nexport * from './lib/card-list/card/card-content/card-content.component';\nexport * from './lib/card-list/card/card-content/card-actions.component';\nexport * from './lib/card-list/card/card-content/card-body.component';\nexport * from './lib/card-list/card/card-content/card-header.component';\nexport * from './lib/card-list/card/card-avatar.component';\nexport * from './lib/card-list/card/card-content/card-header-title.component';\nexport * from './lib/card-list/card/card-content/card-header-subtitle.component';\nexport * from './lib/card-list/card/card-content/card-footer.component';\n\nexport * from './lib/collapsible-group/collapsible-group.module';\nexport * from './lib/collapsible-group/collapsible-group.component';\nexport * from './lib/collapsible-group/collapsible-group-body.directive';\nexport * from './lib/collapsible-group/collapsible-group-header.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3.GraniteIconComponent","i1","i2.GraniteIconComponent","i2.GraniteMenuTouchCloseComponent","i3.GraniteMenuTouchTitleItemComponent","observableOf","nextUniqueId","i2.GraniteAvatarDefaultStatusComponent","i3.GraniteEmptyAvatarComponent","i1.GraniteAvatarComponent","i1.GraniteIconComponent","i3.ContactItemDefaultStatusComponent","i4.GraniteContactItemTitleComponent","i2.GraniteContactsProfileComponent","i3.GraniteContactItemComponent","i3","i2.GraniteHideOnOverflowDirective","i4.GraniteIconComponent","i5.GraniteButtonComponent","i6.GraniteProgressBarLegendComponent","i7.GraniteProgressBarLegendTriggerForDirective"],"mappings":"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"}