@flywheel-io/vision 2.10.2 → 19.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 (270) hide show
  1. package/README.md +5 -5
  2. package/components/alert/alert.component.d.ts +1 -1
  3. package/components/alert/alert.module.d.ts +8 -5
  4. package/components/app-icon/app-icon.component.d.ts +1 -1
  5. package/components/app-icon/app-icon.module.d.ts +7 -4
  6. package/components/avatar/avatar.component.d.ts +1 -1
  7. package/components/avatar/avatar.module.d.ts +7 -4
  8. package/components/badge/badge.component.d.ts +1 -1
  9. package/components/badge/badge.module.d.ts +6 -3
  10. package/components/breadcrumbs/breadcrumbs.component.d.ts +1 -1
  11. package/components/breadcrumbs/breadcrumbs.module.d.ts +8 -5
  12. package/components/breadcrumbs/crumb.component.d.ts +1 -1
  13. package/components/button/button.component.d.ts +1 -1
  14. package/components/button/button.directives.d.ts +5 -5
  15. package/components/button/button.module.d.ts +9 -6
  16. package/components/button-group/button-group.component.d.ts +1 -1
  17. package/components/button-group/button-group.module.d.ts +8 -5
  18. package/components/button-toggle/button-toggle-item/button-toggle-item.component.d.ts +1 -1
  19. package/components/button-toggle/button-toggle.component.d.ts +1 -1
  20. package/components/button-toggle/button-toggle.module.d.ts +8 -5
  21. package/components/card/card-attribute/card-attribute.component.d.ts +1 -1
  22. package/components/card/card-author/card-author.component.d.ts +1 -1
  23. package/components/card/card-content/card-content.component.d.ts +1 -1
  24. package/components/card/card-footer/card-footer.component.d.ts +1 -1
  25. package/components/card/card-header/card-header.component.d.ts +1 -1
  26. package/components/card/card.component.d.ts +1 -1
  27. package/components/card/card.module.d.ts +13 -10
  28. package/components/checkbox/checkbox.component.d.ts +1 -1
  29. package/components/checkbox/checkbox.module.d.ts +7 -4
  30. package/components/chip/chip.component.d.ts +1 -1
  31. package/components/chip/chip.module.d.ts +8 -5
  32. package/components/contained-input/contained-input.component.d.ts +1 -1
  33. package/components/contained-input/contained-input.module.d.ts +10 -7
  34. package/components/date-input/date-input.component.d.ts +1 -1
  35. package/components/date-input/date-input.module.d.ts +8 -5
  36. package/components/dialog/dialog-actions.component.d.ts +1 -1
  37. package/components/dialog/dialog-confirm.component.d.ts +1 -1
  38. package/components/dialog/dialog-content.component.d.ts +1 -1
  39. package/components/dialog/dialog-header.component.d.ts +1 -1
  40. package/components/dialog/dialog-simple.component.d.ts +1 -1
  41. package/components/dialog/dialog.component.d.ts +1 -1
  42. package/components/dialog/dialogs.module.d.ts +16 -13
  43. package/components/form-heading/form-heading.component.d.ts +1 -1
  44. package/components/form-heading/form-heading.module.d.ts +9 -6
  45. package/components/icon/icon.component.d.ts +1 -1
  46. package/components/icon/icon.module.d.ts +6 -3
  47. package/components/icon-button/icon-button.component.d.ts +1 -1
  48. package/components/icon-button/icon-button.module.d.ts +7 -4
  49. package/components/layouts/context/context.component.d.ts +1 -1
  50. package/components/layouts/grid/grid.component.d.ts +2 -2
  51. package/components/layouts/layout-group.component.d.ts +1 -1
  52. package/components/layouts/layouts.module.d.ts +12 -9
  53. package/components/layouts/panel/panel.component.d.ts +1 -1
  54. package/components/layouts/sidebar/sidebar.component.d.ts +1 -1
  55. package/components/layouts/toolbar/toolbar.component.d.ts +1 -1
  56. package/components/menu/menu-close-triggers.directive.d.ts +1 -1
  57. package/components/menu/menu-container/menu-container.component.d.ts +1 -1
  58. package/components/menu/menu-header/menu-header.component.d.ts +1 -1
  59. package/components/menu/menu-item/menu-item.component.d.ts +1 -1
  60. package/components/menu/menu-item-group/menu-item-group.component.d.ts +1 -1
  61. package/components/menu/menu-separator/menu-separator.component.d.ts +1 -1
  62. package/components/menu/menu-sub-item/menu-sub-item.component.d.ts +1 -1
  63. package/components/menu/menu.component.d.ts +1 -1
  64. package/components/menu/menu.module.d.ts +22 -19
  65. package/components/navbar/navbar-header/navbar-header.component.d.ts +1 -1
  66. package/components/navbar/navbar-item/navbar-item.component.d.ts +1 -1
  67. package/components/navbar/navbar-sub-item/navbar-sub-item.component.d.ts +1 -1
  68. package/components/navbar/navbar.component.d.ts +1 -1
  69. package/components/navbar/navbar.module.d.ts +16 -13
  70. package/components/number-input/number-input.component.d.ts +1 -1
  71. package/components/number-input/number-input.module.d.ts +8 -5
  72. package/components/paginator/paginator-advanced/paginator-advanced.component.d.ts +1 -1
  73. package/components/paginator/paginator.component.d.ts +1 -1
  74. package/components/paginator/paginator.module.d.ts +12 -9
  75. package/components/phone-input/phone-input.component.d.ts +1 -1
  76. package/components/phone-input/phone-input.module.d.ts +11 -8
  77. package/components/popover/popover-panel/popover-panel.component.d.ts +1 -1
  78. package/components/popover/popover.component.d.ts +2 -2
  79. package/components/popover/popover.module.d.ts +9 -6
  80. package/components/progress/bar/bar.component.d.ts +1 -1
  81. package/components/progress/progress.module.d.ts +7 -4
  82. package/components/progress/spinner/spinner.component.d.ts +1 -1
  83. package/components/radio/radio-group.component.d.ts +1 -1
  84. package/components/radio/radio.component.d.ts +1 -1
  85. package/components/radio/radio.module.d.ts +8 -5
  86. package/components/section-heading/back-button/back-button.component.d.ts +1 -1
  87. package/components/section-heading/section-heading.component.d.ts +1 -1
  88. package/components/section-heading/section-heading.module.d.ts +10 -7
  89. package/components/section-heading/subsection-heading/subsection-heading.component.d.ts +1 -1
  90. package/components/select-menu/multi-select-menu/multi-select-menu.component.d.ts +1 -1
  91. package/components/select-menu/select-menu.component.d.ts +1 -1
  92. package/components/select-menu/select-menu.module.d.ts +15 -12
  93. package/components/shared/pipes/pipes.module.d.ts +4 -1
  94. package/components/shared/pipes/translate.pipe.d.ts +1 -1
  95. package/components/shared/pipes/trusthtml.pipe.d.ts +1 -1
  96. package/components/snackbar/snackbar/snackbar.component.d.ts +2 -2
  97. package/components/snackbar/snackbar-container/snackbar-container.component.d.ts +1 -1
  98. package/components/snackbar/snackbar.module.d.ts +10 -7
  99. package/components/stepper/step.component.d.ts +2 -2
  100. package/components/stepper/stepper.component.d.ts +1 -1
  101. package/components/stepper/stepper.module.d.ts +9 -6
  102. package/components/switch/switch.component.d.ts +1 -1
  103. package/components/switch/switch.module.d.ts +6 -3
  104. package/components/table/row.d.ts +7 -7
  105. package/components/table/table-dense.component.d.ts +1 -1
  106. package/components/table/table.component.d.ts +1 -1
  107. package/components/table/table.module.d.ts +10 -7
  108. package/components/tabs/tab/tab.component.d.ts +1 -1
  109. package/components/tabs/tab-panel/tab-panel.component.d.ts +1 -1
  110. package/components/tabs/tabs.component.d.ts +1 -1
  111. package/components/tabs/tabs.module.d.ts +9 -6
  112. package/components/tag/tag.component.d.ts +1 -1
  113. package/components/tag/tag.module.d.ts +7 -4
  114. package/components/text-input/text-input.component.d.ts +1 -1
  115. package/components/text-input/text-input.module.d.ts +9 -6
  116. package/components/textarea-input/textarea-input.component.d.ts +1 -1
  117. package/components/textarea-input/textarea-input.module.d.ts +9 -6
  118. package/components/tooltip/tooltip-panel/tooltip-panel.component.d.ts +1 -1
  119. package/components/tooltip/tooltip.component.d.ts +1 -1
  120. package/components/tooltip/tooltip.module.d.ts +11 -8
  121. package/components/wrapped-input/wrapped-input.component.d.ts +1 -1
  122. package/components/wrapped-input/wrapped-input.module.d.ts +7 -4
  123. package/fesm2022/flywheel-io-vision.mjs +1087 -836
  124. package/fesm2022/flywheel-io-vision.mjs.map +1 -1
  125. package/package.json +14 -7
  126. package/scss/icons/_icon-font-face.scss +5 -5
  127. package/scss/icons/_icon-glyphs.scss +2 -2
  128. package/scss/icons/_icon-variables.scss +350 -349
  129. package/styles.css +0 -1
  130. package/esm2022/color.utils.mjs +0 -27
  131. package/esm2022/components/alert/alert.component.mjs +0 -34
  132. package/esm2022/components/alert/alert.module.mjs +0 -32
  133. package/esm2022/components/app-icon/app-icon.component.mjs +0 -63
  134. package/esm2022/components/app-icon/app-icon.module.mjs +0 -28
  135. package/esm2022/components/avatar/avatar.component.mjs +0 -82
  136. package/esm2022/components/avatar/avatar.module.mjs +0 -28
  137. package/esm2022/components/avatar-list/avatar-list.component.mjs +0 -87
  138. package/esm2022/components/badge/badge.component.mjs +0 -45
  139. package/esm2022/components/badge/badge.module.mjs +0 -24
  140. package/esm2022/components/breadcrumbs/breadcrumbs.component.mjs +0 -22
  141. package/esm2022/components/breadcrumbs/breadcrumbs.module.mjs +0 -33
  142. package/esm2022/components/breadcrumbs/crumb.component.mjs +0 -34
  143. package/esm2022/components/button/button.component.mjs +0 -59
  144. package/esm2022/components/button/button.directives.mjs +0 -129
  145. package/esm2022/components/button/button.module.mjs +0 -53
  146. package/esm2022/components/button-group/button-group.component.mjs +0 -131
  147. package/esm2022/components/button-group/button-group.module.mjs +0 -32
  148. package/esm2022/components/button-toggle/button-toggle-item/button-toggle-item.component.mjs +0 -56
  149. package/esm2022/components/button-toggle/button-toggle.component.mjs +0 -137
  150. package/esm2022/components/button-toggle/button-toggle.module.mjs +0 -33
  151. package/esm2022/components/card/card-attribute/card-attribute.component.mjs +0 -17
  152. package/esm2022/components/card/card-author/card-author.component.mjs +0 -15
  153. package/esm2022/components/card/card-content/card-content.component.mjs +0 -11
  154. package/esm2022/components/card/card-footer/card-footer.component.mjs +0 -29
  155. package/esm2022/components/card/card-header/card-header.component.mjs +0 -24
  156. package/esm2022/components/card/card.component.mjs +0 -27
  157. package/esm2022/components/card/card.module.mjs +0 -57
  158. package/esm2022/components/checkbox/checkbox.component.mjs +0 -79
  159. package/esm2022/components/checkbox/checkbox.module.mjs +0 -31
  160. package/esm2022/components/chip/chip.component.mjs +0 -55
  161. package/esm2022/components/chip/chip.module.mjs +0 -32
  162. package/esm2022/components/chip-list/chip-list.component.mjs +0 -96
  163. package/esm2022/components/contained-input/contained-input.component.mjs +0 -86
  164. package/esm2022/components/contained-input/contained-input.module.mjs +0 -40
  165. package/esm2022/components/date-input/date-input.component.mjs +0 -139
  166. package/esm2022/components/date-input/date-input.module.mjs +0 -32
  167. package/esm2022/components/dialog/dialog-actions.component.mjs +0 -32
  168. package/esm2022/components/dialog/dialog-confirm.component.mjs +0 -120
  169. package/esm2022/components/dialog/dialog-content.component.mjs +0 -38
  170. package/esm2022/components/dialog/dialog-header.component.mjs +0 -35
  171. package/esm2022/components/dialog/dialog-simple.component.mjs +0 -105
  172. package/esm2022/components/dialog/dialog.component.mjs +0 -93
  173. package/esm2022/components/dialog/dialog.service.mjs +0 -103
  174. package/esm2022/components/dialog/dialogs.module.mjs +0 -75
  175. package/esm2022/components/form-heading/form-heading.component.mjs +0 -30
  176. package/esm2022/components/form-heading/form-heading.module.mjs +0 -36
  177. package/esm2022/components/forms/validators.mjs +0 -81
  178. package/esm2022/components/icon/icon.component.mjs +0 -69
  179. package/esm2022/components/icon/icon.module.mjs +0 -24
  180. package/esm2022/components/icon/icon.types.mjs +0 -352
  181. package/esm2022/components/icon-button/icon-button.component.mjs +0 -40
  182. package/esm2022/components/icon-button/icon-button.module.mjs +0 -28
  183. package/esm2022/components/layouts/context/context.component.mjs +0 -46
  184. package/esm2022/components/layouts/grid/grid.component.mjs +0 -62
  185. package/esm2022/components/layouts/layout-group.component.mjs +0 -36
  186. package/esm2022/components/layouts/layouts.module.mjs +0 -57
  187. package/esm2022/components/layouts/panel/panel.component.mjs +0 -32
  188. package/esm2022/components/layouts/sidebar/sidebar.component.mjs +0 -26
  189. package/esm2022/components/layouts/toolbar/toolbar.component.mjs +0 -21
  190. package/esm2022/components/menu/menu-close-triggers.directive.mjs +0 -44
  191. package/esm2022/components/menu/menu-container/menu-container.component.mjs +0 -126
  192. package/esm2022/components/menu/menu-header/menu-header.component.mjs +0 -11
  193. package/esm2022/components/menu/menu-item/menu-item.component.mjs +0 -152
  194. package/esm2022/components/menu/menu-item-group/menu-item-group.component.mjs +0 -31
  195. package/esm2022/components/menu/menu-separator/menu-separator.component.mjs +0 -11
  196. package/esm2022/components/menu/menu-sub-item/menu-sub-item.component.mjs +0 -103
  197. package/esm2022/components/menu/menu.component.mjs +0 -132
  198. package/esm2022/components/menu/menu.module.mjs +0 -95
  199. package/esm2022/components/navbar/navbar-header/navbar-header.component.mjs +0 -11
  200. package/esm2022/components/navbar/navbar-item/navbar-item.component.mjs +0 -95
  201. package/esm2022/components/navbar/navbar-sub-item/navbar-sub-item.component.mjs +0 -76
  202. package/esm2022/components/navbar/navbar.component.mjs +0 -75
  203. package/esm2022/components/navbar/navbar.module.mjs +0 -67
  204. package/esm2022/components/number-input/number-input.component.mjs +0 -122
  205. package/esm2022/components/number-input/number-input.module.mjs +0 -32
  206. package/esm2022/components/paginator/paginator-advanced/paginator-advanced.component.mjs +0 -123
  207. package/esm2022/components/paginator/paginator.component.mjs +0 -133
  208. package/esm2022/components/paginator/paginator.model.mjs +0 -2
  209. package/esm2022/components/paginator/paginator.module.mjs +0 -49
  210. package/esm2022/components/phone-input/country-code.data.mjs +0 -495
  211. package/esm2022/components/phone-input/phone-input.component.mjs +0 -285
  212. package/esm2022/components/phone-input/phone-input.model.mjs +0 -2
  213. package/esm2022/components/phone-input/phone-input.module.mjs +0 -47
  214. package/esm2022/components/popover/popover-panel/popover-panel.component.mjs +0 -32
  215. package/esm2022/components/popover/popover.component.mjs +0 -164
  216. package/esm2022/components/popover/popover.module.mjs +0 -42
  217. package/esm2022/components/progress/bar/bar.component.mjs +0 -83
  218. package/esm2022/components/progress/progress.module.mjs +0 -29
  219. package/esm2022/components/progress/spinner/spinner.component.mjs +0 -101
  220. package/esm2022/components/radio/radio-group.component.mjs +0 -117
  221. package/esm2022/components/radio/radio.component.mjs +0 -48
  222. package/esm2022/components/radio/radio.module.mjs +0 -36
  223. package/esm2022/components/section-heading/back-button/back-button.component.mjs +0 -30
  224. package/esm2022/components/section-heading/section-heading.component.mjs +0 -31
  225. package/esm2022/components/section-heading/section-heading.module.mjs +0 -42
  226. package/esm2022/components/section-heading/subsection-heading/subsection-heading.component.mjs +0 -19
  227. package/esm2022/components/select-menu/multi-select-menu/multi-select-menu.component.mjs +0 -374
  228. package/esm2022/components/select-menu/select-menu.component.mjs +0 -343
  229. package/esm2022/components/select-menu/select-menu.module.mjs +0 -60
  230. package/esm2022/components/shared/pipes/pipes.module.mjs +0 -36
  231. package/esm2022/components/shared/pipes/translate.pipe.mjs +0 -40
  232. package/esm2022/components/shared/pipes/trusthtml.pipe.mjs +0 -21
  233. package/esm2022/components/shared/services/menu-manager.service.mjs +0 -27
  234. package/esm2022/components/shared/translation.service.mjs +0 -26
  235. package/esm2022/components/snackbar/snackbar/snackbar.component.mjs +0 -95
  236. package/esm2022/components/snackbar/snackbar-container/snackbar-container.component.mjs +0 -63
  237. package/esm2022/components/snackbar/snackbar-message.model.mjs +0 -2
  238. package/esm2022/components/snackbar/snackbar-timer.service.mjs +0 -29
  239. package/esm2022/components/snackbar/snackbar.module.mjs +0 -41
  240. package/esm2022/components/snackbar/snackbar.service.mjs +0 -36
  241. package/esm2022/components/stepper/step.component.mjs +0 -113
  242. package/esm2022/components/stepper/stepper.component.mjs +0 -95
  243. package/esm2022/components/stepper/stepper.module.mjs +0 -41
  244. package/esm2022/components/switch/switch.component.mjs +0 -73
  245. package/esm2022/components/switch/switch.module.mjs +0 -24
  246. package/esm2022/components/table/cell.mjs +0 -151
  247. package/esm2022/components/table/row.mjs +0 -164
  248. package/esm2022/components/table/table-dense.component.mjs +0 -38
  249. package/esm2022/components/table/table.component.mjs +0 -38
  250. package/esm2022/components/table/table.module.mjs +0 -91
  251. package/esm2022/components/tabs/tab/tab.component.mjs +0 -79
  252. package/esm2022/components/tabs/tab-panel/tab-panel.component.mjs +0 -19
  253. package/esm2022/components/tabs/tabs.component.mjs +0 -68
  254. package/esm2022/components/tabs/tabs.module.mjs +0 -38
  255. package/esm2022/components/tag/tag.component.mjs +0 -25
  256. package/esm2022/components/tag/tag.module.mjs +0 -28
  257. package/esm2022/components/text-input/text-input.component.mjs +0 -129
  258. package/esm2022/components/text-input/text-input.module.mjs +0 -35
  259. package/esm2022/components/textarea-input/textarea-input.component.mjs +0 -95
  260. package/esm2022/components/textarea-input/textarea-input.module.mjs +0 -36
  261. package/esm2022/components/tooltip/tooltip-panel/tooltip-panel.component.mjs +0 -92
  262. package/esm2022/components/tooltip/tooltip.component.mjs +0 -59
  263. package/esm2022/components/tooltip/tooltip.directive.mjs +0 -177
  264. package/esm2022/components/tooltip/tooltip.module.mjs +0 -50
  265. package/esm2022/components/typeahead/typeahead.component.mjs +0 -264
  266. package/esm2022/components/wrapped-input/wrapped-input.component.mjs +0 -34
  267. package/esm2022/components/wrapped-input/wrapped-input.module.mjs +0 -28
  268. package/esm2022/directives/menu-register.directive.mjs +0 -38
  269. package/esm2022/flywheel-io-vision.mjs +0 -5
  270. package/esm2022/public-api.mjs +0 -132
@@ -1,177 +0,0 @@
1
- import { Overlay } from '@angular/cdk/overlay';
2
- import { ComponentPortal } from '@angular/cdk/portal';
3
- import { computed, Directive, effect, ElementRef, inject, input, model, signal, ViewContainerRef } from '@angular/core';
4
- import { FwTooltipPanelComponent } from './tooltip-panel/tooltip-panel.component';
5
- import * as i0 from "@angular/core";
6
- const delayMap = {
7
- 'none': 0,
8
- 'short': 400,
9
- 'long': 700,
10
- };
11
- const delayNameToMs = (name) => {
12
- return delayMap[name];
13
- };
14
- const positionMap = {
15
- 'above': { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: 3 },
16
- 'below': { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: -3 },
17
- 'left': { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' },
18
- 'right': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' },
19
- 'none': { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: 3 },
20
- };
21
- /**
22
- * Directive for displaying extra context on hover
23
- * @see [Vision Docs](https://cdn.flywheel.io/docs/vision/master/?path=/docs/components-tooltip--docs)
24
- */
25
- export class FwTooltipDirective {
26
- constructor() {
27
- /***** External Context *****/
28
- this.elementRef = inject(ElementRef);
29
- this.viewContainerRef = inject(ViewContainerRef);
30
- this.overlayService = inject(Overlay);
31
- /***** Internal Refs *****/
32
- this.overlayRef = signal(undefined);
33
- this.tooltipRef = signal(undefined);
34
- /***** Inputs *****/
35
- // a lot of these ideally wouldn't be models,
36
- // but it makes it easier to interact with this from derivative directives
37
- // VS Code pulls the input that shares a name with the directive for giving context
38
- // so putting the top level comment on this input
39
- /**
40
- * Directive for displaying extra context on hover
41
- * @see [Vision Docs](https://cdn.flywheel.io/docs/vision/master/?path=/docs/components-tooltip--docs)
42
- */
43
- this.title = model('Placeholder', {
44
- alias: 'fwTooltip',
45
- });
46
- /**
47
- * direction relative to the parent component that the tooltip will attempt to position itself to
48
- */
49
- this.position = model('above', {
50
- alias: 'fwTooltipPosition',
51
- });
52
- /**
53
- * maximum width of the tooltip in pixels
54
- */
55
- this.maxWidth = model(200, {
56
- alias: 'fwTooltipMaxWidthPx',
57
- });
58
- /**
59
- * amount of delay before the tooltip displays
60
- *
61
- * none (0ms),
62
- * short (400ms),
63
- * long (700ms)
64
- */
65
- this.delayMs = input(400, {
66
- transform: delayNameToMs,
67
- alias: 'fwTooltipDelay',
68
- });
69
- /**
70
- * whether or not the tooltip should have a caret
71
- */
72
- this.displayCaret = input(true, {
73
- alias: 'fwTooltipCaret',
74
- });
75
- this.enabled = model(true, {
76
- alias: 'fwTooltipEnabled',
77
- });
78
- /***** Derived State *****/
79
- this.connectedPositions = computed(() => {
80
- // falback positions for if it doesn't fit in the specified position
81
- // tend towards closer first i.e. 'above' will try 'left' and 'right' before resorting to 'below
82
- const positionPreferenceOrderMap = {
83
- 'above': ['above', 'right', 'left', 'below'],
84
- 'right': ['right', 'below', 'above', 'left'],
85
- 'below': ['below', 'left', 'right', 'above'],
86
- 'left': ['left', 'above', 'below', 'right'],
87
- };
88
- const fallbackNamedPositions = positionPreferenceOrderMap[this.position()];
89
- const connectedPositions = fallbackNamedPositions.map(name => positionMap[name]);
90
- return connectedPositions;
91
- });
92
- this.positionStrategy = computed(() => {
93
- const positionBuilder = this.overlayService.position();
94
- const withOrigin = positionBuilder.flexibleConnectedTo(this.elementRef);
95
- const completedStrategy = withOrigin.withPositions(this.connectedPositions());
96
- return completedStrategy;
97
- });
98
- this.overlayConfig = computed(() => ({
99
- positionStrategy: this.positionStrategy(),
100
- maxWidth: Number(this.maxWidth()),
101
- ScrollStrategyOptions: this.overlayService.scrollStrategies.close(),
102
- disposeOnNavigation: true,
103
- }));
104
- /***** Effects and Methods *****/
105
- this.addMouseEventListeners = effect(() => {
106
- const nativeElement = this.elementRef.nativeElement;
107
- nativeElement.addEventListener('mouseenter', () => {
108
- this.showTooltip();
109
- });
110
- nativeElement.addEventListener('mouseleave', () => {
111
- this.hideTooltip();
112
- });
113
- });
114
- // updates the tooltip panel's caret position if a fallback position is used
115
- this.handlePositionChange = effect(() => {
116
- this.positionChangeSub?.unsubscribe();
117
- this.positionChangeSub = this.positionStrategy().positionChanges.subscribe(positionChange => {
118
- const newPosition = positionChange.connectionPair;
119
- const positionNames = Object.keys(positionMap);
120
- const newPositionName = positionNames.find(name => {
121
- const pos = positionMap[name];
122
- return pos.originX === newPosition.originX &&
123
- pos.originY === newPosition.originY &&
124
- pos.overlayX === newPosition.overlayX &&
125
- pos.overlayY === newPosition.overlayY;
126
- });
127
- if (newPositionName) {
128
- this.tooltipRef()?.setInput('position', newPositionName);
129
- this.tooltipRef()?.changeDetectorRef.detectChanges();
130
- }
131
- });
132
- });
133
- }
134
- ngOnInit() {
135
- this.tooltipPortal = new ComponentPortal(FwTooltipPanelComponent, this.viewContainerRef);
136
- this.overlayRef.set(this.overlayService.create());
137
- }
138
- showTooltip() {
139
- if (!this.enabled() || !this.title()) {
140
- return;
141
- }
142
- const overlayRef = this.overlayRef();
143
- overlayRef.updatePositionStrategy(this.positionStrategy());
144
- if (this.openDelayTimer) {
145
- return;
146
- }
147
- this.openDelayTimer = window.setTimeout(() => {
148
- const tooltipRef = overlayRef.attach(this.tooltipPortal);
149
- this.tooltipRef.set(tooltipRef);
150
- tooltipRef.setInput('title', this.title());
151
- tooltipRef.setInput('position', this.position());
152
- tooltipRef.setInput('maxWidth', this.maxWidth());
153
- tooltipRef.setInput('displayCaret', this.displayCaret());
154
- tooltipRef.changeDetectorRef.detectChanges();
155
- }, this.delayMs());
156
- }
157
- hideTooltip() {
158
- window.clearTimeout(this.openDelayTimer);
159
- this.openDelayTimer = undefined;
160
- this.overlayRef()?.detach();
161
- this.tooltipRef.set(undefined);
162
- }
163
- ngOnDestroy() {
164
- this.positionChangeSub?.unsubscribe();
165
- this.hideTooltip();
166
- }
167
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
168
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.12", type: FwTooltipDirective, isStandalone: true, selector: "[fwTooltip]", inputs: { title: { classPropertyName: "title", publicName: "fwTooltip", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "fwTooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "fwTooltipMaxWidthPx", isSignal: true, isRequired: false, transformFunction: null }, delayMs: { classPropertyName: "delayMs", publicName: "fwTooltipDelay", isSignal: true, isRequired: false, transformFunction: null }, displayCaret: { classPropertyName: "displayCaret", publicName: "fwTooltipCaret", isSignal: true, isRequired: false, transformFunction: null }, enabled: { classPropertyName: "enabled", publicName: "fwTooltipEnabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { title: "fwTooltipChange", position: "fwTooltipPositionChange", maxWidth: "fwTooltipMaxWidthPxChange", enabled: "fwTooltipEnabledChange" }, ngImport: i0 }); }
169
- }
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipDirective, decorators: [{
171
- type: Directive,
172
- args: [{
173
- selector: '[fwTooltip]',
174
- standalone: true,
175
- }]
176
- }] });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsT0FBTyxFQUE2QixNQUFNLHNCQUFzQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pKLE9BQU8sRUFBRSx1QkFBdUIsRUFBa0IsTUFBTSx5Q0FBeUMsQ0FBQzs7QUFLbEcsTUFBTSxRQUFRLEdBQWE7SUFDekIsTUFBTSxFQUFFLENBQUM7SUFDVCxPQUFPLEVBQUUsR0FBRztJQUNaLE1BQU0sRUFBRSxHQUFHO0NBQ1osQ0FBQTtBQUVELE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBaUIsRUFBVSxFQUFFO0lBQ2xELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQTtBQUdELE1BQU0sV0FBVyxHQUF5QztJQUN4RCxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDbEcsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDbkcsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9B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QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQzsrR0F6TFUsa0JBQWtCO21HQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBSjlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbm5lY3RlZFBvc2l0aW9uLCBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIGNvbXB1dGVkLCBEaXJlY3RpdmUsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGd1Rvb2x0aXBQYW5lbENvbXBvbmVudCwgU2ltcGxlUG9zaXRpb24gfSBmcm9tICcuL3Rvb2x0aXAtcGFuZWwvdG9vbHRpcC1wYW5lbC5jb21wb25lbnQnO1xuXG50eXBlIERlbGF5TGVuZ3RoID0gJ25vbmUnIHwgJ3Nob3J0JyB8ICdsb25nJztcbnR5cGUgRGVsYXlNYXAgPSB7IFtLIGluIERlbGF5TGVuZ3RoXTogbnVtYmVyIH07XG5cbmNvbnN0IGRlbGF5TWFwOiBEZWxheU1hcCA9IHtcbiAgJ25vbmUnOiAwLFxuICAnc2hvcnQnOiA0MDAsXG4gICdsb25nJzogNzAwLFxufVxuXG5jb25zdCBkZWxheU5hbWVUb01zID0gKG5hbWU6IERlbGF5TGVuZ3RoKTogbnVtYmVyID0+IHtcbiAgcmV0dXJuIGRlbGF5TWFwW25hbWVdO1xufVxuXG5cbmNvbnN0IHBvc2l0aW9uTWFwOiB7IFtrZXk6IHN0cmluZ106IENvbm5lY3RlZFBvc2l0aW9uIH0gPSB7XG4gICdhYm92ZSc6IHsgb3JpZ2luWDogJ2NlbnRlcicsIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogJ2NlbnRlcicsIG92ZXJsYXlZOiAnYm90dG9tJywgb2Zmc2V0WTogMyB9LFxuICAnYmVsb3cnOiB7IG9yaWdpblg6ICdjZW50ZXInLCBvcmlnaW5ZOiAnYm90dG9tJywgb3ZlcmxheVg6ICdjZW50ZXInLCBvdmVybGF5WTogJ3RvcCcsIG9mZnNldFk6IC0zIH0sXG4gICdsZWZ0JzogeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAnY2VudGVyJywgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ2NlbnRlcicgfSxcbiAgJ3JpZ2h0JzogeyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogJ2NlbnRlcicsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2NlbnRlcicgfSxcbiAgJ25vbmUnOiB7IG9yaWdpblg6ICdjZW50ZXInLCBvcmlnaW5ZOiAndG9wJywgb3ZlcmxheVg6ICdjZW50ZXInLCBvdmVybGF5WTogJ2JvdHRvbScsIG9mZnNldFk6IDMgfSxcbn07XG5cblxuLyoqXG4gKiBEaXJlY3RpdmUgZm9yIGRpc3BsYXlpbmcgZXh0cmEgY29udGV4dCBvbiBob3ZlclxuICogQHNlZSBbVmlzaW9uIERvY3NdKGh0dHBzOi8vY2RuLmZseXdoZWVsLmlvL2RvY3MvdmlzaW9uL21hc3Rlci8/cGF0aD0vZG9jcy9jb21wb25lbnRzLXRvb2x0aXAtLWRvY3MpXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmd1Rvb2x0aXBdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRndUb29sdGlwRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKioqKiBFeHRlcm5hbCBDb250ZXh0ICoqKioqL1xuXG4gIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSBvdmVybGF5U2VydmljZSA9IGluamVjdChPdmVybGF5KTtcblxuICAvKioqKiogSW50ZXJuYWwgUmVmcyAqKioqKi9cblxuICBwcml2YXRlIG92ZXJsYXlSZWYgPSBzaWduYWw8T3ZlcmxheVJlZiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSB0b29sdGlwUmVmID0gc2lnbmFsPENvbXBvbmVudFJlZjxGd1Rvb2x0aXBQYW5lbENvbXBvbmVudD4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdG9vbHRpcFBvcnRhbDogQ29tcG9uZW50UG9ydGFsPEZ3VG9vbHRpcFBhbmVsQ29tcG9uZW50PjtcblxuICAvKioqKiogSW5wdXRzICoqKioqL1xuXG4gIC8vIGEgbG90IG9mIHRoZXNlIGlkZWFsbHkgd291bGRuJ3QgYmUgbW9kZWxzLFxuICAvLyBidXQgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIGludGVyYWN0IHdpdGggdGhpcyBmcm9tIGRlcml2YXRpdmUgZGlyZWN0aXZlc1xuXG4gIC8vIFZTIENvZGUgcHVsbHMgdGhlIGlucHV0IHRoYXQgc2hhcmVzIGEgbmFtZSB3aXRoIHRoZSBkaXJlY3RpdmUgZm9yIGdpdmluZyBjb250ZXh0XG4gIC8vIHNvIHB1dHRpbmcgdGhlIHRvcCBsZXZlbCBjb21tZW50IG9uIHRoaXMgaW5wdXRcblxuICAvKipcbiAgICogRGlyZWN0aXZlIGZvciBkaXNwbGF5aW5nIGV4dHJhIGNvbnRleHQgb24gaG92ZXJcbiAgICogQHNlZSBbVmlzaW9uIERvY3NdKGh0dHBzOi8vY2RuLmZseXdoZWVsLmlvL2RvY3MvdmlzaW9uL21hc3Rlci8/cGF0aD0vZG9jcy9jb21wb25lbnRzLXRvb2x0aXAtLWRvY3MpXG4gICAqL1xuICB0aXRsZSA9IG1vZGVsPHN0cmluZz4oJ1BsYWNlaG9sZGVyJywge1xuICAgIGFsaWFzOiAnZndUb29sdGlwJyxcbiAgfSlcblxuICAvKipcbiAgICogZGlyZWN0aW9uIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHRoYXQgdGhlIHRvb2x0aXAgd2lsbCBhdHRlbXB0IHRvIHBvc2l0aW9uIGl0c2VsZiB0b1xuICAgKi9cbiAgcG9zaXRpb24gPSBtb2RlbDxTaW1wbGVQb3NpdGlvbj4oJ2Fib3ZlJywge1xuICAgIGFsaWFzOiAnZndUb29sdGlwUG9zaXRpb24nLFxuICB9KTtcblxuICAvKipcbiAgICogbWF4aW11bSB3aWR0aCBvZiB0aGUgdG9vbHRpcCBpbiBwaXhlbHNcbiAgICovXG4gIG1heFdpZHRoID0gbW9kZWw8bnVtYmVyPigyMDAsIHtcbiAgICBhbGlhczogJ2Z3VG9vbHRpcE1heFdpZHRoUHgnLFxuICB9KVxuXG4gIC8qKlxuICAgKiBhbW91bnQgb2YgZGVsYXkgYmVmb3JlIHRoZSB0b29sdGlwIGRpc3BsYXlzXG4gICAqXG4gICAqIG5vbmUgKDBtcyksXG4gICAqIHNob3J0ICg0MDBtcyksXG4gICAqIGxvbmcgKDcwMG1zKVxuICAgKi9cbiAgZGVsYXlNcyA9IGlucHV0KDQwMCwge1xuICAgIHRyYW5zZm9ybTogZGVsYXlOYW1lVG9NcyxcbiAgICBhbGlhczogJ2Z3VG9vbHRpcERlbGF5JyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIHdoZXRoZXIgb3Igbm90IHRoZSB0b29sdGlwIHNob3VsZCBoYXZlIGEgY2FyZXRcbiAgICovXG4gIGRpc3BsYXlDYXJldCA9IGlucHV0KHRydWUsIHtcbiAgICBhbGlhczogJ2Z3VG9vbHRpcENhcmV0JyxcbiAgfSk7XG5cblxuICBlbmFibGVkID0gbW9kZWwodHJ1ZSwge1xuICAgIGFsaWFzOiAnZndUb29sdGlwRW5hYmxlZCcsXG4gIH0pO1xuXG4gIC8qKioqKiBEZXJpdmVkIFN0YXRlICoqKioqL1xuXG4gIGNvbm5lY3RlZFBvc2l0aW9ucyA9IGNvbXB1dGVkPENvbm5lY3RlZFBvc2l0aW9uW10+KCgpID0+IHtcbiAgICAvLyBmYWxiYWNrIHBvc2l0aW9ucyBmb3IgaWYgaXQgZG9lc24ndCBmaXQgaW4gdGhlIHNwZWNpZmllZCBwb3NpdGlvblxuICAgIC8vIHRlbmQgdG93YXJkcyBjbG9zZXIgZmlyc3QgaS5lLiAnYWJvdmUnIHdpbGwgdHJ5ICdsZWZ0JyBhbmQgJ3JpZ2h0JyBiZWZvcmUgcmVzb3J0aW5nIHRvICdiZWxvd1xuICAgIGNvbnN0IHBvc2l0aW9uUHJlZmVyZW5jZU9yZGVyTWFwID0ge1xuICAgICAgJ2Fib3ZlJzogWydhYm92ZScsICdyaWdodCcsICdsZWZ0JywgJ2JlbG93J10sXG4gICAgICAncmlnaHQnOiBbJ3JpZ2h0JywgJ2JlbG93JywgJ2Fib3ZlJywgJ2xlZnQnXSxcbiAgICAgICdiZWxvdyc6IFsnYmVsb3cnLCAnbGVmdCcsICdyaWdodCcsICdhYm92ZSddLFxuICAgICAgJ2xlZnQnOiBbJ2xlZnQnLCAnYWJvdmUnLCAnYmVsb3cnLCAncmlnaHQnXSxcbiAgICB9XG5cbiAgICBjb25zdCBmYWxsYmFja05hbWVkUG9zaXRpb25zID0gcG9zaXRpb25QcmVmZXJlbmNlT3JkZXJNYXBbdGhpcy5wb3NpdGlvbigpXTtcbiAgICBjb25zdCBjb25uZWN0ZWRQb3NpdGlvbnMgPSBmYWxsYmFja05hbWVkUG9zaXRpb25zLm1hcChuYW1lID0+IHBvc2l0aW9uTWFwW25hbWVdKTtcblxuICAgIHJldHVybiBjb25uZWN0ZWRQb3NpdGlvbnM7XG4gIH0pO1xuXG4gIHBvc2l0aW9uU3RyYXRlZ3kgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcG9zaXRpb25CdWlsZGVyID0gdGhpcy5vdmVybGF5U2VydmljZS5wb3NpdGlvbigpO1xuICAgIGNvbnN0IHdpdGhPcmlnaW4gPSBwb3NpdGlvbkJ1aWxkZXIuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmVsZW1lbnRSZWYpO1xuICAgIGNvbnN0IGNvbXBsZXRlZFN0cmF0ZWd5ID0gd2l0aE9yaWdpbi53aXRoUG9zaXRpb25zKHRoaXMuY29ubmVjdGVkUG9zaXRpb25zKCkpO1xuICAgIHJldHVybiBjb21wbGV0ZWRTdHJhdGVneTtcbiAgfSk7XG5cbiAgb3ZlcmxheUNvbmZpZyA9IGNvbXB1dGVkPE92ZXJsYXlDb25maWc+KCgpID0+ICh7XG4gICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5wb3NpdGlvblN0cmF0ZWd5KCksXG4gICAgbWF4V2lkdGg6IE51bWJlcih0aGlzLm1heFdpZHRoKCkpLFxuICAgIFNjcm9sbFN0cmF0ZWd5T3B0aW9uczogdGhpcy5vdmVybGF5U2VydmljZS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCksXG4gICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgfSkpO1xuXG4gIC8qKioqKiBFZmZlY3RzIGFuZCBNZXRob2RzICoqKioqL1xuXG4gIGFkZE1vdXNlRXZlbnRMaXN0ZW5lcnMgPSBlZmZlY3QoKCkgPT4ge1xuXG4gICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgbmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4ge1xuICAgICAgdGhpcy5zaG93VG9vbHRpcCgpO1xuICAgIH0pO1xuXG4gICAgbmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xuICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICAgIH0pO1xuICB9KVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcFBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoRndUb29sdGlwUGFuZWxDb21wb25lbnQsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG5cbiAgICB0aGlzLm92ZXJsYXlSZWYuc2V0KHRoaXMub3ZlcmxheVNlcnZpY2UuY3JlYXRlKCkpO1xuICB9XG5cblxuICBwcml2YXRlIG9wZW5EZWxheVRpbWVyOiBudW1iZXI7XG5cbiAgc2hvd1Rvb2x0aXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQoKSB8fCAhdGhpcy50aXRsZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXlSZWYoKTtcbiAgICBvdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5wb3NpdGlvblN0cmF0ZWd5KCkpO1xuXG4gICAgaWYgKHRoaXMub3BlbkRlbGF5VGltZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wZW5EZWxheVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdG9vbHRpcFJlZiA9IG92ZXJsYXlSZWYuYXR0YWNoKHRoaXMudG9vbHRpcFBvcnRhbCk7XG4gICAgICB0aGlzLnRvb2x0aXBSZWYuc2V0KHRvb2x0aXBSZWYpO1xuXG4gICAgICB0b29sdGlwUmVmLnNldElucHV0KCd0aXRsZScsIHRoaXMudGl0bGUoKSk7XG4gICAgICB0b29sdGlwUmVmLnNldElucHV0KCdwb3NpdGlvbicsIHRoaXMucG9zaXRpb24oKSk7XG4gICAgICB0b29sdGlwUmVmLnNldElucHV0KCdtYXhXaWR0aCcsIHRoaXMubWF4V2lkdGgoKSk7XG4gICAgICB0b29sdGlwUmVmLnNldElucHV0KCdkaXNwbGF5Q2FyZXQnLCB0aGlzLmRpc3BsYXlDYXJldCgpKTtcbiAgICAgIHRvb2x0aXBSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIHRoaXMuZGVsYXlNcygpKTtcbiAgfVxuXG4gIHBvc2l0aW9uQ2hhbmdlU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLy8gdXBkYXRlcyB0aGUgdG9vbHRpcCBwYW5lbCdzIGNhcmV0IHBvc2l0aW9uIGlmIGEgZmFsbGJhY2sgcG9zaXRpb24gaXMgdXNlZFxuICBoYW5kbGVQb3NpdGlvbkNoYW5nZSA9IGVmZmVjdCgoKSA9PiB7XG5cbiAgICB0aGlzLnBvc2l0aW9uQ2hhbmdlU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucG9zaXRpb25DaGFuZ2VTdWIgPSB0aGlzLnBvc2l0aW9uU3RyYXRlZ3koKS5wb3NpdGlvbkNoYW5nZXMuc3Vic2NyaWJlKHBvc2l0aW9uQ2hhbmdlID0+IHtcblxuICAgICAgY29uc3QgbmV3UG9zaXRpb24gPSBwb3NpdGlvbkNoYW5nZS5jb25uZWN0aW9uUGFpcjtcblxuICAgICAgY29uc3QgcG9zaXRpb25OYW1lcyA9IE9iamVjdC5rZXlzKHBvc2l0aW9uTWFwKTtcbiAgICAgIGNvbnN0IG5ld1Bvc2l0aW9uTmFtZSA9IHBvc2l0aW9uTmFtZXMuZmluZChuYW1lID0+IHtcbiAgICAgICAgY29uc3QgcG9zID0gcG9zaXRpb25NYXBbbmFtZV07XG5cbiAgICAgICAgcmV0dXJuIHBvcy5vcmlnaW5YID09PSBuZXdQb3NpdGlvbi5vcmlnaW5YICYmXG4gICAgICAgIHBvcy5vcmlnaW5ZID09PSBuZXdQb3NpdGlvbi5vcmlnaW5ZICYmXG4gICAgICAgIHBvcy5vdmVybGF5WCA9PT0gbmV3UG9zaXRpb24ub3ZlcmxheVggJiZcbiAgICAgICAgcG9zLm92ZXJsYXlZID09PSBuZXdQb3NpdGlvbi5vdmVybGF5WTtcbiAgICAgIH0pXG5cbiAgICAgIGlmIChuZXdQb3NpdGlvbk5hbWUpIHtcbiAgICAgICAgdGhpcy50b29sdGlwUmVmKCk/LnNldElucHV0KCdwb3NpdGlvbicsIG5ld1Bvc2l0aW9uTmFtZSk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJlZigpPy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSlcbiAgfSlcblxuICBoaWRlVG9vbHRpcCgpOiB2b2lkIHtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMub3BlbkRlbGF5VGltZXIpO1xuICAgIHRoaXMub3BlbkRlbGF5VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vdmVybGF5UmVmKCk/LmRldGFjaCgpO1xuICAgIHRoaXMudG9vbHRpcFJlZi5zZXQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucG9zaXRpb25DaGFuZ2VTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICB9XG59XG4iXX0=
@@ -1,50 +0,0 @@
1
- import { Overlay, OverlayModule } from '@angular/cdk/overlay';
2
- import { CdkNoDataRow } from '@angular/cdk/table';
3
- import { CommonModule } from '@angular/common';
4
- import { NgModule } from '@angular/core';
5
- import { FwPopoverModule } from '../popover/popover.module';
6
- import { FwTooltipComponent } from './tooltip.component';
7
- import { FwTooltipDirective } from './tooltip.directive';
8
- import { FwTooltipPanelComponent } from './tooltip-panel/tooltip-panel.component';
9
- import * as i0 from "@angular/core";
10
- export class FwTooltipModule {
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
12
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipModule, declarations: [FwTooltipComponent,
13
- FwTooltipPanelComponent], imports: [CommonModule,
14
- FwPopoverModule,
15
- OverlayModule,
16
- CdkNoDataRow,
17
- FwTooltipDirective], exports: [FwTooltipComponent,
18
- FwTooltipPanelComponent,
19
- FwTooltipDirective] }); }
20
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipModule, providers: [
21
- Overlay,
22
- ], imports: [CommonModule,
23
- FwPopoverModule,
24
- OverlayModule] }); }
25
- }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipModule, decorators: [{
27
- type: NgModule,
28
- args: [{
29
- imports: [
30
- CommonModule,
31
- FwPopoverModule,
32
- OverlayModule,
33
- CdkNoDataRow,
34
- FwTooltipDirective,
35
- ],
36
- exports: [
37
- FwTooltipComponent,
38
- FwTooltipPanelComponent,
39
- FwTooltipDirective,
40
- ],
41
- declarations: [
42
- FwTooltipComponent,
43
- FwTooltipPanelComponent,
44
- ],
45
- providers: [
46
- Overlay,
47
- ],
48
- }]
49
- }] });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7QUF1QmxGLE1BQU0sT0FBTyxlQUFlOytHQUFmLGVBQWU7Z0hBQWYsZUFBZSxpQkFQeEIsa0JBQWtCO1lBQ2xCLHVCQUF1QixhQWJ2QixZQUFZO1lBQ1osZUFBZTtZQUNmLGFBQWE7WUFDYixZQUFZO1lBQ1osa0JBQWtCLGFBR2xCLGtCQUFrQjtZQUNsQix1QkFBdUI7WUFDdkIsa0JBQWtCO2dIQVVULGVBQWUsYUFKZjtZQUNULE9BQU87U0FDUixZQWpCQyxZQUFZO1lBQ1osZUFBZTtZQUNmLGFBQWE7OzRGQWlCSixlQUFlO2tCQXJCM0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixrQkFBa0I7cUJBQ3JCO29CQUNDLE9BQU8sRUFBRTt3QkFDUCxrQkFBa0I7d0JBQ2xCLHVCQUF1Qjt3QkFDdkIsa0JBQWtCO3FCQUNuQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osa0JBQWtCO3dCQUNsQix1QkFBdUI7cUJBQ3hCO29CQUNELFNBQVMsRUFBRTt3QkFDVCxPQUFPO3FCQUNSO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENka05vRGF0YVJvdyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90YWJsZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRndQb3BvdmVyTW9kdWxlIH0gZnJvbSAnLi4vcG9wb3Zlci9wb3BvdmVyLm1vZHVsZSc7XG5pbXBvcnQgeyBGd1Rvb2x0aXBDb21wb25lbnQgfSBmcm9tICcuL3Rvb2x0aXAuY29tcG9uZW50JztcbmltcG9ydCB7IEZ3VG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4vdG9vbHRpcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRndUb29sdGlwUGFuZWxDb21wb25lbnQgfSBmcm9tICcuL3Rvb2x0aXAtcGFuZWwvdG9vbHRpcC1wYW5lbC5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZ3UG9wb3Zlck1vZHVsZSxcbiAgICBPdmVybGF5TW9kdWxlLFxuICAgIENka05vRGF0YVJvdyxcbiAgICBGd1Rvb2x0aXBEaXJlY3RpdmUsXG5dLFxuICBleHBvcnRzOiBbXG4gICAgRndUb29sdGlwQ29tcG9uZW50LFxuICAgIEZ3VG9vbHRpcFBhbmVsQ29tcG9uZW50LFxuICAgIEZ3VG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgRndUb29sdGlwQ29tcG9uZW50LFxuICAgIEZ3VG9vbHRpcFBhbmVsQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBPdmVybGF5LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGd1Rvb2x0aXBNb2R1bGUge1xufVxuIl19
@@ -1,264 +0,0 @@
1
- import { CdkMenuModule, CdkMenuTrigger } from '@angular/cdk/menu';
2
- import { NgClass } from '@angular/common';
3
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, forwardRef, HostListener, inject, input, model, signal, viewChild, viewChildren, } from '@angular/core';
4
- import { toObservable, toSignal } from '@angular/core/rxjs-interop';
5
- import { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
6
- import { combineLatest, map, of, switchMap, tap } from 'rxjs';
7
- import { MenuRegisterDirective } from '../../directives/menu-register.directive';
8
- import { FwChipModule } from '../chip/chip.module';
9
- import { FwChipListComponent } from '../chip-list/chip-list.component';
10
- import { FwMenuModule } from '../menu/menu.module';
11
- import { FwMenuItemComponent } from '../menu/menu-item/menu-item.component';
12
- import { FwProgressModule } from '../progress/progress.module';
13
- import { FwTextInputModule } from '../text-input/text-input.module';
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "../chip/chip.component";
16
- import * as i2 from "../menu/menu.component";
17
- import * as i3 from "../menu/menu-container/menu-container.component";
18
- import * as i4 from "../menu/menu-item/menu-item.component";
19
- import * as i5 from "@angular/cdk/menu";
20
- import * as i6 from "../progress/spinner/spinner.component";
21
- /**
22
- * Component for having a user select multiple values while also allowing arbitrary values to be added
23
- * @see [Vision Docs](https://cdn.flywheel.io/docs/vision/master/?path=/docs/form-controls-typeahead--docs)
24
- */
25
- export class FwTypeaheadComponent {
26
- constructor() {
27
- this.trigger = viewChild(CdkMenuTrigger);
28
- this.changeDetector = inject(ChangeDetectorRef);
29
- this.loading = model(false);
30
- this.disabled = model(false);
31
- this.onChange = (_) => {
32
- };
33
- this.onTouched = () => {
34
- };
35
- this.value = model([]);
36
- this.value$ = toObservable(this.value);
37
- this.optionsInput = input([], { alias: 'options' });
38
- this.optionsInput$ = toObservable(this.optionsInput);
39
- this.maxOptionsHeight = input('400px');
40
- this.minOptionsHeight = input('0px');
41
- this.optionsWidth = input('');
42
- this.maxHeight = input('');
43
- this.notifyOnValueChanges = effect(() => {
44
- this.onChange(this.value());
45
- });
46
- this.searchValue = model('');
47
- this.searchValueChanges$ = toObservable(this.searchValue);
48
- this.allowNew = input(true);
49
- this.placeholder = input('Enter tags...');
50
- this.showPlaceholder = computed(() => this.value().length === 0);
51
- /**
52
- * Options after they've been both filtered for matching the search and already selected
53
- */
54
- this.filteredOptions$ = combineLatest([
55
- this.searchValueChanges$,
56
- this.optionsInput$,
57
- ]).pipe(tap(() => this.loading.set(true)),
58
- // first determine if it's a function or static options
59
- switchMap(([searchString, optionInput]) => {
60
- if (typeof optionInput === 'function') {
61
- const fetchingFunction = optionInput;
62
- return fetchingFunction(searchString);
63
- }
64
- else {
65
- // if they're static options we need to do the search filtering
66
- const filteredOptionInput = optionInput?.filter(opt => opt.toLowerCase().includes(searchString.toLowerCase()));
67
- return of(filteredOptionInput);
68
- }
69
- }),
70
- // next filter out already selected values
71
- switchMap(options => combineLatest([of(options), this.value$])), map(([options, currentValue]) => {
72
- return options?.filter(option => {
73
- const alreadySelected = currentValue.find(val => val.toLowerCase() === option.toLowerCase());
74
- return !alreadySelected;
75
- });
76
- }), tap(() => this.loading.set(false)));
77
- /**
78
- * Options after they've been both filtered for matching the search and already selected
79
- */
80
- this.filteredOptions = toSignal(this.filteredOptions$);
81
- this.displayNewOption = computed(() => {
82
- const newValue = this.searchValue();
83
- if (!newValue) {
84
- return false;
85
- }
86
- const directMatch = this.filteredOptions()?.includes?.(newValue);
87
- const loading = this.loading();
88
- const alreadySelected = Boolean(this.value().find(val => val.toLowerCase() === newValue.toLowerCase()));
89
- return this.allowNew() && !alreadySelected && (!directMatch || loading);
90
- });
91
- this.addValue = (newValue) => {
92
- const isInOptions = this.filteredOptions().includes(newValue);
93
- const isNewWhileDisallowed = !this.allowNew() && !isInOptions;
94
- const isDuplicate = this.value().includes(newValue.toLowerCase());
95
- if (isNewWhileDisallowed || isDuplicate) {
96
- return;
97
- }
98
- this.value.update(prevValue => [
99
- ...prevValue || [],
100
- newValue,
101
- ]);
102
- };
103
- this.handleOptionClick = (optionValue) => {
104
- this.onTouched();
105
- this.addValue(optionValue);
106
- this.focusInput();
107
- this.searchValue.set('');
108
- };
109
- this.resetFocusOnOptionsChange = effect(() => {
110
- if (this.displayedOptions() || this.searchValue()) {
111
- this.focusedIndex.set(0);
112
- }
113
- }, { allowSignalWrites: true });
114
- this.displayedOptions = viewChildren(FwMenuItemComponent);
115
- this.focusedIndex = signal(0);
116
- this.focusedOption = computed(() => {
117
- const options = this.displayedOptions();
118
- const focused = this.focusedIndex();
119
- const onlyOne = options.length === 1;
120
- return onlyOne ? this.searchValue() : options[focused]?.value;
121
- });
122
- this.inputRef = viewChild.required('input');
123
- /* eslint-disable @typescript-eslint/naming-convention */
124
- this.keyHandlerMap = {
125
- 'Enter': () => {
126
- this.onTouched();
127
- const newValue = this.focusedOption() || this.searchValue();
128
- const duplicate = this.value().find(val => val.toLowerCase() === newValue.toLowerCase());
129
- if (!newValue || duplicate) {
130
- return;
131
- }
132
- this.addValue(newValue);
133
- this.searchValue.set('');
134
- },
135
- 'ArrowDown': () => {
136
- this.moveFocused('down');
137
- },
138
- 'ArrowUp': () => {
139
- this.moveFocused('up');
140
- },
141
- 'Backspace': () => {
142
- const searchIsEmpty = !this.searchValue(); // any falsy value is empty
143
- if (searchIsEmpty && this.value()?.length > 0) {
144
- this.closeChip(this.value()[this.value().length - 1]);
145
- }
146
- return !searchIsEmpty;
147
- },
148
- 'Tab': () => {
149
- if (this.trigger().isOpen) {
150
- this.trigger().close();
151
- }
152
- },
153
- };
154
- }
155
- outsideClick() {
156
- this.trigger().close();
157
- }
158
- setDisabledState(isDisabled) {
159
- this.disabled.set(isDisabled);
160
- }
161
- writeValue(incomingValue) {
162
- this.value.set(incomingValue);
163
- }
164
- registerOnChange(onChangeFn) {
165
- this.onChange = onChangeFn;
166
- }
167
- registerOnTouched(onTouchedFn) {
168
- this.onTouched = onTouchedFn;
169
- }
170
- onClick(event) {
171
- event.preventDefault();
172
- event.stopPropagation();
173
- }
174
- handleSearchChange(event) {
175
- if (this.trigger().closed) {
176
- this.trigger().open();
177
- }
178
- const value = event.target.value;
179
- this.searchValue.set(value);
180
- }
181
- closeChip(chipValue) {
182
- const currentValue = this.value();
183
- const newValue = currentValue.filter(val => val !== chipValue);
184
- this.value.set(newValue);
185
- this.focusInput();
186
- // eslint-disable-next-line @rx-angular/no-explicit-change-detection-apis
187
- this.changeDetector.detectChanges();
188
- }
189
- focusInput(e = null) {
190
- e?.preventDefault();
191
- e?.stopPropagation();
192
- e?.stopImmediatePropagation();
193
- // eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
194
- this.inputRef().nativeElement.focus();
195
- }
196
- onFocusLoss(_) {
197
- this.onTouched();
198
- }
199
- /* eslint-enable */
200
- handleKey(e) {
201
- const handler = this.keyHandlerMap[e.key];
202
- handler?.(e);
203
- }
204
- setFocusByValue(value) {
205
- const options = this.displayedOptions();
206
- const foundIndex = options.findIndex(opt => opt.value === value);
207
- const finalIndex = foundIndex === -1 ? 0 : foundIndex;
208
- this.focusedIndex.set(finalIndex);
209
- }
210
- moveFocused(direction) {
211
- const options = this.displayedOptions();
212
- const index = this.focusedIndex();
213
- const clampIndex = (n) => {
214
- if (n < 0) {
215
- return options.length - 1;
216
- }
217
- else if (n >= options.length) {
218
- return 0;
219
- }
220
- return n;
221
- };
222
- const indexChange = direction === 'up' ? -1 : 1;
223
- const newIndex = clampIndex(index + indexChange);
224
- this.focusedIndex.set(newIndex);
225
- const newlyFocused = this.displayedOptions()[this.focusedIndex()];
226
- // eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
227
- newlyFocused.scrollIntoView();
228
- }
229
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTypeaheadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
230
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FwTypeaheadComponent, isStandalone: true, selector: "fw-typeahead", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, optionsInput: { classPropertyName: "optionsInput", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, maxOptionsHeight: { classPropertyName: "maxOptionsHeight", publicName: "maxOptionsHeight", isSignal: true, isRequired: false, transformFunction: null }, minOptionsHeight: { classPropertyName: "minOptionsHeight", publicName: "minOptionsHeight", isSignal: true, isRequired: false, transformFunction: null }, optionsWidth: { classPropertyName: "optionsWidth", publicName: "optionsWidth", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, searchValue: { classPropertyName: "searchValue", publicName: "searchValue", isSignal: true, isRequired: false, transformFunction: null }, allowNew: { classPropertyName: "allowNew", publicName: "allowNew", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { loading: "loadingChange", disabled: "disabledChange", value: "valueChange", searchValue: "searchValueChange" }, host: { listeners: { "document:click": "outsideClick()", "click": "onClick($event)" } }, providers: [
231
- {
232
- provide: NG_VALUE_ACCESSOR,
233
- useExisting: forwardRef(() => FwTypeaheadComponent),
234
- multi: true,
235
- },
236
- ], viewQueries: [{ propertyName: "trigger", first: true, predicate: CdkMenuTrigger, descendants: true, isSignal: true }, { propertyName: "displayedOptions", predicate: FwMenuItemComponent, descendants: true, isSignal: true }, { propertyName: "inputRef", first: true, predicate: ["input"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n (click)=\"focusInput($event)\"\n class=\"input-container\"\n [ngClass]=\"{ 'disabled': disabled() }\"\n [style.max-height]=\"maxHeight()\"\n [cdkMenuTriggerFor]=\"menuContent\"\n fwMenuRegister\n #inputContainer>\n <fw-chip-list class=\"chips\" [disableOverflow]=\"!!maxHeight()\">\n @for(val of value(); track val) {\n <fw-chip\n color=\"primary\"\n [showClose]=\"true\"\n [title]=\"val\"\n [selectable]=\"false\"\n (close)=\"closeChip(val)\"\n />\n }\n </fw-chip-list>\n <input\n test-id=\"typeahead-input\"\n [placeholder]=\"showPlaceholder() ? placeholder() : ''\"\n [disabled]=\"disabled()\"\n [value]=\"searchValue()\"\n (keyup)=\"handleSearchChange($event)\"\n (keydown)=\"handleKey($event)\"\n (focusout)=\"onFocusLoss($event)\"\n #input\n type=\"text\"\n />\n @if(loading()) {\n <fw-progress-spinner size=\"small\"/>\n }\n</div>\n<ng-template #menuContent>\n <fw-menu-container\n [maxHeight]=\"maxOptionsHeight()\"\n [minHeight]=\"minOptionsHeight()\"\n [width]=\"optionsWidth() || inputContainer.offsetWidth - 2 + 'px'\"\n >\n <fw-menu>\n @if(loading() && !displayNewOption()) {\n <fw-menu-item title=\"Searching...\" [disabled]=\"true\"/>\n } @else if(!loading()) {\n @for (option of filteredOptions(); track option) {\n <fw-menu-item\n (click)=\"handleOptionClick($event)\"\n (mouseenter)=\"setFocusByValue(option)\"\n [title]=\"option\"\n [focused]=\"focusedOption() === option\"\n [value]=\"option\"\n />\n }\n @empty {\n @if (!displayNewOption()) {\n <fw-menu-item title=\"No tag suggestions\" [disabled]=\"true\"/>\n }\n }\n }\n @if(displayNewOption()) {\n <fw-menu-item\n (click)=\"handleOptionClick($event)\"\n (mouseenter)=\"setFocusByValue(searchValue())\"\n [title]=\"searchValue()\"\n [value]=\"searchValue()\"\n [focused]=\"focusedOption() === searchValue()\">\n <p class=\"new-tag\">New</p>\n </fw-menu-item>\n }\n </fw-menu>\n </fw-menu-container>\n</ng-template>\n", styles: [".new-tag{margin:0;color:var(--typography-light)}:host.disabled{cursor:not-allowed}:host.disabled fw-icon{cursor:not-allowed!important}:host{display:flex;flex-direction:column;width:100%;line-height:21px}:host .chips,:host fw-progress-spinner{margin:-4px 0}:host .input-container{width:100%;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;padding:8px;row-gap:8px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);font-family:Inter,sans-serif;flex-wrap:wrap;overflow-y:auto}:host .input-container:focus-within{border:1px solid var(--primary-base)}:host .input-container input{min-width:80px;font-size:14px;flex:1 1 80px;color:var(--typography-base);background:var(--page-light);border:none}:host .input-container input:focus{outline:none;border:none}:host .input-container input::placeholder{color:var(--typography-light)}:host .input-container .context{color:var(--typography-light)}:host.errored .input-container,:host.ng-touched.ng-invalid .input-container{border:1px solid var(--red-base)}.disabled{opacity:.4;pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: FwTextInputModule }, { kind: "ngmodule", type: FwChipModule }, { kind: "component", type: i1.FwChipComponent, selector: "fw-chip", inputs: ["value", "variant", "color", "icon", "title", "description", "showClose", "disabled", "selected", "textWrap", "selectable"], outputs: ["close", "select"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FwMenuModule }, { kind: "component", type: i2.FwMenuComponent, selector: "fw-menu", inputs: ["disabled", "size", "multiSelect", "useCheckbox", "value"], outputs: ["change"] }, { kind: "component", type: i3.FwMenuContainerComponent, selector: "fw-menu-container, fw-menu-filter", inputs: ["width", "maxHeight", "minHeight", "border", "shadow", "showFilter", "filterText", "focusFilterOnMount", "offset", "emptyText", "filterFn", "additionalMenuItems", "keyHandler"], outputs: ["filteredMenuItemChange", "filterChanged"] }, { kind: "component", type: i4.FwMenuItemComponent, selector: "fw-menu-item", inputs: ["value", "size", "title", "description", "icon", "iconColor", "disabled", "showCheckbox", "checkboxColor", "multiSelect", "hidden", "collapsed", "href", "target", "subItemsOpen", "mouseEnterHandler", "focused", "selected"], outputs: ["mouseEnterHandlerChange", "click"] }, { kind: "ngmodule", type: CdkMenuModule }, { kind: "directive", type: i5.CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "directive", type: MenuRegisterDirective, selector: "[fwMenuRegister]" }, { kind: "ngmodule", type: FwProgressModule }, { kind: "component", type: i6.FwProgressSpinnerComponent, selector: "fw-progress-spinner", inputs: ["mode", "size", "color", "showValue", "value"] }, { kind: "component", type: FwChipListComponent, selector: "fw-chip-list", inputs: ["resizeDebounceMs", "disableOverflow"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
237
- }
238
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTypeaheadComponent, decorators: [{
239
- type: Component,
240
- args: [{ selector: 'fw-typeahead', standalone: true, imports: [
241
- FwTextInputModule,
242
- FwChipModule,
243
- ReactiveFormsModule,
244
- FwMenuModule,
245
- CdkMenuModule,
246
- MenuRegisterDirective,
247
- FwProgressModule,
248
- FwChipListComponent,
249
- NgClass,
250
- ], providers: [
251
- {
252
- provide: NG_VALUE_ACCESSOR,
253
- useExisting: forwardRef(() => FwTypeaheadComponent),
254
- multi: true,
255
- },
256
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n (click)=\"focusInput($event)\"\n class=\"input-container\"\n [ngClass]=\"{ 'disabled': disabled() }\"\n [style.max-height]=\"maxHeight()\"\n [cdkMenuTriggerFor]=\"menuContent\"\n fwMenuRegister\n #inputContainer>\n <fw-chip-list class=\"chips\" [disableOverflow]=\"!!maxHeight()\">\n @for(val of value(); track val) {\n <fw-chip\n color=\"primary\"\n [showClose]=\"true\"\n [title]=\"val\"\n [selectable]=\"false\"\n (close)=\"closeChip(val)\"\n />\n }\n </fw-chip-list>\n <input\n test-id=\"typeahead-input\"\n [placeholder]=\"showPlaceholder() ? placeholder() : ''\"\n [disabled]=\"disabled()\"\n [value]=\"searchValue()\"\n (keyup)=\"handleSearchChange($event)\"\n (keydown)=\"handleKey($event)\"\n (focusout)=\"onFocusLoss($event)\"\n #input\n type=\"text\"\n />\n @if(loading()) {\n <fw-progress-spinner size=\"small\"/>\n }\n</div>\n<ng-template #menuContent>\n <fw-menu-container\n [maxHeight]=\"maxOptionsHeight()\"\n [minHeight]=\"minOptionsHeight()\"\n [width]=\"optionsWidth() || inputContainer.offsetWidth - 2 + 'px'\"\n >\n <fw-menu>\n @if(loading() && !displayNewOption()) {\n <fw-menu-item title=\"Searching...\" [disabled]=\"true\"/>\n } @else if(!loading()) {\n @for (option of filteredOptions(); track option) {\n <fw-menu-item\n (click)=\"handleOptionClick($event)\"\n (mouseenter)=\"setFocusByValue(option)\"\n [title]=\"option\"\n [focused]=\"focusedOption() === option\"\n [value]=\"option\"\n />\n }\n @empty {\n @if (!displayNewOption()) {\n <fw-menu-item title=\"No tag suggestions\" [disabled]=\"true\"/>\n }\n }\n }\n @if(displayNewOption()) {\n <fw-menu-item\n (click)=\"handleOptionClick($event)\"\n (mouseenter)=\"setFocusByValue(searchValue())\"\n [title]=\"searchValue()\"\n [value]=\"searchValue()\"\n [focused]=\"focusedOption() === searchValue()\">\n <p class=\"new-tag\">New</p>\n </fw-menu-item>\n }\n </fw-menu>\n </fw-menu-container>\n</ng-template>\n", styles: [".new-tag{margin:0;color:var(--typography-light)}:host.disabled{cursor:not-allowed}:host.disabled fw-icon{cursor:not-allowed!important}:host{display:flex;flex-direction:column;width:100%;line-height:21px}:host .chips,:host fw-progress-spinner{margin:-4px 0}:host .input-container{width:100%;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;padding:8px;row-gap:8px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);font-family:Inter,sans-serif;flex-wrap:wrap;overflow-y:auto}:host .input-container:focus-within{border:1px solid var(--primary-base)}:host .input-container input{min-width:80px;font-size:14px;flex:1 1 80px;color:var(--typography-base);background:var(--page-light);border:none}:host .input-container input:focus{outline:none;border:none}:host .input-container input::placeholder{color:var(--typography-light)}:host .input-container .context{color:var(--typography-light)}:host.errored .input-container,:host.ng-touched.ng-invalid .input-container{border:1px solid var(--red-base)}.disabled{opacity:.4;pointer-events:none}\n"] }]
257
- }], propDecorators: { outsideClick: [{
258
- type: HostListener,
259
- args: ['document:click']
260
- }], onClick: [{
261
- type: HostListener,
262
- args: ['click', ['$event']]
263
- }] } });
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3R5cGVhaGVhZC90eXBlYWhlYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHlwZWFoZWFkL3R5cGVhaGVhZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFFTixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENB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QUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLE9BQU87cUJBQ1IsYUFDVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU07OEJBR2YsWUFBWTtzQkFBM0MsWUFBWTt1QkFBQyxnQkFBZ0I7Z0JBK0JLLE9BQU87c0JBQXpDLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrTWVudU1vZHVsZSwgQ2RrTWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbWVudSc7XG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbiAgdmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBNZW51UmVnaXN0ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL21lbnUtcmVnaXN0ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZ3Q2hpcE1vZHVsZSB9IGZyb20gJy4uL2NoaXAvY2hpcC5tb2R1bGUnO1xuaW1wb3J0IHsgRndDaGlwTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL2NoaXAtbGlzdC9jaGlwLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IEZ3TWVudU1vZHVsZSB9IGZyb20gJy4uL21lbnUvbWVudS5tb2R1bGUnO1xuaW1wb3J0IHsgRndNZW51SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL21lbnUvbWVudS1pdGVtL21lbnUtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRndQcm9ncmVzc01vZHVsZSB9IGZyb20gJy4uL3Byb2dyZXNzL3Byb2dyZXNzLm1vZHVsZSc7XG5pbXBvcnQgeyBGd1RleHRJbnB1dE1vZHVsZSB9IGZyb20gJy4uL3RleHQtaW5wdXQvdGV4dC1pbnB1dC5tb2R1bGUnO1xuXG50eXBlIE9wdGlvbkZldGNoaW5nRm4gPSAoc2VhcmNoU3RyaW5nOiBzdHJpbmcpID0+IE9ic2VydmFibGU8c3RyaW5nW10+O1xuXG4vKipcbiAqIENvbXBvbmVudCBmb3IgaGF2aW5nIGEgdXNlciBzZWxlY3QgbXVsdGlwbGUgdmFsdWVzIHdoaWxlIGFsc28gYWxsb3dpbmcgYXJiaXRyYXJ5IHZhbHVlcyB0byBiZSBhZGRlZFxuICogQHNlZSBbVmlzaW9uIERvY3NdKGh0dHBzOi8vY2RuLmZseXdoZWVsLmlvL2RvY3MvdmlzaW9uL21hc3Rlci8/cGF0aD0vZG9jcy9mb3JtLWNvbnRyb2xzLXR5cGVhaGVhZC0tZG9jcylcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnctdHlwZWFoZWFkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZ3VGV4dElucHV0TW9kdWxlLFxuICAgIEZ3Q2hpcE1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZ3TWVudU1vZHVsZSxcbiAgICBDZGtNZW51TW9kdWxlLFxuICAgIE1lbnVSZWdpc3RlckRpcmVjdGl2ZSxcbiAgICBGd1Byb2dyZXNzTW9kdWxlLFxuICAgIEZ3Q2hpcExpc3RDb21wb25lbnQsXG4gICAgTmdDbGFzcyxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGd1R5cGVhaGVhZENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vdHlwZWFoZWFkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3R5cGVhaGVhZC5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBGd1R5cGVhaGVhZENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snKSBvdXRzaWRlQ2xpY2soKTogdm9pZCB7XG4gICAgICB0aGlzLnRyaWdnZXIoKS5jbG9zZSgpO1xuICB9XG5cbiAgdHJpZ2dlciA9IHZpZXdDaGlsZChDZGtNZW51VHJpZ2dlcik7XG4gIGNoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgbG9hZGluZyA9IG1vZGVsKGZhbHNlKTtcbiAgZGlzYWJsZWQgPSBtb2RlbChmYWxzZSk7XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZC5zZXQoaXNEaXNhYmxlZCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKGluY29taW5nVmFsdWU6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZS5zZXQoaW5jb21pbmdWYWx1ZSk7XG4gIH1cblxuICBvbkNoYW5nZSA9IChfOiBzdHJpbmdbXSk6IHZvaWQgPT4ge1xuICB9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2VGbik6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZUZuO1xuICB9XG5cbiAgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge1xuICB9O1xuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZEZuKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWRGbjtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSkgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICB2YWx1ZSA9IG1vZGVsPHN0cmluZ1tdPihbXSk7XG4gIHZhbHVlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnZhbHVlKTtcbiAgb3B0aW9uc0lucHV0ID0gaW5wdXQ8c3RyaW5nW10gfCBPcHRpb25GZXRjaGluZ0ZuPihbXSwgeyBhbGlhczogJ29wdGlvbnMnIH0pO1xuICBvcHRpb25zSW5wdXQkID0gdG9PYnNlcnZhYmxlKHRoaXMub3B0aW9uc0lucHV0KTtcblxuICBtYXhPcHRpb25zSGVpZ2h0ID0gaW5wdXQoJzQwMHB4Jyk7XG4gIG1pbk9wdGlvbnNIZWlnaHQgPSBpbnB1dCgnMHB4Jyk7XG4gIG9wdGlvbnNXaWR0aCA9IGlucHV0KCcnKTtcbiAgbWF4SGVpZ2h0ID0gaW5wdXQoJycpO1xuXG4gIG5vdGlmeU9uVmFsdWVDaGFuZ2VzID0gZWZmZWN0KCgpID0+IHtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUoKSk7XG4gIH0pO1xuXG4gIHNlYXJjaFZhbHVlID0gbW9kZWwoJycpO1xuICBzZWFyY2hWYWx1ZUNoYW5nZXMkID0gdG9PYnNlcnZhYmxlKHRoaXMuc2VhcmNoVmFsdWUpO1xuXG4gIGhhbmRsZVNlYXJjaENoYW5nZShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyaWdnZXIoKS5jbG9zZWQpIHtcbiAgICAgIHRoaXMudHJpZ2dlcigpLm9wZW4oKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMuc2VhcmNoVmFsdWUuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIGFsbG93TmV3ID0gaW5wdXQodHJ1ZSk7XG4gIHBsYWNlaG9sZGVyID0gaW5wdXQoJ0VudGVyIHRhZ3MuLi4nKTtcbiAgc2hvd1BsYWNlaG9sZGVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy52YWx1ZSgpLmxlbmd0aCA9PT0gMCk7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgYWZ0ZXIgdGhleSd2ZSBiZWVuIGJvdGggZmlsdGVyZWQgZm9yIG1hdGNoaW5nIHRoZSBzZWFyY2ggYW5kIGFscmVhZHkgc2VsZWN0ZWRcbiAgICovXG4gIGZpbHRlcmVkT3B0aW9ucyQ6IE9ic2VydmFibGU8c3RyaW5nW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZXMkLFxuICAgIHRoaXMub3B0aW9uc0lucHV0JCxcbiAgXSkucGlwZShcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nLnNldCh0cnVlKSksXG5cbiAgICAvLyBmaXJzdCBkZXRlcm1pbmUgaWYgaXQncyBhIGZ1bmN0aW9uIG9yIHN0YXRpYyBvcHRpb25zXG4gICAgc3dpdGNoTWFwKChbc2VhcmNoU3RyaW5nLCBvcHRpb25JbnB1dF0pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uSW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgZmV0Y2hpbmdGdW5jdGlvbiA9IG9wdGlvbklucHV0IGFzIE9wdGlvbkZldGNoaW5nRm47XG4gICAgICAgIHJldHVybiBmZXRjaGluZ0Z1bmN0aW9uKHNlYXJjaFN0cmluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiB0aGV5J3JlIHN0YXRpYyBvcHRpb25zIHdlIG5lZWQgdG8gZG8gdGhlIHNlYXJjaCBmaWx0ZXJpbmdcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25JbnB1dCA9IG9wdGlvbklucHV0Py5maWx0ZXIob3B0ID0+IG9wdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgIHJldHVybiBvZihmaWx0ZXJlZE9wdGlvbklucHV0KTtcbiAgICAgIH1cblxuICAgIH0pLFxuXG4gICAgLy8gbmV4dCBmaWx0ZXIgb3V0IGFscmVhZHkgc2VsZWN0ZWQgdmFsdWVzXG4gICAgc3dpdGNoTWFwKG9wdGlvbnMgPT4gY29tYmluZUxhdGVzdChbb2Yob3B0aW9ucyksIHRoaXMudmFsdWUkXSkpLFxuICAgIG1hcCgoW29wdGlvbnMsIGN1cnJlbnRWYWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBvcHRpb25zPy5maWx0ZXIob3B0aW9uID0+IHtcbiAgICAgICAgY29uc3QgYWxyZWFkeVNlbGVjdGVkID0gY3VycmVudFZhbHVlLmZpbmQodmFsID0+IHZhbC50b0xvd2VyQ2FzZSgpID09PSBvcHRpb24udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHJldHVybiAhYWxyZWFkeVNlbGVjdGVkO1xuICAgICAgfSk7XG4gICAgfSksXG5cbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nLnNldChmYWxzZSkpLFxuICApO1xuICAvKipcbiAgICogT3B0aW9ucyBhZnRlciB0aGV5J3ZlIGJlZW4gYm90aCBmaWx0ZXJlZCBmb3IgbWF0Y2hpbmcgdGhlIHNlYXJjaCBhbmQgYWxyZWFkeSBzZWxlY3RlZFxuICAgKi9cbiAgZmlsdGVyZWRPcHRpb25zID0gdG9TaWduYWwodGhpcy5maWx0ZXJlZE9wdGlvbnMkKTtcblxuXG4gIGNsb3NlQ2hpcChjaGlwVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWUoKTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGN1cnJlbnRWYWx1ZS5maWx0ZXIodmFsID0+IHZhbCAhPT0gY2hpcFZhbHVlKTtcbiAgICB0aGlzLnZhbHVlLnNldChuZXdWYWx1ZSk7XG4gICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEByeC1hbmd1bGFyL25vLWV4cGxpY2l0LWNoYW5nZS1kZXRlY3Rpb24tYXBpc1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZGlzcGxheU5ld09wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuc2VhcmNoVmFsdWUoKTtcblxuICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXJlY3RNYXRjaCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zKCk/LmluY2x1ZGVzPy4obmV3VmFsdWUpO1xuICAgIGNvbnN0IGxvYWRpbmcgPSB0aGlzLmxvYWRpbmcoKTtcbiAgICBjb25zdCBhbHJlYWR5U2VsZWN0ZWQgPSBCb29sZWFuKHRoaXMudmFsdWUoKS5maW5kKHZhbCA9PiB2YWwudG9Mb3dlckNhc2UoKSA9PT0gbmV3VmFsdWUudG9Mb3dlckNhc2UoKSkpO1xuXG5cbiAgICByZXR1cm4gdGhpcy5hbGxvd05ldygpICYmICFhbHJlYWR5U2VsZWN0ZWQgJiYgKCFkaXJlY3RNYXRjaCB8fCBsb2FkaW5nKTtcbiAgfSk7XG5cbiAgYWRkVmFsdWUgPSAobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQgPT4ge1xuXG4gICAgY29uc3QgaXNJbk9wdGlvbnMgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucygpLmluY2x1ZGVzKG5ld1ZhbHVlKTtcbiAgICBjb25zdCBpc05ld1doaWxlRGlzYWxsb3dlZCA9ICF0aGlzLmFsbG93TmV3KCkgJiYgIWlzSW5PcHRpb25zO1xuXG4gICAgY29uc3QgaXNEdXBsaWNhdGUgPSB0aGlzLnZhbHVlKCkuaW5jbHVkZXMobmV3VmFsdWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICBpZiAoaXNOZXdXaGlsZURpc2FsbG93ZWQgfHwgaXNEdXBsaWNhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlLnVwZGF0ZShwcmV2VmFsdWUgPT4gW1xuICAgICAgLi4ucHJldlZhbHVlIHx8IFtdLFxuICAgICAgbmV3VmFsdWUsXG4gICAgXSk7XG4gIH07XG5cbiAgaGFuZGxlT3B0aW9uQ2xpY2sgPSAob3B0aW9uVmFsdWUpOiB2b2lkID0+IHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHRoaXMuYWRkVmFsdWUob3B0aW9uVmFsdWUpO1xuICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgIHRoaXMuc2VhcmNoVmFsdWUuc2V0KCcnKTtcbiAgfTtcblxuICByZXNldEZvY3VzT25PcHRpb25zQ2hhbmdlID0gZWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGhpcy5kaXNwbGF5ZWRPcHRpb25zKCkgfHwgdGhpcy5zZWFyY2hWYWx1ZSgpKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQoMCk7XG4gICAgfVxuICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuXG4gIGRpc3BsYXllZE9wdGlvbnMgPSB2aWV3Q2hpbGRyZW4oRndNZW51SXRlbUNvbXBvbmVudCk7XG4gIGZvY3VzZWRJbmRleCA9IHNpZ25hbCgwKTtcbiAgZm9jdXNlZE9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKCk7XG4gICAgY29uc3QgZm9jdXNlZCA9IHRoaXMuZm9jdXNlZEluZGV4KCk7XG5cbiAgICBjb25zdCBvbmx5T25lID0gb3B0aW9ucy5sZW5ndGggPT09IDE7XG4gICAgcmV0dXJuIG9ubHlPbmUgPyB0aGlzLnNlYXJjaFZhbHVlKCkgOiBvcHRpb25zW2ZvY3VzZWRdPy52YWx1ZTtcbiAgfSk7XG5cbiAgaW5wdXRSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4oJ2lucHV0Jyk7XG5cbiAgZm9jdXNJbnB1dChlOiBNb3VzZUV2ZW50ID0gbnVsbCk6IHZvaWQge1xuICAgIGU/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZT8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZT8uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEByeC1hbmd1bGFyL3ByZWZlci1uby1sYXlvdXQtc2Vuc2l0aXZlLWFwaXNcbiAgICB0aGlzLmlucHV0UmVmKCkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25Gb2N1c0xvc3MoXzogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG4gIGtleUhhbmRsZXJNYXA6IHsgW2tleWNvZGU6IHN0cmluZ106IChlOiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkIH0gPSB7XG4gICAgJ0VudGVyJzogKCkgPT4ge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5mb2N1c2VkT3B0aW9uKCkgfHwgdGhpcy5zZWFyY2hWYWx1ZSgpO1xuICAgICAgY29uc3QgZHVwbGljYXRlID0gdGhpcy52YWx1ZSgpLmZpbmQodmFsID0+IHZhbC50b0xvd2VyQ2FzZSgpID09PSBuZXdWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgaWYgKCFuZXdWYWx1ZSB8fCBkdXBsaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFkZFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUuc2V0KCcnKTtcbiAgICB9LFxuICAgICdBcnJvd0Rvd24nOiAoKSA9PiB7XG4gICAgICB0aGlzLm1vdmVGb2N1c2VkKCdkb3duJyk7XG4gICAgfSxcbiAgICAnQXJyb3dVcCc6ICgpID0+IHtcbiAgICAgIHRoaXMubW92ZUZvY3VzZWQoJ3VwJyk7XG4gICAgfSxcbiAgICAnQmFja3NwYWNlJzogKCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoSXNFbXB0eSA9ICF0aGlzLnNlYXJjaFZhbHVlKCk7IC8vIGFueSBmYWxzeSB2YWx1ZSBpcyBlbXB0eVxuICAgICAgaWYgKHNlYXJjaElzRW1wdHkgJiYgdGhpcy52YWx1ZSgpPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDaGlwKHRoaXMudmFsdWUoKVt0aGlzLnZhbHVlKCkubGVuZ3RoIC0gMV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuICFzZWFyY2hJc0VtcHR5O1xuICAgIH0sXG4gICAgJ1RhYic6ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRyaWdnZXIoKS5pc09wZW4pIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCkuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIC8qIGVzbGludC1lbmFibGUgKi9cblxuICBoYW5kbGVLZXkoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmtleUhhbmRsZXJNYXBbZS5rZXldO1xuICAgIGhhbmRsZXI/LihlKTtcbiAgfVxuXG4gIHNldEZvY3VzQnlWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZGlzcGxheWVkT3B0aW9ucygpO1xuICAgIGNvbnN0IGZvdW5kSW5kZXggPSBvcHRpb25zLmZpbmRJbmRleChvcHQgPT4gb3B0LnZhbHVlID09PSB2YWx1ZSk7XG4gICAgY29uc3QgZmluYWxJbmRleCA9IGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGZvdW5kSW5kZXg7XG4gICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KGZpbmFsSW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlRm9jdXNlZChkaXJlY3Rpb246ICd1cCcgfCAnZG93bicpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKCk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZvY3VzZWRJbmRleCgpO1xuXG4gICAgY29uc3QgY2xhbXBJbmRleCA9IChuOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKG4gPj0gb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuO1xuICAgIH07XG5cbiAgICBjb25zdCBpbmRleENoYW5nZSA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IC0xIDogMTtcblxuICAgIGNvbnN0IG5ld0luZGV4ID0gY2xhbXBJbmRleChpbmRleCArIGluZGV4Q2hhbmdlKTtcbiAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQobmV3SW5kZXgpO1xuXG4gICAgY29uc3QgbmV3bHlGb2N1c2VkID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKClbdGhpcy5mb2N1c2VkSW5kZXgoKV07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHJ4LWFuZ3VsYXIvcHJlZmVyLW5vLWxheW91dC1zZW5zaXRpdmUtYXBpc1xuICAgIG5ld2x5Rm9jdXNlZC5zY3JvbGxJbnRvVmlldygpO1xuICB9XG5cbn1cbiIsIjxkaXZcbiAgKGNsaWNrKT1cImZvY3VzSW5wdXQoJGV2ZW50KVwiXG4gIGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCJcbiAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZWQnOiBkaXNhYmxlZCgpIH1cIlxuICBbc3R5bGUubWF4LWhlaWdodF09XCJtYXhIZWlnaHQoKVwiXG4gIFtjZGtNZW51VHJpZ2dlckZvcl09XCJtZW51Q29udGVudFwiXG4gIGZ3TWVudVJlZ2lzdGVyXG4gICNpbnB1dENvbnRhaW5lcj5cbiAgPGZ3LWNoaXAtbGlzdCBjbGFzcz1cImNoaXBzXCIgW2Rpc2FibGVPdmVyZmxvd109XCIhIW1heEhlaWdodCgpXCI+XG4gICAgQGZvcih2YWwgb2YgdmFsdWUoKTsgdHJhY2sgdmFsKSB7XG4gICAgICA8ZnctY2hpcFxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBbc2hvd0Nsb3NlXT1cInRydWVcIlxuICAgICAgICBbdGl0bGVdPVwidmFsXCJcbiAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIlxuICAgICAgICAoY2xvc2UpPVwiY2xvc2VDaGlwKHZhbClcIlxuICAgICAgLz5cbiAgICB9XG4gIDwvZnctY2hpcC1saXN0PlxuICA8aW5wdXRcbiAgICB0ZXN0LWlkPVwidHlwZWFoZWFkLWlucHV0XCJcbiAgICBbcGxhY2Vob2xkZXJdPVwic2hvd1BsYWNlaG9sZGVyKCkgPyBwbGFjZWhvbGRlcigpIDogJydcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICBbdmFsdWVdPVwic2VhcmNoVmFsdWUoKVwiXG4gICAgKGtleXVwKT1cImhhbmRsZVNlYXJjaENoYW5nZSgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXkoJGV2ZW50KVwiXG4gICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNMb3NzKCRldmVudClcIlxuICAgICNpbnB1dFxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgLz5cbiAgQGlmKGxvYWRpbmcoKSkge1xuICAgIDxmdy1wcm9ncmVzcy1zcGlubmVyIHNpemU9XCJzbWFsbFwiLz5cbiAgfVxuPC9kaXY+XG48bmctdGVtcGxhdGUgI21lbnVDb250ZW50PlxuICAgIDxmdy1tZW51LWNvbnRhaW5lclxuICAgICAgW21heEhlaWdodF09XCJtYXhPcHRpb25zSGVpZ2h0KClcIlxuICAgICAgW21pbkhlaWdodF09XCJtaW5PcHRpb25zSGVpZ2h0KClcIlxuICAgICAgW3dpZHRoXT1cIm9wdGlvbnNXaWR0aCgpIHx8IGlucHV0Q29udGFpbmVyLm9mZnNldFdpZHRoIC0gMiArICdweCdcIlxuICAgID5cbiAgICAgIDxmdy1tZW51PlxuICAgICAgICBAaWYobG9hZGluZygpICYmICFkaXNwbGF5TmV3T3B0aW9uKCkpIHtcbiAgICAgICAgICA8ZnctbWVudS1pdGVtIHRpdGxlPVwiU2VhcmNoaW5nLi4uXCIgW2Rpc2FibGVkXT1cInRydWVcIi8+XG4gICAgICAgIH0gQGVsc2UgaWYoIWxvYWRpbmcoKSkge1xuICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMoKTsgdHJhY2sgb3B0aW9uKSB7XG4gICAgICAgICAgICA8ZnctbWVudS1pdGVtXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPcHRpb25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2V0Rm9jdXNCeVZhbHVlKG9wdGlvbilcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgW2ZvY3VzZWRdPVwiZm9jdXNlZE9wdGlvbigpID09PSBvcHRpb25cIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbXB0eSB7XG4gICAgICAgICAgICBAaWYgKCFkaXNwbGF5TmV3T3B0aW9uKCkpIHtcbiAgICAgICAgICAgICAgPGZ3LW1lbnUtaXRlbSB0aXRsZT1cIk5vIHRhZyBzdWdnZXN0aW9uc1wiIFtkaXNhYmxlZF09XCJ0cnVlXCIvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaWYoZGlzcGxheU5ld09wdGlvbigpKSB7XG4gICAgICAgICAgPGZ3LW1lbnUtaXRlbVxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9wdGlvbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2V0Rm9jdXNCeVZhbHVlKHNlYXJjaFZhbHVlKCkpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJzZWFyY2hWYWx1ZSgpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hWYWx1ZSgpXCJcbiAgICAgICAgICAgIFtmb2N1c2VkXT1cImZvY3VzZWRPcHRpb24oKSA9PT0gc2VhcmNoVmFsdWUoKVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXctdGFnXCI+TmV3PC9wPlxuICAgICAgICAgIDwvZnctbWVudS1pdGVtPlxuICAgICAgICB9XG4gICAgICA8L2Z3LW1lbnU+XG4gICAgPC9mdy1tZW51LWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=