@entake/particle 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +396 -0
  3. package/app/modules/accordion/accordion.component.d.ts +26 -0
  4. package/app/modules/accordion/accordion.module.d.ts +11 -0
  5. package/app/modules/accordion/directives/accordion-content.directive.d.ts +8 -0
  6. package/app/modules/accordion/directives/accordion-header.directive.d.ts +8 -0
  7. package/app/modules/accordion/directives/accordion-item.directive.d.ts +13 -0
  8. package/app/modules/background-carousel/background-carousel.directive.d.ts +42 -0
  9. package/app/modules/background-carousel/carousel-options.model.d.ts +30 -0
  10. package/app/modules/background-carousel/particle-background-carousel.module.d.ts +8 -0
  11. package/app/modules/checkbox/checkbox.component.d.ts +43 -0
  12. package/app/modules/checkbox/checkbox.module.d.ts +9 -0
  13. package/app/modules/color-picker/color-picker.component.d.ts +149 -0
  14. package/app/modules/color-picker/color-picker.module.d.ts +9 -0
  15. package/app/modules/date-picker/components/calendar/calendar.component.d.ts +211 -0
  16. package/app/modules/date-picker/components/date-range-picker/date-range-picker.component.d.ts +95 -0
  17. package/app/modules/date-picker/date-picker.component.d.ts +259 -0
  18. package/app/modules/date-picker/date-picker.module.d.ts +15 -0
  19. package/app/modules/dialog/dialog.component.d.ts +87 -0
  20. package/app/modules/dialog/dialog.module.d.ts +9 -0
  21. package/app/modules/dropdown/dropdown.component.d.ts +288 -0
  22. package/app/modules/dropdown/dropdown.module.d.ts +9 -0
  23. package/app/modules/dropdown/models/dropdown-option-group.model.d.ts +16 -0
  24. package/app/modules/dropdown/models/dropdown-option.model.d.ts +25 -0
  25. package/app/modules/endpoint-state/components/endpoint-state.component.d.ts +46 -0
  26. package/app/modules/endpoint-state/endpoint-state.module.d.ts +8 -0
  27. package/app/modules/icons/components/icon-select.component.d.ts +229 -0
  28. package/app/modules/icons/models/fontawesome-icons-brands.model.d.ts +13 -0
  29. package/app/modules/icons/models/fontawesome-icons-regular.model.d.ts +13 -0
  30. package/app/modules/icons/models/fontawesome-icons-solid.model.d.ts +13 -0
  31. package/app/modules/icons/models/particle-icons-light.model.d.ts +197 -0
  32. package/app/modules/icons/models/particle-icons-regular.model.d.ts +205 -0
  33. package/app/modules/icons/models/particle-icons-solid.model.d.ts +365 -0
  34. package/app/modules/icons/particle-icons.module.d.ts +13 -0
  35. package/app/modules/icons/services/icons.service.d.ts +44 -0
  36. package/app/modules/idle-timeout/idle-timeout.component.d.ts +35 -0
  37. package/app/modules/idle-timeout/idle-timer.d.ts +14 -0
  38. package/app/modules/idle-timeout/particle-idle-timeout.module.d.ts +9 -0
  39. package/app/modules/input-mask/input-mask.component.d.ts +86 -0
  40. package/app/modules/input-mask/input-mask.module.d.ts +8 -0
  41. package/app/modules/keyfilter/keyfilter.directive.d.ts +60 -0
  42. package/app/modules/keyfilter/keyfilter.module.d.ts +8 -0
  43. package/app/modules/layout/components/layout-full-framing/layout-full-framing.component.d.ts +27 -0
  44. package/app/modules/layout/components/layout-fullwidth-sidebar/layout-fullwidth-sidebar.component.d.ts +23 -0
  45. package/app/modules/layout/layout.module.d.ts +10 -0
  46. package/app/modules/loader/components/loader.component.d.ts +11 -0
  47. package/app/modules/loader/loader.module.d.ts +8 -0
  48. package/app/modules/multi-select/models/multi-select-option-group.model.d.ts +16 -0
  49. package/app/modules/multi-select/models/multi-select-option.model.d.ts +25 -0
  50. package/app/modules/multi-select/multi-select.component.d.ts +279 -0
  51. package/app/modules/multi-select/multi-select.module.d.ts +8 -0
  52. package/app/modules/notification/models/notification.model.d.ts +21 -0
  53. package/app/modules/notification/notification.component.d.ts +46 -0
  54. package/app/modules/notification/notification.module.d.ts +8 -0
  55. package/app/modules/notification/services/notification.service.d.ts +54 -0
  56. package/app/modules/ordinal-number-pipe/ordinal-number-pipe.module.d.ts +8 -0
  57. package/app/modules/ordinal-number-pipe/ordinal-number.pipe.d.ts +15 -0
  58. package/app/modules/paginator/pagination-event.model.d.ts +24 -0
  59. package/app/modules/paginator/paginator.component.d.ts +103 -0
  60. package/app/modules/paginator/particle-paginator.module.d.ts +13 -0
  61. package/app/modules/popover/popover.component.d.ts +140 -0
  62. package/app/modules/popover/popover.module.d.ts +9 -0
  63. package/app/modules/profile-pic/particle-profile-pic.module.d.ts +9 -0
  64. package/app/modules/profile-pic/profile-pic.component.d.ts +32 -0
  65. package/app/modules/progress-bar/progress-bar.component.d.ts +16 -0
  66. package/app/modules/progress-bar/progress-bar.module.d.ts +8 -0
  67. package/app/modules/push-container/particle-push-container.module.d.ts +9 -0
  68. package/app/modules/push-container/push-container-state.model.d.ts +7 -0
  69. package/app/modules/push-container/push-container.component.d.ts +137 -0
  70. package/app/modules/rich-text/particle-rich-text.module.d.ts +15 -0
  71. package/app/modules/rich-text/render-rich-text.component.d.ts +6 -0
  72. package/app/modules/rich-text/rich-text-capabilities.model.d.ts +7 -0
  73. package/app/modules/rich-text/rich-text.component.d.ts +48 -0
  74. package/app/modules/scroll-to-top/particle-scroll-to-top.module.d.ts +8 -0
  75. package/app/modules/scroll-to-top/scroll-to-top.component.d.ts +19 -0
  76. package/app/modules/slideover/particle-slideover.module.d.ts +8 -0
  77. package/app/modules/slideover/slideover.component.d.ts +35 -0
  78. package/app/modules/slider/slider.component.d.ts +143 -0
  79. package/app/modules/slider/slider.module.d.ts +9 -0
  80. package/app/modules/theming/components/theming.component.d.ts +43 -0
  81. package/app/modules/theming/models/theme.model.d.ts +88 -0
  82. package/app/modules/theming/services/theme-change-detection.service.d.ts +26 -0
  83. package/app/modules/theming/services/theming.service.d.ts +142 -0
  84. package/app/modules/theming/theming.module.d.ts +12 -0
  85. package/app/modules/toggle-switch/models/toggle-options.model.d.ts +11 -0
  86. package/app/modules/toggle-switch/toggle-switch.component.d.ts +43 -0
  87. package/app/modules/toggle-switch/toggle-switch.module.d.ts +8 -0
  88. package/app/modules/tooltip/tooltip.directive.d.ts +157 -0
  89. package/app/modules/tooltip/tooltip.module.d.ts +8 -0
  90. package/app/modules/week-picker/week-picker.component.d.ts +289 -0
  91. package/app/modules/week-picker/week-picker.module.d.ts +13 -0
  92. package/app/shared/enums/endpoint-status.enum.d.ts +9 -0
  93. package/app/shared/interceptors/json.interceptor.d.ts +17 -0
  94. package/app/shared/models/auditable.model.d.ts +21 -0
  95. package/app/shared/models/data-list.model.d.ts +9 -0
  96. package/app/shared/models/id.model.d.ts +9 -0
  97. package/app/shared/models/observable-container.d.ts +8 -0
  98. package/app/shared/models/particle-component-text.model.d.ts +211 -0
  99. package/app/shared/services/base-data.service.d.ts +130 -0
  100. package/app/shared/services/dialog.service.d.ts +10 -0
  101. package/app/shared/services/local-storage.service.d.ts +41 -0
  102. package/esm2022/app/modules/accordion/accordion.component.mjs +101 -0
  103. package/esm2022/app/modules/accordion/accordion.module.mjs +37 -0
  104. package/esm2022/app/modules/accordion/directives/accordion-content.directive.mjs +17 -0
  105. package/esm2022/app/modules/accordion/directives/accordion-header.directive.mjs +17 -0
  106. package/esm2022/app/modules/accordion/directives/accordion-item.directive.mjs +36 -0
  107. package/esm2022/app/modules/background-carousel/background-carousel.directive.mjs +91 -0
  108. package/esm2022/app/modules/background-carousel/carousel-options.model.mjs +36 -0
  109. package/esm2022/app/modules/background-carousel/particle-background-carousel.module.mjs +24 -0
  110. package/esm2022/app/modules/checkbox/checkbox.component.mjs +108 -0
  111. package/esm2022/app/modules/checkbox/checkbox.module.mjs +28 -0
  112. package/esm2022/app/modules/color-picker/color-picker.component.mjs +306 -0
  113. package/esm2022/app/modules/color-picker/color-picker.module.mjs +19 -0
  114. package/esm2022/app/modules/date-picker/components/calendar/calendar.component.mjs +496 -0
  115. package/esm2022/app/modules/date-picker/components/date-range-picker/date-range-picker.component.mjs +250 -0
  116. package/esm2022/app/modules/date-picker/date-picker.component.mjs +538 -0
  117. package/esm2022/app/modules/date-picker/date-picker.module.mjs +56 -0
  118. package/esm2022/app/modules/dialog/dialog.component.mjs +177 -0
  119. package/esm2022/app/modules/dialog/dialog.module.mjs +28 -0
  120. package/esm2022/app/modules/dropdown/dropdown.component.mjs +682 -0
  121. package/esm2022/app/modules/dropdown/dropdown.module.mjs +28 -0
  122. package/esm2022/app/modules/dropdown/models/dropdown-option-group.model.mjs +2 -0
  123. package/esm2022/app/modules/dropdown/models/dropdown-option.model.mjs +2 -0
  124. package/esm2022/app/modules/endpoint-state/components/endpoint-state.component.mjs +75 -0
  125. package/esm2022/app/modules/endpoint-state/endpoint-state.module.mjs +22 -0
  126. package/esm2022/app/modules/icons/components/icon-select.component.mjs +377 -0
  127. package/esm2022/app/modules/icons/models/fontawesome-icons-brands.model.mjs +471 -0
  128. package/esm2022/app/modules/icons/models/fontawesome-icons-regular.model.mjs +166 -0
  129. package/esm2022/app/modules/icons/models/fontawesome-icons-solid.model.mjs +1016 -0
  130. package/esm2022/app/modules/icons/models/particle-icons-light.model.mjs +310 -0
  131. package/esm2022/app/modules/icons/models/particle-icons-regular.model.mjs +324 -0
  132. package/esm2022/app/modules/icons/models/particle-icons-solid.model.mjs +581 -0
  133. package/esm2022/app/modules/icons/particle-icons.module.mjs +66 -0
  134. package/esm2022/app/modules/icons/services/icons.service.mjs +86 -0
  135. package/esm2022/app/modules/idle-timeout/idle-timeout.component.mjs +85 -0
  136. package/esm2022/app/modules/idle-timeout/idle-timer.mjs +66 -0
  137. package/esm2022/app/modules/idle-timeout/particle-idle-timeout.module.mjs +28 -0
  138. package/esm2022/app/modules/input-mask/input-mask.component.mjs +594 -0
  139. package/esm2022/app/modules/input-mask/input-mask.module.mjs +18 -0
  140. package/esm2022/app/modules/keyfilter/keyfilter.directive.mjs +158 -0
  141. package/esm2022/app/modules/keyfilter/keyfilter.module.mjs +18 -0
  142. package/esm2022/app/modules/layout/components/layout-full-framing/layout-full-framing.component.mjs +79 -0
  143. package/esm2022/app/modules/layout/components/layout-fullwidth-sidebar/layout-fullwidth-sidebar.component.mjs +65 -0
  144. package/esm2022/app/modules/layout/layout.module.mjs +33 -0
  145. package/esm2022/app/modules/loader/components/loader.component.mjs +30 -0
  146. package/esm2022/app/modules/loader/loader.module.mjs +24 -0
  147. package/esm2022/app/modules/multi-select/models/multi-select-option-group.model.mjs +2 -0
  148. package/esm2022/app/modules/multi-select/models/multi-select-option.model.mjs +2 -0
  149. package/esm2022/app/modules/multi-select/multi-select.component.mjs +665 -0
  150. package/esm2022/app/modules/multi-select/multi-select.module.mjs +18 -0
  151. package/esm2022/app/modules/notification/models/notification.model.mjs +2 -0
  152. package/esm2022/app/modules/notification/notification.component.mjs +122 -0
  153. package/esm2022/app/modules/notification/notification.module.mjs +18 -0
  154. package/esm2022/app/modules/notification/services/notification.service.mjs +84 -0
  155. package/esm2022/app/modules/ordinal-number-pipe/ordinal-number-pipe.module.mjs +20 -0
  156. package/esm2022/app/modules/ordinal-number-pipe/ordinal-number.pipe.mjs +49 -0
  157. package/esm2022/app/modules/paginator/pagination-event.model.mjs +29 -0
  158. package/esm2022/app/modules/paginator/paginator.component.mjs +207 -0
  159. package/esm2022/app/modules/paginator/particle-paginator.module.mjs +48 -0
  160. package/esm2022/app/modules/popover/popover.component.mjs +352 -0
  161. package/esm2022/app/modules/popover/popover.module.mjs +24 -0
  162. package/esm2022/app/modules/profile-pic/particle-profile-pic.module.mjs +28 -0
  163. package/esm2022/app/modules/profile-pic/profile-pic.component.mjs +74 -0
  164. package/esm2022/app/modules/progress-bar/progress-bar.component.mjs +43 -0
  165. package/esm2022/app/modules/progress-bar/progress-bar.module.mjs +24 -0
  166. package/esm2022/app/modules/push-container/particle-push-container.module.mjs +26 -0
  167. package/esm2022/app/modules/push-container/push-container-state.model.mjs +2 -0
  168. package/esm2022/app/modules/push-container/push-container.component.mjs +363 -0
  169. package/esm2022/app/modules/rich-text/particle-rich-text.module.mjs +64 -0
  170. package/esm2022/app/modules/rich-text/render-rich-text.component.mjs +18 -0
  171. package/esm2022/app/modules/rich-text/rich-text-capabilities.model.mjs +2 -0
  172. package/esm2022/app/modules/rich-text/rich-text.component.mjs +187 -0
  173. package/esm2022/app/modules/scroll-to-top/particle-scroll-to-top.module.mjs +24 -0
  174. package/esm2022/app/modules/scroll-to-top/scroll-to-top.component.mjs +49 -0
  175. package/esm2022/app/modules/slideover/particle-slideover.module.mjs +24 -0
  176. package/esm2022/app/modules/slideover/slideover.component.mjs +115 -0
  177. package/esm2022/app/modules/slider/slider.component.mjs +243 -0
  178. package/esm2022/app/modules/slider/slider.module.mjs +26 -0
  179. package/esm2022/app/modules/theming/components/theming.component.mjs +86 -0
  180. package/esm2022/app/modules/theming/models/theme.model.mjs +9 -0
  181. package/esm2022/app/modules/theming/services/theme-change-detection.service.mjs +38 -0
  182. package/esm2022/app/modules/theming/services/theming.service.mjs +507 -0
  183. package/esm2022/app/modules/theming/theming.module.mjs +55 -0
  184. package/esm2022/app/modules/toggle-switch/models/toggle-options.model.mjs +2 -0
  185. package/esm2022/app/modules/toggle-switch/toggle-switch.component.mjs +107 -0
  186. package/esm2022/app/modules/toggle-switch/toggle-switch.module.mjs +24 -0
  187. package/esm2022/app/modules/tooltip/tooltip.directive.mjs +381 -0
  188. package/esm2022/app/modules/tooltip/tooltip.module.mjs +18 -0
  189. package/esm2022/app/modules/week-picker/week-picker.component.mjs +511 -0
  190. package/esm2022/app/modules/week-picker/week-picker.module.mjs +40 -0
  191. package/esm2022/app/shared/enums/endpoint-status.enum.mjs +11 -0
  192. package/esm2022/app/shared/interceptors/json.interceptor.mjs +23 -0
  193. package/esm2022/app/shared/models/auditable.model.mjs +2 -0
  194. package/esm2022/app/shared/models/data-list.model.mjs +2 -0
  195. package/esm2022/app/shared/models/id.model.mjs +2 -0
  196. package/esm2022/app/shared/models/observable-container.mjs +15 -0
  197. package/esm2022/app/shared/models/particle-component-text.model.mjs +2 -0
  198. package/esm2022/app/shared/services/base-data.service.mjs +190 -0
  199. package/esm2022/app/shared/services/dialog.service.mjs +50 -0
  200. package/esm2022/app/shared/services/local-storage.service.mjs +60 -0
  201. package/esm2022/entake-particle.mjs +5 -0
  202. package/esm2022/public_api.mjs +98 -0
  203. package/fesm2022/entake-particle.mjs +12477 -0
  204. package/fesm2022/entake-particle.mjs.map +1 -0
  205. package/index.d.ts +5 -0
  206. package/package.json +65 -0
  207. package/particle.css +1 -0
  208. package/public_api.d.ts +97 -0
@@ -0,0 +1,352 @@
1
+ import { animate, style, transition, trigger } from '@angular/animations';
2
+ import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/cdk/a11y";
6
+ /**
7
+ * Component to display a popover with custom content
8
+ */
9
+ export class PopoverComponent {
10
+ renderer;
11
+ window = window;
12
+ /**
13
+ * The offset of the popover from its target (in pixels)
14
+ */
15
+ offset = 5;
16
+ /**
17
+ * Set the width of the popover in pixels (defaults to auto)
18
+ */
19
+ set width(width) {
20
+ this._width = !width ? 'auto' : `${width}px`;
21
+ }
22
+ get width() {
23
+ return this._width;
24
+ }
25
+ /**
26
+ * Set the height of the popover in pixels (defaults to auto)
27
+ */
28
+ set height(height) {
29
+ this._height = !height ? 'auto' : `${height}px`;
30
+ }
31
+ get height() {
32
+ return this._height;
33
+ }
34
+ /**
35
+ * A class-list to apply to the popover content
36
+ */
37
+ classList = 'content_color particle_popover_shadow';
38
+ targetOverride = null;
39
+ openDirection = 'above';
40
+ alignment = 'left';
41
+ scaleForMobile = '1';
42
+ /**
43
+ * Event emitted on popover open
44
+ */
45
+ opened = new EventEmitter();
46
+ /**
47
+ * Event emitted on popover close
48
+ */
49
+ closed = new EventEmitter();
50
+ /**
51
+ * Whether the popover should render
52
+ */
53
+ render = false;
54
+ /**
55
+ * Whether the popover is visible
56
+ */
57
+ visible = false;
58
+ /**
59
+ * The width of the popover
60
+ */
61
+ _width = 'auto';
62
+ /**
63
+ * The height of the popover
64
+ */
65
+ _height = 'auto';
66
+ /**
67
+ * The element to target
68
+ * @private
69
+ */
70
+ target = null;
71
+ /**
72
+ * The popover content container
73
+ * @private
74
+ */
75
+ container = null;
76
+ /**
77
+ * Array of escape keyup unlisten functions
78
+ * @private
79
+ */
80
+ escapeKeyUpUnlisteners = [];
81
+ /**
82
+ * Dependency injection site
83
+ * @param renderer the Angular renderer
84
+ */
85
+ constructor(renderer) {
86
+ this.renderer = renderer;
87
+ }
88
+ /**
89
+ * Destroy component, clean up event listeners
90
+ */
91
+ ngOnDestroy() {
92
+ this.removeEventListeners();
93
+ }
94
+ /**
95
+ * Close popover on click
96
+ * @param event the click MouseEvent
97
+ */
98
+ onClick(event) {
99
+ if (this.visible) {
100
+ const { pageX, pageY } = event;
101
+ if (pageX > 0 && pageY > 0) {
102
+ const { left, right, top, bottom } = this.container.getBoundingClientRect();
103
+ const xPositionValid = pageX >= left && pageX <= right;
104
+ const yPositionValid = pageY >= top && pageY <= bottom;
105
+ const shouldClose = !(xPositionValid && yPositionValid);
106
+ if (shouldClose) {
107
+ this.close();
108
+ }
109
+ }
110
+ }
111
+ }
112
+ /**
113
+ * Re-position popover on window resize
114
+ */
115
+ onWindowResize() {
116
+ if (this.visible) {
117
+ this.positionPopover();
118
+ }
119
+ }
120
+ /**
121
+ * Toggle the popover from open to closed or closed to open
122
+ * @param event the event whose target element will act as
123
+ * the popover target. If an event is not provided,
124
+ * the popover will close
125
+ */
126
+ toggle(event) {
127
+ if (this.targetOverride) {
128
+ this.target = this.targetOverride;
129
+ }
130
+ else {
131
+ if (event) {
132
+ this.target = event.currentTarget ?? event.target;
133
+ event.stopImmediatePropagation();
134
+ }
135
+ else {
136
+ this.target = null;
137
+ }
138
+ }
139
+ if (!this.visible && this.target) {
140
+ this.open();
141
+ }
142
+ else {
143
+ this.close();
144
+ }
145
+ }
146
+ /**
147
+ * Handle animation start
148
+ * @param event the AnimationEvent
149
+ */
150
+ onAnimationStart(event) {
151
+ if (event.toState === 'open') {
152
+ this.container = event.element;
153
+ this.addEventListeners();
154
+ this.positionPopover();
155
+ this.opened.emit();
156
+ }
157
+ }
158
+ /**
159
+ * Handle animation end
160
+ * @param event the AnimationEvent
161
+ */
162
+ onAnimationDone(event) {
163
+ if (event.toState === 'close') {
164
+ this.render = false;
165
+ this.removeEventListeners();
166
+ this.closed.emit();
167
+ }
168
+ }
169
+ /**
170
+ * Open the popover
171
+ * @private
172
+ */
173
+ open() {
174
+ this.render = true;
175
+ this.visible = true;
176
+ }
177
+ /**
178
+ * Close the popover
179
+ */
180
+ close() {
181
+ this.visible = false;
182
+ }
183
+ /**
184
+ * Position the popover
185
+ * @private
186
+ */
187
+ positionPopover() {
188
+ const { left, top, bottom, width } = this.target.getBoundingClientRect();
189
+ const { offsetHeight, offsetWidth } = this.container;
190
+ const popoverBottomLeftAnchor = bottom;
191
+ const availableBottomSpace = window.innerHeight - popoverBottomLeftAnchor;
192
+ const availableTopSpace = top;
193
+ const offsetListHeight = offsetHeight + this.offset;
194
+ let transformOrigin = null;
195
+ let positionTop = null;
196
+ const canOpenAbove = availableTopSpace > offsetListHeight;
197
+ const canOpenBelow = availableBottomSpace > offsetListHeight;
198
+ if (canOpenAbove && this.openDirection === 'above') {
199
+ transformOrigin = 'bottom left';
200
+ positionTop = `${top - offsetListHeight}px`;
201
+ }
202
+ if (canOpenBelow && this.openDirection === 'below') {
203
+ transformOrigin = 'top left';
204
+ positionTop = `${popoverBottomLeftAnchor + this.offset}px`;
205
+ }
206
+ if (!transformOrigin) {
207
+ if (availableTopSpace > offsetListHeight) {
208
+ transformOrigin = 'bottom left';
209
+ positionTop = `${top - offsetListHeight}px`;
210
+ }
211
+ else if (availableBottomSpace > offsetListHeight) {
212
+ transformOrigin = 'top left';
213
+ positionTop = `${popoverBottomLeftAnchor + this.offset}px`;
214
+ }
215
+ else {
216
+ if (offsetHeight > window.innerHeight) {
217
+ positionTop = '0px';
218
+ }
219
+ else {
220
+ const availableSpace = window.innerHeight - offsetHeight;
221
+ positionTop = `${String(availableSpace / 2)}px`;
222
+ }
223
+ transformOrigin = 'top left';
224
+ }
225
+ }
226
+ let leftPosition = left;
227
+ if (this.alignment === 'center') {
228
+ leftPosition = (leftPosition - (offsetWidth / 2)) + (width / 2);
229
+ }
230
+ if ((left + offsetWidth) > window.innerWidth) {
231
+ leftPosition = left - ((left + offsetWidth) - window.innerWidth) - 10;
232
+ }
233
+ if (leftPosition < 0) {
234
+ leftPosition = 0;
235
+ }
236
+ this.renderer.setStyle(this.container, 'transform-origin', transformOrigin);
237
+ this.renderer.setStyle(this.container, 'left', `${leftPosition}px`);
238
+ this.renderer.setStyle(this.container, 'top', positionTop);
239
+ }
240
+ /**
241
+ * Add escape keyup listeners to all focusable elements to close
242
+ * the popover
243
+ * @private
244
+ */
245
+ addEventListeners() {
246
+ const focusableElements = this.getFocusableElements(this.container);
247
+ for (const element of focusableElements) {
248
+ this.renderer.setAttribute(element, 'data-dialog-close-override', 'true');
249
+ this.escapeKeyUpUnlisteners.push(this.renderer.listen(element, 'keyup', (event) => {
250
+ if (this.visible) {
251
+ event.stopImmediatePropagation();
252
+ const { key } = event;
253
+ if (key === 'Esc' || key === 'Escape') {
254
+ this.close();
255
+ }
256
+ }
257
+ }));
258
+ }
259
+ }
260
+ /**
261
+ * Get all focusable child elements of the input node
262
+ * @param node the node to query for focusable children
263
+ * @param elements the found focusable elements
264
+ * @private
265
+ */
266
+ getFocusableElements(node, elements = []) {
267
+ if (node.hasChildNodes()) {
268
+ node.childNodes.forEach(child => elements.concat(this.getFocusableElements(child, elements)));
269
+ if ('tabIndex' in node) {
270
+ const { tabIndex } = node;
271
+ if (tabIndex >= 0) {
272
+ elements.push(node);
273
+ }
274
+ }
275
+ return elements;
276
+ }
277
+ else {
278
+ if ('tabIndex' in node) {
279
+ const { tabIndex } = node;
280
+ if (tabIndex >= 0) {
281
+ elements.push(node);
282
+ }
283
+ }
284
+ return elements;
285
+ }
286
+ }
287
+ /**
288
+ * Invoke escape keyup unlisten functions
289
+ * @private
290
+ */
291
+ removeEventListeners() {
292
+ for (const unlistener of this.escapeKeyUpUnlisteners) {
293
+ unlistener();
294
+ }
295
+ this.escapeKeyUpUnlisteners = [];
296
+ }
297
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: PopoverComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
298
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.2", type: PopoverComponent, selector: "particle-popover", inputs: { offset: "offset", width: "width", height: "height", classList: "classList", targetOverride: "targetOverride", openDirection: "openDirection", alignment: "alignment", scaleForMobile: "scaleForMobile" }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "window:click": "onClick($event)", "window:resize": "onWindowResize()" } }, ngImport: i0, template: "<div *ngIf=\"render\" class=\"particle_popover_overlay\" [style.scale]=\"window.innerWidth > 768 ? 1 : scaleForMobile\">\n <div [cdkTrapFocus]=\"render && visible\"\n [cdkTrapFocusAutoCapture]=\"true\"\n [@openClose]=\"visible ? 'open' : 'close'\"\n [ngStyle]=\"{ 'width': width, 'height': height }\"\n [ngClass]=\"classList\"\n (@openClose.start)=\"onAnimationStart($event)\"\n (@openClose.done)=\"onAnimationDone($event)\"\n class=\"position_absolute particle_popover\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".particle_popover_overlay{position:fixed;inset:0;z-index:var(--z-notification)}.particle_popover{border-radius:3px;overflow-x:hidden;overflow-y:auto;font-size:12px;font-weight:400;z-index:var(--z-notification);width:auto;min-width:10px;height:auto;min-height:10px}.particle_popover_shadow{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], animations: [
299
+ trigger('openClose', [
300
+ transition('void => open', [
301
+ style({ transform: 'scaleY(0.5)', opacity: 0 }),
302
+ animate('200ms ease', style({ transform: 'scaleY(1)', opacity: 1 }))
303
+ ]),
304
+ transition('open => close', [
305
+ style({ transform: 'scaleY(1)', opacity: 1 }),
306
+ animate('200ms ease', style({ transform: 'scaleY(0.5)', opacity: 0 }))
307
+ ]),
308
+ ])
309
+ ] });
310
+ }
311
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: PopoverComponent, decorators: [{
312
+ type: Component,
313
+ args: [{ selector: 'particle-popover', animations: [
314
+ trigger('openClose', [
315
+ transition('void => open', [
316
+ style({ transform: 'scaleY(0.5)', opacity: 0 }),
317
+ animate('200ms ease', style({ transform: 'scaleY(1)', opacity: 1 }))
318
+ ]),
319
+ transition('open => close', [
320
+ style({ transform: 'scaleY(1)', opacity: 1 }),
321
+ animate('200ms ease', style({ transform: 'scaleY(0.5)', opacity: 0 }))
322
+ ]),
323
+ ])
324
+ ], template: "<div *ngIf=\"render\" class=\"particle_popover_overlay\" [style.scale]=\"window.innerWidth > 768 ? 1 : scaleForMobile\">\n <div [cdkTrapFocus]=\"render && visible\"\n [cdkTrapFocusAutoCapture]=\"true\"\n [@openClose]=\"visible ? 'open' : 'close'\"\n [ngStyle]=\"{ 'width': width, 'height': height }\"\n [ngClass]=\"classList\"\n (@openClose.start)=\"onAnimationStart($event)\"\n (@openClose.done)=\"onAnimationDone($event)\"\n class=\"position_absolute particle_popover\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".particle_popover_overlay{position:fixed;inset:0;z-index:var(--z-notification)}.particle_popover{border-radius:3px;overflow-x:hidden;overflow-y:auto;font-size:12px;font-weight:400;z-index:var(--z-notification);width:auto;min-width:10px;height:auto;min-height:10px}.particle_popover_shadow{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}\n"] }]
325
+ }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { offset: [{
326
+ type: Input
327
+ }], width: [{
328
+ type: Input
329
+ }], height: [{
330
+ type: Input
331
+ }], classList: [{
332
+ type: Input
333
+ }], targetOverride: [{
334
+ type: Input
335
+ }], openDirection: [{
336
+ type: Input
337
+ }], alignment: [{
338
+ type: Input
339
+ }], scaleForMobile: [{
340
+ type: Input
341
+ }], opened: [{
342
+ type: Output
343
+ }], closed: [{
344
+ type: Output
345
+ }], onClick: [{
346
+ type: HostListener,
347
+ args: ['window:click', ['$event']]
348
+ }], onWindowResize: [{
349
+ type: HostListener,
350
+ args: ['window:resize']
351
+ }] } });
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBa0IsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQzs7OztBQUUzRzs7R0FFRztBQW9CSCxNQUFNLE9BQU8sZ0JBQWdCO0lBMEdQO0lBeEdELE1BQU0sR0FBRyxNQUFNLENBQUM7SUFFbkM7O09BRUc7SUFFSCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRVg7O09BRUc7SUFDSCxJQUNJLEtBQUssQ0FBQyxLQUFhO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQ0ksTUFBTSxDQUFDLE1BQWM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBRUgsU0FBUyxHQUFHLHVDQUF1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dGUsIEFuaW1hdGlvbkV2ZW50LCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudCB0byBkaXNwbGF5IGEgcG9wb3ZlciB3aXRoIGN1c3RvbSBjb250ZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3BhcnRpY2xlLXBvcG92ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wb3BvdmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wb3BvdmVyLmNvbXBvbmVudC5jc3MnXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdvcGVuQ2xvc2UnLCBbXHJcbiAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gb3BlbicsIFtcclxuICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3NjYWxlWSgwLjUpJywgb3BhY2l0eTogMCB9KSxcclxuICAgICAgICBhbmltYXRlKCcyMDBtcyBlYXNlJyxcclxuICAgICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAnc2NhbGVZKDEpJywgb3BhY2l0eTogMSB9KSlcclxuICAgICAgXSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ29wZW4gPT4gY2xvc2UnLCBbXHJcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZVkoMSknLCBvcGFjaXR5OiAxIH0pLFxyXG4gICAgICAgIGFuaW1hdGUoJzIwMG1zIGVhc2UnLFxyXG4gICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZVkoMC41KScsIG9wYWNpdHk6IDAgfSkpXHJcbiAgICAgIF0pLFxyXG4gICAgXSlcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb3BvdmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpbmRvdyA9IHdpbmRvdztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG9mZnNldCBvZiB0aGUgcG9wb3ZlciBmcm9tIGl0cyB0YXJnZXQgKGluIHBpeGVscylcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIG9mZnNldCA9IDU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgd2lkdGggb2YgdGhlIHBvcG92ZXIgaW4gcGl4ZWxzIChkZWZhdWx0cyB0byBhdXRvKVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHdpZHRoKHdpZHRoOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3dpZHRoID0gIXdpZHRoID8gJ2F1dG8nIDogYCR7d2lkdGh9cHhgO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdpZHRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fd2lkdGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGhlaWdodCBvZiB0aGUgcG9wb3ZlciBpbiBwaXhlbHMgKGRlZmF1bHRzIHRvIGF1dG8pXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaGVpZ2h0KGhlaWdodDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9oZWlnaHQgPSAhaGVpZ2h0ID8gJ2F1dG8nIDogYCR7aGVpZ2h0fXB4YDtcclxuICB9XHJcblxyXG4gIGdldCBoZWlnaHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIGNsYXNzLWxpc3QgdG8gYXBwbHkgdG8gdGhlIHBvcG92ZXIgY29udGVudFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgY2xhc3NMaXN0ID0gJ2NvbnRlbnRfY29sb3IgcGFydGljbGVfcG9wb3Zlcl9zaGFkb3cnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHRhcmdldE92ZXJyaWRlOiBFdmVudFRhcmdldCA9IG51bGwgYXMgYW55O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIG9wZW5EaXJlY3Rpb246ICdhYm92ZScgfCAnYmVsb3cnID0gJ2Fib3ZlJztcclxuXHJcbiAgQElucHV0KClcclxuICBhbGlnbm1lbnQ6ICdsZWZ0JyB8ICdjZW50ZXInID0gJ2xlZnQnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNjYWxlRm9yTW9iaWxlID0gJzEnO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIG9uIHBvcG92ZXIgb3BlblxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCBvbiBwb3BvdmVyIGNsb3NlXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSBwb3BvdmVyIHNob3VsZCByZW5kZXJcclxuICAgKi9cclxuICByZW5kZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgcG9wb3ZlciBpcyB2aXNpYmxlXHJcbiAgICovXHJcbiAgdmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgd2lkdGggb2YgdGhlIHBvcG92ZXJcclxuICAgKi9cclxuICBwcml2YXRlIF93aWR0aCA9ICdhdXRvJztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGhlaWdodCBvZiB0aGUgcG9wb3ZlclxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2hlaWdodCA9ICdhdXRvJztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGVsZW1lbnQgdG8gdGFyZ2V0XHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIHRhcmdldDogRXZlbnRUYXJnZXQgPSBudWxsIGFzIGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHBvcG92ZXIgY29udGVudCBjb250YWluZXJcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCA9IG51bGwgYXMgYW55O1xyXG5cclxuICAvKipcclxuICAgKiBBcnJheSBvZiBlc2NhcGUga2V5dXAgdW5saXN0ZW4gZnVuY3Rpb25zXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIGVzY2FwZUtleVVwVW5saXN0ZW5lcnM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIERlcGVuZGVuY3kgaW5qZWN0aW9uIHNpdGVcclxuICAgKiBAcGFyYW0gcmVuZGVyZXIgdGhlIEFuZ3VsYXIgcmVuZGVyZXJcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXN0cm95IGNvbXBvbmVudCwgY2xlYW4gdXAgZXZlbnQgbGlzdGVuZXJzXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSBwb3BvdmVyIG9uIGNsaWNrXHJcbiAgICogQHBhcmFtIGV2ZW50IHRoZSBjbGljayBNb3VzZUV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy52aXNpYmxlKSB7XHJcbiAgICAgIGNvbnN0IHtwYWdlWCwgcGFnZVl9ID0gZXZlbnQ7XHJcblxyXG4gICAgICBpZiAocGFnZVggPiAwICYmIHBhZ2VZID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHsgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tIH0gPSB0aGlzLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCB4UG9zaXRpb25WYWxpZCA9IHBhZ2VYID49IGxlZnQgJiYgcGFnZVggPD0gcmlnaHQ7XHJcbiAgICAgICAgY29uc3QgeVBvc2l0aW9uVmFsaWQgPSBwYWdlWSA+PSB0b3AgJiYgcGFnZVkgPD0gYm90dG9tO1xyXG4gICAgICAgIGNvbnN0IHNob3VsZENsb3NlID0gISh4UG9zaXRpb25WYWxpZCAmJiB5UG9zaXRpb25WYWxpZCk7XHJcblxyXG4gICAgICAgIGlmIChzaG91bGRDbG9zZSkge1xyXG4gICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmUtcG9zaXRpb24gcG9wb3ZlciBvbiB3aW5kb3cgcmVzaXplXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXHJcbiAgb25XaW5kb3dSZXNpemUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy52aXNpYmxlKSB7XHJcbiAgICAgIHRoaXMucG9zaXRpb25Qb3BvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIHBvcG92ZXIgZnJvbSBvcGVuIHRvIGNsb3NlZCBvciBjbG9zZWQgdG8gb3BlblxyXG4gICAqIEBwYXJhbSBldmVudCB0aGUgZXZlbnQgd2hvc2UgdGFyZ2V0IGVsZW1lbnQgd2lsbCBhY3QgYXNcclxuICAgKiAgICAgICAgICAgICAgdGhlIHBvcG92ZXIgdGFyZ2V0LiBJZiBhbiBldmVudCBpcyBub3QgcHJvdmlkZWQsXHJcbiAgICogICAgICAgICAgICAgIHRoZSBwb3BvdmVyIHdpbGwgY2xvc2VcclxuICAgKi9cclxuICB0b2dnbGUoZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudGFyZ2V0T3ZlcnJpZGUpIHtcclxuICAgICAgdGhpcy50YXJnZXQgPSB0aGlzLnRhcmdldE92ZXJyaWRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy50YXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0ID8/IGV2ZW50LnRhcmdldCBhcyBFdmVudFRhcmdldDtcclxuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IG51bGwgYXMgYW55O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnZpc2libGUgJiYgdGhpcy50YXJnZXQpIHtcclxuICAgICAgdGhpcy5vcGVuKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgYW5pbWF0aW9uIHN0YXJ0XHJcbiAgICogQHBhcmFtIGV2ZW50IHRoZSBBbmltYXRpb25FdmVudFxyXG4gICAqL1xyXG4gIG9uQW5pbWF0aW9uU3RhcnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ29wZW4nKSB7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyID0gZXZlbnQuZWxlbWVudDtcclxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVycygpO1xyXG4gICAgICB0aGlzLnBvc2l0aW9uUG9wb3ZlcigpO1xyXG4gICAgICB0aGlzLm9wZW5lZC5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgYW5pbWF0aW9uIGVuZFxyXG4gICAqIEBwYXJhbSBldmVudCB0aGUgQW5pbWF0aW9uRXZlbnRcclxuICAgKi9cclxuICBvbkFuaW1hdGlvbkRvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ2Nsb3NlJykge1xyXG4gICAgICB0aGlzLnJlbmRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XHJcbiAgICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gdGhlIHBvcG92ZXJcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgb3BlbigpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSB0aGUgcG9wb3ZlclxyXG4gICAqL1xyXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUG9zaXRpb24gdGhlIHBvcG92ZXJcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcG9zaXRpb25Qb3BvdmVyKCk6IHZvaWQge1xyXG4gICAgY29uc3Qge2xlZnQsIHRvcCwgYm90dG9tLCB3aWR0aH0gPSAodGhpcy50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3Qge29mZnNldEhlaWdodCwgb2Zmc2V0V2lkdGh9ID0gdGhpcy5jb250YWluZXI7XHJcbiAgICBjb25zdCBwb3BvdmVyQm90dG9tTGVmdEFuY2hvciA9IGJvdHRvbTtcclxuICAgIGNvbnN0IGF2YWlsYWJsZUJvdHRvbVNwYWNlID0gd2luZG93LmlubmVySGVpZ2h0IC0gcG9wb3ZlckJvdHRvbUxlZnRBbmNob3I7XHJcbiAgICBjb25zdCBhdmFpbGFibGVUb3BTcGFjZSA9IHRvcDtcclxuICAgIGNvbnN0IG9mZnNldExpc3RIZWlnaHQgPSBvZmZzZXRIZWlnaHQgKyB0aGlzLm9mZnNldDtcclxuICAgIGxldCB0cmFuc2Zvcm1PcmlnaW46IHN0cmluZyA9IG51bGwgYXMgYW55O1xyXG4gICAgbGV0IHBvc2l0aW9uVG9wOiBzdHJpbmcgPSBudWxsIGFzIGFueTtcclxuXHJcbiAgICBjb25zdCBjYW5PcGVuQWJvdmUgPSBhdmFpbGFibGVUb3BTcGFjZSA+IG9mZnNldExpc3RIZWlnaHQ7XHJcbiAgICBjb25zdCBjYW5PcGVuQmVsb3cgPSBhdmFpbGFibGVCb3R0b21TcGFjZSA+IG9mZnNldExpc3RIZWlnaHQ7XHJcblxyXG4gICAgaWYgKGNhbk9wZW5BYm92ZSAmJiB0aGlzLm9wZW5EaXJlY3Rpb24gPT09ICdhYm92ZScpIHtcclxuICAgICAgdHJhbnNmb3JtT3JpZ2luID0gJ2JvdHRvbSBsZWZ0JztcclxuICAgICAgcG9zaXRpb25Ub3AgPSBgJHt0b3AgLSBvZmZzZXRMaXN0SGVpZ2h0fXB4YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2FuT3BlbkJlbG93ICYmIHRoaXMub3BlbkRpcmVjdGlvbiA9PT0gJ2JlbG93Jykge1xyXG4gICAgICB0cmFuc2Zvcm1PcmlnaW4gPSAndG9wIGxlZnQnO1xyXG4gICAgICBwb3NpdGlvblRvcCA9IGAke3BvcG92ZXJCb3R0b21MZWZ0QW5jaG9yICsgdGhpcy5vZmZzZXR9cHhgO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdHJhbnNmb3JtT3JpZ2luKSB7XHJcbiAgICAgIGlmIChhdmFpbGFibGVUb3BTcGFjZSA+IG9mZnNldExpc3RIZWlnaHQpIHtcclxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW4gPSAnYm90dG9tIGxlZnQnO1xyXG4gICAgICAgIHBvc2l0aW9uVG9wID0gYCR7dG9wIC0gb2Zmc2V0TGlzdEhlaWdodH1weGA7XHJcbiAgICAgIH0gZWxzZSBpZiAoYXZhaWxhYmxlQm90dG9tU3BhY2UgPiBvZmZzZXRMaXN0SGVpZ2h0KSB7XHJcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luID0gJ3RvcCBsZWZ0JztcclxuICAgICAgICBwb3NpdGlvblRvcCA9IGAke3BvcG92ZXJCb3R0b21MZWZ0QW5jaG9yICsgdGhpcy5vZmZzZXR9cHhgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChvZmZzZXRIZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcclxuICAgICAgICAgIHBvc2l0aW9uVG9wID0gJzBweCc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZVNwYWNlID0gd2luZG93LmlubmVySGVpZ2h0IC0gb2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgcG9zaXRpb25Ub3AgPSBgJHtTdHJpbmcoYXZhaWxhYmxlU3BhY2UgLyAyKX1weGA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW4gPSAndG9wIGxlZnQnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGxlZnRQb3NpdGlvbiA9IGxlZnQ7XHJcblxyXG4gICAgaWYgKHRoaXMuYWxpZ25tZW50ID09PSAnY2VudGVyJykge1xyXG4gICAgICBsZWZ0UG9zaXRpb24gPSAobGVmdFBvc2l0aW9uIC0gKG9mZnNldFdpZHRoLzIpKSArICh3aWR0aC8yKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoKGxlZnQgKyBvZmZzZXRXaWR0aCkgPiB3aW5kb3cuaW5uZXJXaWR0aCkge1xyXG4gICAgICBsZWZ0UG9zaXRpb24gPSBsZWZ0IC0gKChsZWZ0ICsgb2Zmc2V0V2lkdGgpIC0gd2luZG93LmlubmVyV2lkdGgpIC0gMTA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGxlZnRQb3NpdGlvbiA8IDApIHtcclxuICAgICAgbGVmdFBvc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuY29udGFpbmVyLCAndHJhbnNmb3JtLW9yaWdpbicsIHRyYW5zZm9ybU9yaWdpbik7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuY29udGFpbmVyLCAnbGVmdCcsIGAke2xlZnRQb3NpdGlvbn1weGApO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmNvbnRhaW5lciwgJ3RvcCcsIHBvc2l0aW9uVG9wKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBlc2NhcGUga2V5dXAgbGlzdGVuZXJzIHRvIGFsbCBmb2N1c2FibGUgZWxlbWVudHMgdG8gY2xvc2VcclxuICAgKiB0aGUgcG9wb3ZlclxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRFdmVudExpc3RlbmVycygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvY3VzYWJsZUVsZW1lbnRzID0gdGhpcy5nZXRGb2N1c2FibGVFbGVtZW50cyh0aGlzLmNvbnRhaW5lcik7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGZvY3VzYWJsZUVsZW1lbnRzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsICdkYXRhLWRpYWxvZy1jbG9zZS1vdmVycmlkZScsICd0cnVlJyk7XHJcbiAgICAgIHRoaXMuZXNjYXBlS2V5VXBVbmxpc3RlbmVycy5wdXNoKFxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdrZXl1cCcsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdFc2MnIHx8IGtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFsbCBmb2N1c2FibGUgY2hpbGQgZWxlbWVudHMgb2YgdGhlIGlucHV0IG5vZGVcclxuICAgKiBAcGFyYW0gbm9kZSB0aGUgbm9kZSB0byBxdWVyeSBmb3IgZm9jdXNhYmxlIGNoaWxkcmVuXHJcbiAgICogQHBhcmFtIGVsZW1lbnRzIHRoZSBmb3VuZCBmb2N1c2FibGUgZWxlbWVudHNcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0Rm9jdXNhYmxlRWxlbWVudHMobm9kZTogTm9kZSwgZWxlbWVudHM6IEFycmF5PEVsZW1lbnQ+ID0gW10pOiBBcnJheTxhbnk+IHtcclxuICAgIGlmIChub2RlLmhhc0NoaWxkTm9kZXMoKSkge1xyXG4gICAgICBub2RlLmNoaWxkTm9kZXMuZm9yRWFjaChjaGlsZCA9PiBlbGVtZW50cy5jb25jYXQodGhpcy5nZXRGb2N1c2FibGVFbGVtZW50cyhjaGlsZCwgZWxlbWVudHMpKSk7XHJcblxyXG4gICAgICBpZiAoJ3RhYkluZGV4JyBpbiBub2RlKSB7XHJcbiAgICAgICAgY29uc3QgeyB0YWJJbmRleCB9ID0gbm9kZSBhcyB1bmtub3duIGFzIEhUTUxPclNWR0VsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmICh0YWJJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICBlbGVtZW50cy5wdXNoKG5vZGUgYXMgYW55KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBlbGVtZW50cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICgndGFiSW5kZXgnIGluIG5vZGUpIHtcclxuICAgICAgICBjb25zdCB7IHRhYkluZGV4IH0gPSBub2RlIGFzIHVua25vd24gYXMgSFRNTE9yU1ZHRWxlbWVudDtcclxuXHJcbiAgICAgICAgaWYgKHRhYkluZGV4ID49IDApIHtcclxuICAgICAgICAgIGVsZW1lbnRzLnB1c2gobm9kZSBhcyBhbnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGVsZW1lbnRzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW52b2tlIGVzY2FwZSBrZXl1cCB1bmxpc3RlbiBmdW5jdGlvbnNcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IHVubGlzdGVuZXIgb2YgdGhpcy5lc2NhcGVLZXlVcFVubGlzdGVuZXJzKSB7XHJcbiAgICAgIHVubGlzdGVuZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVzY2FwZUtleVVwVW5saXN0ZW5lcnMgPSBbXTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJyZW5kZXJcIiBjbGFzcz1cInBhcnRpY2xlX3BvcG92ZXJfb3ZlcmxheVwiIFtzdHlsZS5zY2FsZV09XCJ3aW5kb3cuaW5uZXJXaWR0aCA+IDc2OCA/IDEgOiBzY2FsZUZvck1vYmlsZVwiPlxuICA8ZGl2IFtjZGtUcmFwRm9jdXNdPVwicmVuZGVyICYmIHZpc2libGVcIlxuICAgICAgIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCJcbiAgICAgICBbQG9wZW5DbG9zZV09XCJ2aXNpYmxlID8gJ29wZW4nIDogJ2Nsb3NlJ1wiXG4gICAgICAgW25nU3R5bGVdPVwieyAnd2lkdGgnOiB3aWR0aCwgJ2hlaWdodCc6IGhlaWdodCB9XCJcbiAgICAgICBbbmdDbGFzc109XCJjbGFzc0xpc3RcIlxuICAgICAgIChAb3BlbkNsb3NlLnN0YXJ0KT1cIm9uQW5pbWF0aW9uU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgKEBvcGVuQ2xvc2UuZG9uZSk9XCJvbkFuaW1hdGlvbkRvbmUoJGV2ZW50KVwiXG4gICAgICAgY2xhc3M9XCJwb3NpdGlvbl9hYnNvbHV0ZSBwYXJ0aWNsZV9wb3BvdmVyXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,24 @@
1
+ import { A11yModule } from '@angular/cdk/a11y';
2
+ import { NgModule } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { PopoverComponent } from './popover.component';
5
+ import * as i0 from "@angular/core";
6
+ export class ParticlePopoverModule {
7
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ParticlePopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.2", ngImport: i0, type: ParticlePopoverModule, declarations: [PopoverComponent], imports: [CommonModule,
9
+ A11yModule], exports: [PopoverComponent] });
10
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ParticlePopoverModule, imports: [CommonModule,
11
+ A11yModule] });
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ParticlePopoverModule, decorators: [{
14
+ type: NgModule,
15
+ args: [{
16
+ declarations: [PopoverComponent],
17
+ imports: [
18
+ CommonModule,
19
+ A11yModule
20
+ ],
21
+ exports: [PopoverComponent]
22
+ }]
23
+ }] });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvcG9wb3Zlci9wb3BvdmVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7O0FBVXRELE1BQU0sT0FBTyxxQkFBcUI7dUdBQXJCLHFCQUFxQjt3R0FBckIscUJBQXFCLGlCQVBqQixnQkFBZ0IsYUFFekIsWUFBWTtZQUNaLFVBQVUsYUFFTixnQkFBZ0I7d0dBRWYscUJBQXFCLFlBTDFCLFlBQVk7WUFDWixVQUFVOzsyRkFJTCxxQkFBcUI7a0JBUmpDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzlCLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFVBQVU7cUJBQ2I7b0JBQ0gsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQTExeU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudH0gZnJvbSAnLi9wb3BvdmVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1BvcG92ZXJDb21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBBMTF5TW9kdWxlXG4gICAgXSxcbiAgZXhwb3J0czogW1BvcG92ZXJDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIFBhcnRpY2xlUG9wb3Zlck1vZHVsZSB7IH1cbiJdfQ==
@@ -0,0 +1,28 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ProfilePicComponent } from './profile-pic.component';
4
+ import { ParticleTooltipModule } from '../tooltip/tooltip.module';
5
+ import * as i0 from "@angular/core";
6
+ export class ParticleProfilePicModule {
7
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ParticleProfilePicModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.2", ngImport: i0, type: ParticleProfilePicModule, declarations: [ProfilePicComponent], imports: [CommonModule,
9
+ ParticleTooltipModule], exports: [ProfilePicComponent] });
10
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ParticleProfilePicModule, imports: [CommonModule,
11
+ ParticleTooltipModule] });
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ParticleProfilePicModule, decorators: [{
14
+ type: NgModule,
15
+ args: [{
16
+ declarations: [
17
+ ProfilePicComponent
18
+ ],
19
+ imports: [
20
+ CommonModule,
21
+ ParticleTooltipModule
22
+ ],
23
+ exports: [
24
+ ProfilePicComponent
25
+ ]
26
+ }]
27
+ }] });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGljbGUtcHJvZmlsZS1waWMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3Byb2ZpbGUtcGljL3BhcnRpY2xlLXByb2ZpbGUtcGljLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7QUFjaEUsTUFBTSxPQUFPLHdCQUF3Qjt1R0FBeEIsd0JBQXdCO3dHQUF4Qix3QkFBd0IsaUJBVmpDLG1CQUFtQixhQUdmLFlBQVk7WUFDWixxQkFBcUIsYUFHekIsbUJBQW1CO3dHQUdWLHdCQUF3QixZQVA3QixZQUFZO1lBQ1oscUJBQXFCOzsyRkFNaEIsd0JBQXdCO2tCQVpwQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixtQkFBbUI7cUJBQ3BCO29CQUNDLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLHFCQUFxQjtxQkFDeEI7b0JBQ0gsT0FBTyxFQUFFO3dCQUNQLG1CQUFtQjtxQkFDcEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7UHJvZmlsZVBpY0NvbXBvbmVudH0gZnJvbSAnLi9wcm9maWxlLXBpYy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1BhcnRpY2xlVG9vbHRpcE1vZHVsZX0gZnJvbSAnLi4vdG9vbHRpcC90b29sdGlwLm1vZHVsZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgUHJvZmlsZVBpY0NvbXBvbmVudFxyXG4gIF0sXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIFBhcnRpY2xlVG9vbHRpcE1vZHVsZVxyXG4gICAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBQcm9maWxlUGljQ29tcG9uZW50XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFydGljbGVQcm9maWxlUGljTW9kdWxlIHtcclxufVxyXG4iXX0=