@flywheel-io/vision 2.0.0-beta-4 → 2.0.0-beta.10

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 (264) hide show
  1. package/assets/fonts/Flywheel-Vision-Icons.svg +26 -0
  2. package/assets/fonts/Flywheel-Vision-Icons.ttf +0 -0
  3. package/assets/fonts/Flywheel-Vision-Icons.woff +0 -0
  4. package/assets/svg/arrow-redo.svg +4 -0
  5. package/assets/svg/arrow-undo.svg +4 -0
  6. package/assets/svg/arrow-up-high-priority.svg +6 -0
  7. package/assets/svg/arrow-up-low-priority.svg +6 -0
  8. package/assets/svg/certificate.svg +4 -0
  9. package/assets/svg/check-mark-certificate.svg +4 -0
  10. package/assets/svg/document-file-checkmark-bottom-left.svg +4 -0
  11. package/assets/svg/folders-copy-expand-arrow-down.svg +6 -0
  12. package/assets/svg/folders-copy-expand-arrow-up.svg +6 -0
  13. package/assets/svg/monitor-computer.svg +4 -0
  14. package/assets/svg/server-databases-checkmark-user.svg +4 -0
  15. package/assets/svg/stop-minus.svg +4 -0
  16. package/assets/svg/user-profile-cards-pool.svg +4 -0
  17. package/components/alert/alert.component.d.ts +1 -1
  18. package/components/app-icon/app-icon.component.d.ts +1 -1
  19. package/components/avatar/avatar.component.d.ts +1 -1
  20. package/components/badge/badge.component.d.ts +1 -1
  21. package/components/breadcrumbs/crumb.component.d.ts +1 -1
  22. package/components/button/button.component.d.ts +1 -1
  23. package/components/button-group/button-group.component.d.ts +1 -1
  24. package/components/button-toggle/button-toggle-item/button-toggle-item.component.d.ts +1 -1
  25. package/components/button-toggle/button-toggle.component.d.ts +2 -1
  26. package/components/card/card-attribute/card-attribute.component.d.ts +1 -1
  27. package/components/card/card-author/card-author.component.d.ts +1 -1
  28. package/components/card/card-header/card-header.component.d.ts +1 -1
  29. package/components/card/card.component.d.ts +1 -1
  30. package/components/checkbox/checkbox.component.d.ts +1 -1
  31. package/components/chip/chip.component.d.ts +1 -1
  32. package/components/contained-input/contained-input.component.d.ts +1 -1
  33. package/components/date-input/date-input.component.d.ts +1 -1
  34. package/components/dialog/dialog-confirm.component.d.ts +1 -1
  35. package/components/dialog/dialog-content.component.d.ts +1 -1
  36. package/components/dialog/dialog-simple.component.d.ts +1 -1
  37. package/components/dialog/dialog.component.d.ts +1 -1
  38. package/components/form-heading/form-heading.component.d.ts +1 -1
  39. package/components/icon/icon.component.d.ts +1 -1
  40. package/components/icon/icon.types.d.ts +2 -2
  41. package/components/icon-button/icon-button.component.d.ts +1 -1
  42. package/components/layouts/context/context.component.d.ts +1 -1
  43. package/components/layouts/grid/grid.component.d.ts +1 -1
  44. package/components/layouts/layout-group.component.d.ts +1 -1
  45. package/components/layouts/panel/panel.component.d.ts +1 -1
  46. package/components/layouts/sidebar/sidebar.component.d.ts +1 -1
  47. package/components/layouts/toolbar/toolbar.component.d.ts +1 -1
  48. package/components/menu/menu-container/menu-container.component.d.ts +1 -1
  49. package/components/menu/menu-item/menu-item.component.d.ts +1 -1
  50. package/components/menu/menu-item-group/menu-item-group.component.d.ts +1 -1
  51. package/components/menu/menu-sub-item/menu-sub-item.component.d.ts +1 -1
  52. package/components/menu/menu.component.d.ts +1 -1
  53. package/components/navbar/navbar-item/navbar-item.component.d.ts +1 -1
  54. package/components/navbar/navbar-sub-item/navbar-sub-item.component.d.ts +1 -1
  55. package/components/navbar/navbar.component.d.ts +1 -1
  56. package/components/number-input/number-input.component.d.ts +1 -1
  57. package/components/paginator/paginator-advanced/paginator-advanced.component.d.ts +1 -1
  58. package/components/paginator/paginator.component.d.ts +1 -1
  59. package/components/phone-input/phone-input.component.d.ts +1 -1
  60. package/components/phone-input/phone-input.model.d.ts +1 -1
  61. package/components/popover/popover-panel/popover-panel.component.d.ts +1 -1
  62. package/components/popover/popover.component.d.ts +1 -1
  63. package/components/progress/bar/bar.component.d.ts +1 -1
  64. package/components/progress/spinner/spinner.component.d.ts +1 -1
  65. package/components/radio/radio-group.component.d.ts +1 -1
  66. package/components/radio/radio.component.d.ts +1 -1
  67. package/components/section-heading/back-button/back-button.component.d.ts +1 -1
  68. package/components/section-heading/section-heading.component.d.ts +1 -1
  69. package/components/section-heading/subsection-heading/subsection-heading.component.d.ts +1 -1
  70. package/components/select-menu/multi-select-menu/multi-select-menu.component.d.ts +5 -4
  71. package/components/select-menu/select-menu.component.d.ts +6 -4
  72. package/components/select-menu/select-menu.module.d.ts +2 -1
  73. package/components/shared/services/menu-manager.service.d.ts +10 -0
  74. package/components/snackbar/snackbar/snackbar.component.d.ts +1 -1
  75. package/components/stepper/step.component.d.ts +1 -1
  76. package/components/stepper/stepper.component.d.ts +1 -1
  77. package/components/switch/switch.component.d.ts +1 -1
  78. package/components/table/cell.d.ts +1 -1
  79. package/components/table/row.d.ts +3 -3
  80. package/components/tabs/tab/tab.component.d.ts +1 -1
  81. package/components/tabs/tab-panel/tab-panel.component.d.ts +1 -1
  82. package/components/tabs/tabs.component.d.ts +1 -1
  83. package/components/text-input/text-input.component.d.ts +1 -1
  84. package/components/textarea-input/textarea-input.component.d.ts +1 -1
  85. package/components/tooltip/tooltip-panel/tooltip-panel.component.d.ts +1 -1
  86. package/components/tooltip/tooltip.component.d.ts +1 -1
  87. package/components/wrapped-input/wrapped-input.component.d.ts +1 -1
  88. package/directives/menu-register.directive.d.ts +14 -0
  89. package/{esm2020 → esm2022}/components/alert/alert.component.mjs +4 -4
  90. package/{esm2020 → esm2022}/components/alert/alert.module.mjs +9 -9
  91. package/{esm2020 → esm2022}/components/app-icon/app-icon.component.mjs +4 -4
  92. package/{esm2020 → esm2022}/components/app-icon/app-icon.module.mjs +7 -7
  93. package/{esm2020 → esm2022}/components/avatar/avatar.component.mjs +4 -4
  94. package/{esm2020 → esm2022}/components/avatar/avatar.module.mjs +7 -7
  95. package/{esm2020 → esm2022}/components/badge/badge.component.mjs +5 -5
  96. package/{esm2020 → esm2022}/components/badge/badge.module.mjs +5 -5
  97. package/{esm2020 → esm2022}/components/breadcrumbs/breadcrumbs.component.mjs +4 -4
  98. package/{esm2020 → esm2022}/components/breadcrumbs/breadcrumbs.module.mjs +9 -9
  99. package/{esm2020 → esm2022}/components/breadcrumbs/crumb.component.mjs +4 -4
  100. package/{esm2020 → esm2022}/components/button/button.component.mjs +4 -4
  101. package/esm2022/components/button/button.directives.mjs +129 -0
  102. package/{esm2020 → esm2022}/components/button/button.module.mjs +19 -19
  103. package/esm2022/components/button-group/button-group.component.mjs +131 -0
  104. package/{esm2020 → esm2022}/components/button-group/button-group.module.mjs +9 -9
  105. package/esm2022/components/button-toggle/button-toggle-item/button-toggle-item.component.mjs +54 -0
  106. package/esm2022/components/button-toggle/button-toggle.component.mjs +137 -0
  107. package/{esm2020 → esm2022}/components/button-toggle/button-toggle.module.mjs +9 -9
  108. package/{esm2020 → esm2022}/components/card/card-attribute/card-attribute.component.mjs +4 -4
  109. package/{esm2020 → esm2022}/components/card/card-author/card-author.component.mjs +4 -4
  110. package/{esm2020 → esm2022}/components/card/card-content/card-content.component.mjs +4 -4
  111. package/{esm2020 → esm2022}/components/card/card-footer/card-footer.component.mjs +7 -7
  112. package/{esm2020 → esm2022}/components/card/card-header/card-header.component.mjs +4 -4
  113. package/{esm2020 → esm2022}/components/card/card.component.mjs +4 -4
  114. package/{esm2020 → esm2022}/components/card/card.module.mjs +19 -19
  115. package/esm2022/components/checkbox/checkbox.component.mjs +79 -0
  116. package/{esm2020 → esm2022}/components/checkbox/checkbox.module.mjs +9 -9
  117. package/{esm2020 → esm2022}/components/chip/chip.component.mjs +5 -5
  118. package/{esm2020 → esm2022}/components/chip/chip.module.mjs +9 -9
  119. package/esm2022/components/contained-input/contained-input.component.mjs +86 -0
  120. package/{esm2020 → esm2022}/components/contained-input/contained-input.module.mjs +13 -13
  121. package/esm2022/components/date-input/date-input.component.mjs +139 -0
  122. package/{esm2020 → esm2022}/components/date-input/date-input.module.mjs +9 -9
  123. package/{esm2020 → esm2022}/components/dialog/dialog-actions.component.mjs +8 -8
  124. package/{esm2020 → esm2022}/components/dialog/dialog-confirm.component.mjs +4 -4
  125. package/{esm2020 → esm2022}/components/dialog/dialog-content.component.mjs +8 -8
  126. package/{esm2020 → esm2022}/components/dialog/dialog-header.component.mjs +8 -8
  127. package/{esm2020 → esm2022}/components/dialog/dialog-simple.component.mjs +4 -4
  128. package/{esm2020 → esm2022}/components/dialog/dialog.component.mjs +4 -4
  129. package/{esm2020 → esm2022}/components/dialog/dialog.service.mjs +4 -4
  130. package/{esm2020 → esm2022}/components/dialog/dialogs.module.mjs +27 -27
  131. package/{esm2020 → esm2022}/components/form-heading/form-heading.component.mjs +4 -4
  132. package/{esm2020 → esm2022}/components/form-heading/form-heading.module.mjs +9 -9
  133. package/esm2022/components/forms/validators.mjs +81 -0
  134. package/esm2022/components/icon/icon.component.mjs +61 -0
  135. package/{esm2020 → esm2022}/components/icon/icon.module.mjs +5 -5
  136. package/esm2022/components/icon/icon.types.mjs +330 -0
  137. package/{esm2020 → esm2022}/components/icon-button/icon-button.component.mjs +4 -4
  138. package/{esm2020 → esm2022}/components/icon-button/icon-button.module.mjs +7 -7
  139. package/{esm2020 → esm2022}/components/layouts/context/context.component.mjs +4 -4
  140. package/{esm2020 → esm2022}/components/layouts/grid/grid.component.mjs +7 -7
  141. package/{esm2020 → esm2022}/components/layouts/layout-group.component.mjs +4 -4
  142. package/{esm2020 → esm2022}/components/layouts/layouts.module.mjs +19 -19
  143. package/{esm2020 → esm2022}/components/layouts/panel/panel.component.mjs +5 -5
  144. package/{esm2020 → esm2022}/components/layouts/sidebar/sidebar.component.mjs +4 -4
  145. package/{esm2020 → esm2022}/components/layouts/toolbar/toolbar.component.mjs +4 -4
  146. package/{esm2020 → esm2022}/components/menu/menu-close-triggers.directive.mjs +4 -4
  147. package/esm2022/components/menu/menu-container/menu-container.component.mjs +90 -0
  148. package/{esm2020 → esm2022}/components/menu/menu-header/menu-header.component.mjs +4 -4
  149. package/{esm2020 → esm2022}/components/menu/menu-item/menu-item.component.mjs +4 -4
  150. package/{esm2020 → esm2022}/components/menu/menu-item-group/menu-item-group.component.mjs +4 -4
  151. package/{esm2020 → esm2022}/components/menu/menu-separator/menu-separator.component.mjs +4 -4
  152. package/esm2022/components/menu/menu-sub-item/menu-sub-item.component.mjs +109 -0
  153. package/{esm2020 → esm2022}/components/menu/menu.component.mjs +21 -21
  154. package/{esm2020 → esm2022}/components/menu/menu.module.mjs +37 -37
  155. package/{esm2020 → esm2022}/components/navbar/navbar-header/navbar-header.component.mjs +4 -4
  156. package/{esm2020 → esm2022}/components/navbar/navbar-item/navbar-item.component.mjs +4 -4
  157. package/esm2022/components/navbar/navbar-sub-item/navbar-sub-item.component.mjs +76 -0
  158. package/{esm2020 → esm2022}/components/navbar/navbar.component.mjs +17 -17
  159. package/{esm2020 → esm2022}/components/navbar/navbar.module.mjs +25 -25
  160. package/esm2022/components/number-input/number-input.component.mjs +122 -0
  161. package/{esm2020 → esm2022}/components/number-input/number-input.module.mjs +9 -9
  162. package/{esm2020 → esm2022}/components/paginator/paginator-advanced/paginator-advanced.component.mjs +4 -4
  163. package/{esm2020 → esm2022}/components/paginator/paginator.component.mjs +4 -4
  164. package/{esm2020 → esm2022}/components/paginator/paginator.module.mjs +17 -17
  165. package/esm2022/components/phone-input/phone-input.component.mjs +285 -0
  166. package/{esm2020 → esm2022}/components/phone-input/phone-input.module.mjs +17 -17
  167. package/{esm2020 → esm2022}/components/popover/popover-panel/popover-panel.component.mjs +4 -4
  168. package/{esm2020 → esm2022}/components/popover/popover.component.mjs +4 -4
  169. package/{esm2020 → esm2022}/components/popover/popover.module.mjs +13 -13
  170. package/{esm2020 → esm2022}/components/progress/bar/bar.component.mjs +4 -4
  171. package/{esm2020 → esm2022}/components/progress/progress.module.mjs +7 -7
  172. package/{esm2020 → esm2022}/components/progress/spinner/spinner.component.mjs +4 -4
  173. package/esm2022/components/radio/radio-group.component.mjs +117 -0
  174. package/esm2022/components/radio/radio.component.mjs +51 -0
  175. package/{esm2020 → esm2022}/components/radio/radio.module.mjs +11 -11
  176. package/{esm2020 → esm2022}/components/section-heading/back-button/back-button.component.mjs +4 -4
  177. package/{esm2020 → esm2022}/components/section-heading/section-heading.component.mjs +4 -4
  178. package/{esm2020 → esm2022}/components/section-heading/section-heading.module.mjs +13 -13
  179. package/{esm2020 → esm2022}/components/section-heading/subsection-heading/subsection-heading.component.mjs +4 -4
  180. package/esm2022/components/select-menu/multi-select-menu/multi-select-menu.component.mjs +376 -0
  181. package/esm2022/components/select-menu/select-menu.component.mjs +332 -0
  182. package/esm2022/components/select-menu/select-menu.module.mjs +56 -0
  183. package/esm2022/components/shared/pipes/pipes.module.mjs +36 -0
  184. package/{esm2020 → esm2022}/components/shared/pipes/translate.pipe.mjs +4 -4
  185. package/{esm2020 → esm2022}/components/shared/pipes/trusthtml.pipe.mjs +4 -4
  186. package/esm2022/components/shared/services/menu-manager.service.mjs +27 -0
  187. package/esm2022/components/shared/translation.service.mjs +26 -0
  188. package/esm2022/components/snackbar/snackbar/snackbar.component.mjs +111 -0
  189. package/esm2022/components/snackbar/snackbar-container/snackbar-container.component.mjs +63 -0
  190. package/{esm2020 → esm2022}/components/snackbar/snackbar.module.mjs +15 -15
  191. package/{esm2020 → esm2022}/components/snackbar/snackbar.service.mjs +4 -4
  192. package/{esm2020 → esm2022}/components/stepper/step.component.mjs +7 -7
  193. package/esm2022/components/stepper/stepper.component.mjs +95 -0
  194. package/{esm2020 → esm2022}/components/stepper/stepper.module.mjs +13 -13
  195. package/esm2022/components/switch/switch.component.mjs +73 -0
  196. package/{esm2020 → esm2022}/components/switch/switch.module.mjs +5 -5
  197. package/{esm2020 → esm2022}/components/table/cell.mjs +24 -24
  198. package/{esm2020 → esm2022}/components/table/row.mjs +22 -22
  199. package/esm2022/components/table/table-dense.component.mjs +38 -0
  200. package/esm2022/components/table/table.component.mjs +38 -0
  201. package/{esm2020 → esm2022}/components/table/table.module.mjs +37 -37
  202. package/{esm2020 → esm2022}/components/tabs/tab/tab.component.mjs +4 -4
  203. package/{esm2020 → esm2022}/components/tabs/tab-panel/tab-panel.component.mjs +4 -4
  204. package/{esm2020 → esm2022}/components/tabs/tabs.component.mjs +4 -4
  205. package/{esm2020 → esm2022}/components/tabs/tabs.module.mjs +11 -11
  206. package/esm2022/components/text-input/text-input.component.mjs +112 -0
  207. package/{esm2020 → esm2022}/components/text-input/text-input.module.mjs +9 -9
  208. package/esm2022/components/textarea-input/textarea-input.component.mjs +86 -0
  209. package/{esm2020 → esm2022}/components/textarea-input/textarea-input.module.mjs +11 -11
  210. package/{esm2020 → esm2022}/components/tooltip/tooltip-panel/tooltip-panel.component.mjs +4 -4
  211. package/{esm2020 → esm2022}/components/tooltip/tooltip.component.mjs +5 -5
  212. package/{esm2020 → esm2022}/components/tooltip/tooltip.module.mjs +13 -13
  213. package/{esm2020 → esm2022}/components/wrapped-input/wrapped-input.component.mjs +4 -4
  214. package/{esm2020 → esm2022}/components/wrapped-input/wrapped-input.module.mjs +7 -7
  215. package/esm2022/directives/menu-register.directive.mjs +38 -0
  216. package/esm2022/public-api.mjs +128 -0
  217. package/{fesm2020 → fesm2022}/flywheel-io-vision.mjs +1351 -1250
  218. package/fesm2022/flywheel-io-vision.mjs.map +1 -0
  219. package/flywheel-io-vision-2.0.0-beta.10.tgz +0 -0
  220. package/package.json +5 -11
  221. package/public-api.d.ts +2 -0
  222. package/scss/icons/_icon-glyphs.scss +667 -1256
  223. package/styles.css +54 -1
  224. package/esm2020/components/button/button.directives.mjs +0 -129
  225. package/esm2020/components/button-group/button-group.component.mjs +0 -131
  226. package/esm2020/components/button-toggle/button-toggle-item/button-toggle-item.component.mjs +0 -54
  227. package/esm2020/components/button-toggle/button-toggle.component.mjs +0 -132
  228. package/esm2020/components/checkbox/checkbox.component.mjs +0 -79
  229. package/esm2020/components/contained-input/contained-input.component.mjs +0 -86
  230. package/esm2020/components/date-input/date-input.component.mjs +0 -139
  231. package/esm2020/components/forms/validators.mjs +0 -81
  232. package/esm2020/components/icon/icon.component.mjs +0 -61
  233. package/esm2020/components/icon/icon.types.mjs +0 -317
  234. package/esm2020/components/menu/menu-container/menu-container.component.mjs +0 -90
  235. package/esm2020/components/menu/menu-sub-item/menu-sub-item.component.mjs +0 -109
  236. package/esm2020/components/navbar/navbar-sub-item/navbar-sub-item.component.mjs +0 -76
  237. package/esm2020/components/number-input/number-input.component.mjs +0 -122
  238. package/esm2020/components/phone-input/phone-input.component.mjs +0 -285
  239. package/esm2020/components/radio/radio-group.component.mjs +0 -117
  240. package/esm2020/components/radio/radio.component.mjs +0 -51
  241. package/esm2020/components/select-menu/multi-select-menu/multi-select-menu.component.mjs +0 -356
  242. package/esm2020/components/select-menu/select-menu.component.mjs +0 -328
  243. package/esm2020/components/select-menu/select-menu.module.mjs +0 -53
  244. package/esm2020/components/shared/pipes/pipes.module.mjs +0 -36
  245. package/esm2020/components/shared/translation.service.mjs +0 -26
  246. package/esm2020/components/snackbar/snackbar/snackbar.component.mjs +0 -111
  247. package/esm2020/components/snackbar/snackbar-container/snackbar-container.component.mjs +0 -63
  248. package/esm2020/components/stepper/stepper.component.mjs +0 -95
  249. package/esm2020/components/switch/switch.component.mjs +0 -73
  250. package/esm2020/components/table/table-dense.component.mjs +0 -38
  251. package/esm2020/components/table/table.component.mjs +0 -38
  252. package/esm2020/components/text-input/text-input.component.mjs +0 -112
  253. package/esm2020/components/textarea-input/textarea-input.component.mjs +0 -86
  254. package/esm2020/public-api.mjs +0 -126
  255. package/fesm2015/flywheel-io-vision.mjs +0 -8039
  256. package/fesm2015/flywheel-io-vision.mjs.map +0 -1
  257. package/fesm2020/flywheel-io-vision.mjs.map +0 -1
  258. package/flywheel-io-vision-2.0.0-beta-4.tgz +0 -0
  259. /package/{esm2020 → esm2022}/components/paginator/paginator.model.mjs +0 -0
  260. /package/{esm2020 → esm2022}/components/phone-input/country-code.data.mjs +0 -0
  261. /package/{esm2020 → esm2022}/components/phone-input/phone-input.model.mjs +0 -0
  262. /package/{esm2020 → esm2022}/components/snackbar/snackbar-message.model.mjs +0 -0
  263. /package/{esm2020 → esm2022}/components/snackbar/snackbar-timer.service.mjs +0 -0
  264. /package/{esm2020 → esm2022}/flywheel-io-vision.mjs +0 -0
@@ -1,117 +0,0 @@
1
- import { Component, ContentChildren, EventEmitter, HostBinding, Input, Output, } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { FwRadioComponent } from './radio.component';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/platform-browser";
6
- export class FwRadioGroupComponent {
7
- constructor(sanitizer) {
8
- this.sanitizer = sanitizer;
9
- this.direction = 'horizontal';
10
- // eslint-disable-next-line @angular-eslint/no-output-native
11
- this.change = new EventEmitter();
12
- this.subscriptions = [];
13
- this.onTouch = () => {
14
- };
15
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
16
- this.onChange = (value) => {
17
- };
18
- }
19
- get style() {
20
- let direction = 'row';
21
- if (this.direction === 'vertical') {
22
- direction = 'column';
23
- }
24
- return this.sanitizer.bypassSecurityTrustStyle(`
25
- display: flex;
26
- flex-direction: ${direction};
27
- `);
28
- }
29
- ngOnChanges() {
30
- this.updateLayout();
31
- }
32
- ngOnDestroy() {
33
- for (const subscription of this.subscriptions) {
34
- subscription.unsubscribe();
35
- }
36
- }
37
- ngAfterContentInit() {
38
- if (this.radioButtons) {
39
- this.radioButtons.forEach(rb => {
40
- const sub = rb.change.subscribe((value) => this.handleChange(value));
41
- this.subscriptions.push(sub);
42
- });
43
- }
44
- this.updateLayout();
45
- }
46
- updateLayout() {
47
- if (this.radioButtons) {
48
- this.radioButtons.forEach(rb => {
49
- rb.group = this.group;
50
- rb.checked = rb.value === this.value;
51
- if (this.color) {
52
- rb.color = this.color;
53
- }
54
- if (this.size) {
55
- rb.size = this.size;
56
- }
57
- if (this.disabled !== undefined) {
58
- rb.disabled = this.disabled;
59
- }
60
- });
61
- }
62
- }
63
- writeValue(value) {
64
- this.value = value;
65
- }
66
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
- registerOnChange(fn) {
68
- this.onChange = fn;
69
- }
70
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
71
- registerOnTouched(fn) {
72
- this.onTouch = fn;
73
- }
74
- setDisabledState(isDisabled) {
75
- this.disabled = isDisabled;
76
- }
77
- handleChange(value) {
78
- this.value = value;
79
- this.onChange(value);
80
- this.change.emit(this.value);
81
- }
82
- }
83
- FwRadioGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FwRadioGroupComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
84
- FwRadioGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FwRadioGroupComponent, selector: "fw-radio-group", inputs: { value: "value", group: "group", color: "color", size: "size", disabled: "disabled", direction: "direction" }, outputs: { change: "change" }, host: { properties: { "style": "this.style" } }, providers: [{
85
- provide: NG_VALUE_ACCESSOR,
86
- useExisting: FwRadioGroupComponent,
87
- multi: true,
88
- }], queries: [{ propertyName: "radioButtons", predicate: FwRadioComponent }], usesOnChanges: true, ngImport: i0, template: '<ng-content select="fw-radio-button"></ng-content>', isInline: true });
89
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FwRadioGroupComponent, decorators: [{
90
- type: Component,
91
- args: [{ selector: 'fw-radio-group', template: '<ng-content select="fw-radio-button"></ng-content>', providers: [{
92
- provide: NG_VALUE_ACCESSOR,
93
- useExisting: FwRadioGroupComponent,
94
- multi: true,
95
- }] }]
96
- }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { value: [{
97
- type: Input
98
- }], group: [{
99
- type: Input
100
- }], color: [{
101
- type: Input
102
- }], size: [{
103
- type: Input
104
- }], disabled: [{
105
- type: Input
106
- }], direction: [{
107
- type: Input
108
- }], change: [{
109
- type: Output
110
- }], radioButtons: [{
111
- type: ContentChildren,
112
- args: [FwRadioComponent]
113
- }], style: [{
114
- type: HostBinding,
115
- args: ['style']
116
- }] } });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcmFkaW8vcmFkaW8tZ3JvdXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQVlyRCxNQUFNLE9BQU8scUJBQXFCO0lBd0I5QixZQUFvQixTQUF1QjtRQUF2QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBbEJsQyxjQUFTLEdBQStCLFlBQVksQ0FBQztRQUM5RCw0REFBNEQ7UUFDbEQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFjdEMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBNENwQyxZQUFPLEdBQUcsR0FBUyxFQUFFO1FBQzVCLENBQUMsQ0FBQztRQUNGLDZEQUE2RDtRQUN0RCxhQUFRLEdBQUcsQ0FBQyxLQUFhLEVBQVEsRUFBRTtRQUMxQyxDQUFDLENBQUM7SUE3Q0YsQ0FBQztJQWRELElBQTBCLEtBQUs7UUFDM0IsSUFBSSxTQUFTLEdBQVcsS0FBSyxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUU7WUFDL0IsU0FBUyxHQUFHLFFBQVEsQ0FBQztTQUN4QjtRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQzs7d0JBRS9CLFNBQVM7R0FDOUIsQ0FBQyxDQUFDO0lBQ0QsQ0FBQztJQVFELFdBQVc7UUFDUCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVc7UUFD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QWpCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNO2dCQUM0QixZQUFZO3NCQUE5QyxlQUFlO3VCQUFDLGdCQUFnQjtnQkFFUCxLQUFLO3NCQUE5QixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVN0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRndSYWRpb0NvbXBvbmVudCB9IGZyb20gJy4vcmFkaW8uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmdy1yYWRpby1ncm91cCcsXG4gICAgc3R5bGVVcmxzOiBbXSxcbiAgICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50IHNlbGVjdD1cImZ3LXJhZGlvLWJ1dHRvblwiPjwvbmctY29udGVudD4nLFxuICAgIHByb3ZpZGVyczogW3tcbiAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgIHVzZUV4aXN0aW5nOiBGd1JhZGlvR3JvdXBDb21wb25lbnQsXG4gICAgICAgIG11bHRpOiB0cnVlLFxuICAgIH1dLFxufSlcbmV4cG9ydCBjbGFzcyBGd1JhZGlvR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQge1xuICAgIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZ3JvdXA6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb2xvcj86ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ2RlZmF1bHQnO1xuICAgIEBJbnB1dCgpIHNpemU/OiAnbWVkaXVtJyB8ICdjb21wYWN0JztcbiAgICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGlyZWN0aW9uPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyA9ICdob3Jpem9udGFsJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gICAgQENvbnRlbnRDaGlsZHJlbihGd1JhZGlvQ29tcG9uZW50KSByYWRpb0J1dHRvbnM6IFF1ZXJ5TGlzdDxGd1JhZGlvQ29tcG9uZW50PjtcblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUnKSBnZXQgc3R5bGUoKTogU2FmZVN0eWxlIHtcbiAgICAgICAgbGV0IGRpcmVjdGlvbjogc3RyaW5nID0gJ3Jvdyc7XG4gICAgICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246ICR7ZGlyZWN0aW9ufTtcbiAgYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xuICAgIH1cblxuXG4gICAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJhZGlvQnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvbnMuZm9yRWFjaChyYiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViID0gcmIuY2hhbmdlLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4gdGhpcy5oYW5kbGVDaGFuZ2UodmFsdWUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVMYXlvdXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJhZGlvQnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvbnMuZm9yRWFjaChyYiA9PiB7XG4gICAgICAgICAgICAgICAgcmIuZ3JvdXAgPSB0aGlzLmdyb3VwO1xuICAgICAgICAgICAgICAgIHJiLmNoZWNrZWQgPSByYi52YWx1ZSA9PT0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2xvcikge1xuICAgICAgICAgICAgICAgICAgICByYi5jb2xvciA9IHRoaXMuY29sb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmIuc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByYi5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ub3VjaCA9ICgpOiB2b2lkID0+IHtcbiAgICB9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgb25DaGFuZ2UgPSAodmFsdWU6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIH07XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfVxufVxuIl19
@@ -1,51 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- export class FwRadioComponent {
5
- constructor() {
6
- this.checked = false;
7
- this.disabled = false;
8
- this.size = 'medium';
9
- this.color = 'default';
10
- this.focused = false;
11
- // eslint-disable-next-line @angular-eslint/no-output-native
12
- this.change = new EventEmitter();
13
- }
14
- get radioStyles() {
15
- return [
16
- 'fw-radio',
17
- this.color,
18
- this.size,
19
- this.focused ? 'focused' : '',
20
- this.disabled ? 'disabled' : '',
21
- ];
22
- }
23
- handleChange(event) {
24
- this.change.emit(event.target.value);
25
- }
26
- }
27
- FwRadioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FwRadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28
- FwRadioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FwRadioComponent, selector: "fw-radio-button", inputs: { checked: "checked", value: "value", group: "group", disabled: "disabled", size: "size", color: "color", title: "title", focused: "focused" }, outputs: { change: "change" }, ngImport: i0, template: "<div [ngClass]=\"['fw-radio-wrapper', disabled?'disabled':'']\">\n <div [ngClass]=\"radioStyles\">\n <input\n type=\"radio\"\n class=\"fw-radio\"\n [id]=\"group+value\"\n [value]=\"value\"\n [checked]=\"checked\"\n [name]=\"group\"\n [disabled]=\"disabled\"\n (change)=\"handleChange($event)\"\n (focusout)=\"focused=false\"\n (focusin)=\"focused=true\"\n />\n </div>\n <label *ngIf=\"title\" [htmlFor]=\"group+value\" class=\"vision-h4\">{{ title }}\n <ng-content></ng-content>\n </label>\n</div>\n", styles: [":host .fw-radio-wrapper{display:flex;align-items:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;cursor:pointer}:host .fw-radio-wrapper label{margin:0 6px 0 0;color:var(--typography-base)}:host .fw-radio-wrapper label:empty{display:none}:host .fw-radio-wrapper .fw-radio{height:36px;width:36px;display:flex;align-items:center;justify-content:center;border-radius:50%}:host .fw-radio-wrapper .fw-radio:hover{background-color:var(--slate-hover)}:host .fw-radio-wrapper .fw-radio.focused{background-color:var(--slate-focus)}:host .fw-radio-wrapper .fw-radio input[type=radio]{-webkit-appearance:none;appearance:none;display:inline-block;width:20px;height:20px;margin:6px;background-clip:content-box;border:2px solid var(--typography-light);background-color:transparent;border-radius:50%;cursor:pointer}:host .fw-radio-wrapper .fw-radio input[type=radio]:checked{width:16px;height:16px;background-color:var(--typography-light);outline:2px solid var(--typography-light);border:2px solid white;margin:8px}:host .fw-radio-wrapper .fw-radio.primary.focused{background-color:var(--primary-focus)}:host .fw-radio-wrapper .fw-radio.primary.focused input[type=radio]{border:2px solid var(--primary-base)}:host .fw-radio-wrapper .fw-radio.primary input[type=radio]:checked{border:2px solid white;background-color:var(--primary-base);outline:2px solid var(--primary-base)}:host .fw-radio-wrapper .fw-radio.secondary.focused{background-color:var(--secondary-focus)}:host .fw-radio-wrapper .fw-radio.secondary.focused input[type=radio]{border:2px solid var(--secondary-base)}:host .fw-radio-wrapper .fw-radio.secondary input[type=radio]:checked{border:2px solid white;background-color:var(--secondary-base);outline:2px solid var(--secondary-base)}:host .fw-radio-wrapper .fw-radio.disabled{cursor:not-allowed}:host .fw-radio-wrapper .fw-radio.disabled input[type=radio]:checked{border:2px solid white;background-color:var(--typography-light);outline:2px solid var(--typography-light)}:host .fw-radio-wrapper .fw-radio.compact{width:30px;height:30px}:host .fw-radio-wrapper .fw-radio.compact input[type=radio]{width:18px;height:18px;margin:5px}:host .fw-radio-wrapper .fw-radio.compact input[type=radio]:checked{width:14px;height:14px;margin:7px}:host .fw-radio-wrapper.disabled{cursor:not-allowed;opacity:.4}:host .fw-radio-wrapper.disabled label{color:var(--typography-light)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FwRadioComponent, decorators: [{
30
- type: Component,
31
- args: [{ selector: 'fw-radio-button', template: "<div [ngClass]=\"['fw-radio-wrapper', disabled?'disabled':'']\">\n <div [ngClass]=\"radioStyles\">\n <input\n type=\"radio\"\n class=\"fw-radio\"\n [id]=\"group+value\"\n [value]=\"value\"\n [checked]=\"checked\"\n [name]=\"group\"\n [disabled]=\"disabled\"\n (change)=\"handleChange($event)\"\n (focusout)=\"focused=false\"\n (focusin)=\"focused=true\"\n />\n </div>\n <label *ngIf=\"title\" [htmlFor]=\"group+value\" class=\"vision-h4\">{{ title }}\n <ng-content></ng-content>\n </label>\n</div>\n", styles: [":host .fw-radio-wrapper{display:flex;align-items:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;cursor:pointer}:host .fw-radio-wrapper label{margin:0 6px 0 0;color:var(--typography-base)}:host .fw-radio-wrapper label:empty{display:none}:host .fw-radio-wrapper .fw-radio{height:36px;width:36px;display:flex;align-items:center;justify-content:center;border-radius:50%}:host .fw-radio-wrapper .fw-radio:hover{background-color:var(--slate-hover)}:host .fw-radio-wrapper .fw-radio.focused{background-color:var(--slate-focus)}:host .fw-radio-wrapper .fw-radio input[type=radio]{-webkit-appearance:none;appearance:none;display:inline-block;width:20px;height:20px;margin:6px;background-clip:content-box;border:2px solid var(--typography-light);background-color:transparent;border-radius:50%;cursor:pointer}:host .fw-radio-wrapper .fw-radio input[type=radio]:checked{width:16px;height:16px;background-color:var(--typography-light);outline:2px solid var(--typography-light);border:2px solid white;margin:8px}:host .fw-radio-wrapper .fw-radio.primary.focused{background-color:var(--primary-focus)}:host .fw-radio-wrapper .fw-radio.primary.focused input[type=radio]{border:2px solid var(--primary-base)}:host .fw-radio-wrapper .fw-radio.primary input[type=radio]:checked{border:2px solid white;background-color:var(--primary-base);outline:2px solid var(--primary-base)}:host .fw-radio-wrapper .fw-radio.secondary.focused{background-color:var(--secondary-focus)}:host .fw-radio-wrapper .fw-radio.secondary.focused input[type=radio]{border:2px solid var(--secondary-base)}:host .fw-radio-wrapper .fw-radio.secondary input[type=radio]:checked{border:2px solid white;background-color:var(--secondary-base);outline:2px solid var(--secondary-base)}:host .fw-radio-wrapper .fw-radio.disabled{cursor:not-allowed}:host .fw-radio-wrapper .fw-radio.disabled input[type=radio]:checked{border:2px solid white;background-color:var(--typography-light);outline:2px solid var(--typography-light)}:host .fw-radio-wrapper .fw-radio.compact{width:30px;height:30px}:host .fw-radio-wrapper .fw-radio.compact input[type=radio]{width:18px;height:18px;margin:5px}:host .fw-radio-wrapper .fw-radio.compact input[type=radio]:checked{width:14px;height:14px;margin:7px}:host .fw-radio-wrapper.disabled{cursor:not-allowed;opacity:.4}:host .fw-radio-wrapper.disabled label{color:var(--typography-light)}\n"] }]
32
- }], propDecorators: { checked: [{
33
- type: Input
34
- }], value: [{
35
- type: Input
36
- }], group: [{
37
- type: Input
38
- }], disabled: [{
39
- type: Input
40
- }], size: [{
41
- type: Input
42
- }], color: [{
43
- type: Input
44
- }], title: [{
45
- type: Input
46
- }], focused: [{
47
- type: Input
48
- }], change: [{
49
- type: Output
50
- }] } });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcmFkaW8vcmFkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcmFkaW8vcmFkaW8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBT3ZFLE1BQU0sT0FBTyxnQkFBZ0I7SUFMN0I7UUFNYSxZQUFPLEdBQVksS0FBSyxDQUFDO1FBR3pCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsU0FBSSxHQUF5QixRQUFRLENBQUM7UUFDdEMsVUFBSyxHQUF3QyxTQUFTLENBQUM7UUFFdkQsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUNsQyw0REFBNEQ7UUFDbEQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7S0FlakQ7SUFiRyxJQUFJLFdBQVc7UUFDWCxPQUFPO1lBQ0gsVUFBVTtZQUNWLElBQUksQ0FBQyxLQUFLO1lBQ1YsSUFBSSxDQUFDLElBQUk7WUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ2xDLENBQUM7SUFDTixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQUs7UUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7OzhHQXhCUSxnQkFBZ0I7a0dBQWhCLGdCQUFnQiw4T0NQN0Isb2pCQW1CQTs0RkRaYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0ksaUJBQWlCOzhCQUtsQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2Z3LXJhZGlvLWJ1dHRvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yYWRpby5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGd1JhZGlvQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBjaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgdmFsdWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBncm91cDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2l6ZTogJ21lZGl1bScgfCAnY29tcGFjdCcgPSAnbWVkaXVtJztcbiAgICBASW5wdXQoKSBjb2xvcjogJ2RlZmF1bHQnIHwgJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgPSAnZGVmYXVsdCc7XG4gICAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gICAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgZ2V0IHJhZGlvU3R5bGVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdmdy1yYWRpbycsXG4gICAgICAgICAgICB0aGlzLmNvbG9yLFxuICAgICAgICAgICAgdGhpcy5zaXplLFxuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID8gJ2ZvY3VzZWQnIDogJycsXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID8gJ2Rpc2FibGVkJyA6ICcnLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgfVxufVxuIiwiPGRpdiBbbmdDbGFzc109XCJbJ2Z3LXJhZGlvLXdyYXBwZXInLCBkaXNhYmxlZD8nZGlzYWJsZWQnOicnXVwiPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInJhZGlvU3R5bGVzXCI+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgY2xhc3M9XCJmdy1yYWRpb1wiXG4gICAgICBbaWRdPVwiZ3JvdXArdmFsdWVcIlxuICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgIFtjaGVja2VkXT1cImNoZWNrZWRcIlxuICAgICAgW25hbWVdPVwiZ3JvdXBcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIChjaGFuZ2UpPVwiaGFuZGxlQ2hhbmdlKCRldmVudClcIlxuICAgICAgKGZvY3Vzb3V0KT1cImZvY3VzZWQ9ZmFsc2VcIlxuICAgICAgKGZvY3VzaW4pPVwiZm9jdXNlZD10cnVlXCJcbiAgICAvPlxuICA8L2Rpdj5cbiAgPGxhYmVsICpuZ0lmPVwidGl0bGVcIiBbaHRtbEZvcl09XCJncm91cCt2YWx1ZVwiIGNsYXNzPVwidmlzaW9uLWg0XCI+e3sgdGl0bGUgfX1cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvbGFiZWw+XG48L2Rpdj5cbiJdfQ==
@@ -1,356 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { CdkMenuTrigger } from '@angular/cdk/menu';
3
- import { Component, ContentChildren, EventEmitter, forwardRef, HostListener, Input, Output, ViewChild, ViewChildren, } from '@angular/core';
4
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
- import { FwMenuComponent } from '../../menu/menu.component';
6
- import { FwMenuItemComponent } from '../../menu/menu-item/menu-item.component';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common";
9
- import * as i2 from "@angular/cdk/menu";
10
- import * as i3 from "../../chip/chip.component";
11
- import * as i4 from "../../icon/icon.component";
12
- import * as i5 from "../../menu/menu.component";
13
- import * as i6 from "../../menu/menu-container/menu-container.component";
14
- import * as i7 from "../../menu/menu-item/menu-item.component";
15
- export class FwMultiSelectMenuComponent {
16
- constructor(_changeDetectorRef) {
17
- this._changeDetectorRef = _changeDetectorRef;
18
- this.options = [];
19
- this.valueProperty = 'value';
20
- this.titleProperty = 'title';
21
- this.iconProperty = 'icon';
22
- this.disabled = false;
23
- this.useCheckbox = false;
24
- this.closeOnSelect = true;
25
- this.filterItemsOnSelect = true;
26
- this.maxSelectedShown = 100;
27
- this.width = '200px';
28
- this.minHeight = '';
29
- this.maxHeight = '200px';
30
- this.size = 'medium';
31
- this.placeholder = 'Select something...';
32
- this.emptyText = 'No matches found...';
33
- this.selectedValues = [];
34
- this.selectedOptions = [];
35
- this.filteredOptions = [];
36
- this.subscriptions = [];
37
- // eslint-disable-next-line @angular-eslint/no-output-native
38
- this.change = new EventEmitter();
39
- this.focused = 0;
40
- this.touched = false;
41
- this._isOpen = false;
42
- this._value = [];
43
- this.onTouched = () => {
44
- };
45
- }
46
- outsideClick() {
47
- if (this._isOpen) {
48
- this.trigger.close();
49
- this._isOpen = false;
50
- }
51
- if (this.trigger && this.trigger.isOpen()) {
52
- this._isOpen = true;
53
- }
54
- }
55
- get value() {
56
- return this._value;
57
- }
58
- set value(newValue) {
59
- this.updateValue(newValue);
60
- }
61
- registerOnChange(fn) {
62
- this.onChange = fn;
63
- }
64
- registerOnTouched(fn) {
65
- this.onTouched = fn;
66
- }
67
- setDisabledState(isDisabled) {
68
- this.disabled = isDisabled;
69
- }
70
- writeValue(value) {
71
- // this.updateValue(value);
72
- this.value = value;
73
- }
74
- ngOnChanges(changes) {
75
- if (changes.options) {
76
- this.filteredOptions = this.options;
77
- }
78
- }
79
- ngOnDestroy() {
80
- for (const subscription of this.subscriptions) {
81
- subscription.unsubscribe();
82
- }
83
- }
84
- ngAfterContentInit() {
85
- if (this.menuItems && this.menuItems.length > 0) {
86
- if (this.options && this.options.length === 0) {
87
- this.options = [];
88
- this.menuItems.forEach(item => {
89
- const opt = {
90
- value: item.value,
91
- label: item.title,
92
- icon: item.icon,
93
- };
94
- this.options.push(opt);
95
- if (this.selectedValues.indexOf(item.value.toString()) >= 0) {
96
- this.selectedOptions.push(opt);
97
- }
98
- const sub = item.click.subscribe(value => this.menu.writeValue(value));
99
- this.subscriptions.push(sub);
100
- });
101
- this.updateFilteredItems();
102
- }
103
- }
104
- }
105
- handleTouched() {
106
- this.touched = true;
107
- }
108
- handleClose(chip) {
109
- this.value.splice(this.value.indexOf(chip[this.valueProperty]), 1);
110
- this.updateValue(this.value);
111
- this.trigger.close();
112
- }
113
- handleChange(e) {
114
- if (Array.isArray(e)) {
115
- if (e.toString() !== this.selectedValues.toString()) {
116
- if (this.closeOnSelect) {
117
- this.trigger.close();
118
- }
119
- }
120
- this.updateValue(e);
121
- }
122
- }
123
- updateFilteredItems() {
124
- if (this.filterItemsOnSelect && this.options && this.value) {
125
- this.filteredOptions = this.options.filter(i => !this.value.includes(i[this.valueProperty]));
126
- }
127
- if (this.value) {
128
- if (this.value.length === 0) {
129
- setTimeout(() => {
130
- // this needs to be delayed to give time for element swap to happen
131
- if (this.textInitialInput && this.textInitialInput.nativeElement && this.touched) {
132
- // eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
133
- this.textInitialInput.nativeElement.focus();
134
- }
135
- }, 100);
136
- }
137
- else {
138
- setTimeout(() => {
139
- // this needs to be delayed to give time for element swap to happen
140
- if (this.textInput && this.textInput.nativeElement && this.touched) {
141
- // eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
142
- this.textInput.nativeElement.focus();
143
- }
144
- }, 100);
145
- }
146
- }
147
- }
148
- updateValue(value) {
149
- this.selectedValues = [];
150
- this.selectedOptions = [];
151
- if (value) {
152
- value.forEach(val => {
153
- if (typeof val === 'object') {
154
- this.selectedValues.push(val[this.valueProperty]);
155
- this.selectedOptions.push(val);
156
- }
157
- else {
158
- this.selectedValues.push(val);
159
- if (this.options && this.options.length) {
160
- this.selectedOptions = [];
161
- this.options.forEach(opt => {
162
- if (value.indexOf(opt[this.valueProperty]) >= 0) {
163
- this.selectedOptions.push(opt);
164
- }
165
- });
166
- }
167
- }
168
- });
169
- }
170
- this._value = this.selectedValues;
171
- this.updateFilteredItems();
172
- if (this.onChange) {
173
- this.onChange(value);
174
- }
175
- this.change.emit(value);
176
- if (this.textInput && this.textInput.nativeElement) {
177
- this.textInput.nativeElement.value = '';
178
- }
179
- }
180
- moveFocused(direction) {
181
- switch (direction) {
182
- case 'down': {
183
- this.focused++;
184
- if (this.focused >= this.filteredOptions.length) {
185
- this.focused = 0;
186
- }
187
- break;
188
- }
189
- case 'up': {
190
- this.focused--;
191
- if (this.focused < 0) {
192
- this.focused = this.filteredOptions.length - 1;
193
- }
194
- break;
195
- }
196
- default: {
197
- this.focused = 0;
198
- break;
199
- }
200
- }
201
- }
202
- handleKeyDown(event) {
203
- if (this.trigger.isOpen()) {
204
- if (event.key === 'ArrowDown') {
205
- this.moveFocused('down');
206
- }
207
- else if (event.key === 'ArrowUp') {
208
- this.moveFocused('up');
209
- }
210
- else if (event.key === 'Tab') {
211
- this.trigger.close();
212
- if (event.target) {
213
- event.target['value'] = '';
214
- }
215
- this.filteredOptions = this.options;
216
- }
217
- else if (event.key === 'Escape') {
218
- this.trigger.close();
219
- if (event.target) {
220
- event.target['value'] = '';
221
- }
222
- this.filteredOptions = this.options;
223
- }
224
- else if (event.key === 'Enter') {
225
- if (this.filteredOptions.length > this.focused) {
226
- if (!this.value.includes(this.filteredOptions[this.focused])) {
227
- const newValue = [...this.value, this.filteredOptions[this.focused][this.valueProperty]];
228
- if (event.target) {
229
- event.target['value'] = '';
230
- }
231
- this.filteredOptions = this.options;
232
- this.updateValue(newValue);
233
- if (this.closeOnSelect) {
234
- setTimeout(() => {
235
- this.trigger.close();
236
- }, 0);
237
- }
238
- else {
239
- setTimeout(() => {
240
- this.trigger.open();
241
- }, 0);
242
- }
243
- }
244
- }
245
- }
246
- }
247
- else {
248
- if (event.key === 'Backspace') {
249
- if (this.value.length > 0 && event.target['value'].length === 0) {
250
- this.value.splice(this.value.length - 1, 1);
251
- this.updateValue(this.value);
252
- }
253
- }
254
- }
255
- }
256
- handleInput(event) {
257
- if (event.target['value'].length > 0) {
258
- this.filteredOptions = this.options.filter(option => {
259
- if (option[this.titleProperty].toLowerCase().includes(event.target['value'].toLowerCase())) {
260
- return !this.value.includes(option);
261
- }
262
- else {
263
- return false;
264
- }
265
- });
266
- }
267
- else {
268
- this.filteredOptions = this.options;
269
- this.updateFilteredItems();
270
- }
271
- if (!this.trigger.isOpen()) {
272
- this.trigger.open();
273
- }
274
- this.moveFocused('zero');
275
- }
276
- }
277
- FwMultiSelectMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FwMultiSelectMenuComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
278
- FwMultiSelectMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FwMultiSelectMenuComponent, selector: "fw-multi-select", inputs: { options: "options", valueProperty: "valueProperty", titleProperty: "titleProperty", iconProperty: "iconProperty", disabled: "disabled", useCheckbox: "useCheckbox", closeOnSelect: "closeOnSelect", filterItemsOnSelect: "filterItemsOnSelect", maxSelectedShown: "maxSelectedShown", width: "width", minHeight: "minHeight", maxHeight: "maxHeight", optionsWidth: "optionsWidth", minOptionsHeight: "minOptionsHeight", maxOptionsHeight: "maxOptionsHeight", size: "size", placeholder: "placeholder", emptyText: "emptyText", value: "value" }, outputs: { change: "change" }, host: { listeners: { "document:click": "outsideClick()" } }, providers: [
279
- {
280
- provide: NG_VALUE_ACCESSOR,
281
- useExisting: forwardRef(() => FwMultiSelectMenuComponent),
282
- multi: true,
283
- },
284
- ], queries: [{ propertyName: "menuItems", predicate: FwMenuItemComponent }], viewQueries: [{ propertyName: "trigger", first: true, predicate: CdkMenuTrigger, descendants: true }, { propertyName: "menu", first: true, predicate: FwMenuComponent, descendants: true }, { propertyName: "textInput", first: true, predicate: ["textInput"], descendants: true }, { propertyName: "textInitialInput", first: true, predicate: ["textInitialInput"], descendants: true }, { propertyName: "renderedMenuItems", predicate: FwMenuItemComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [ngStyle]=\"{width: width}\">\n <div\n [ngClass]=\"['chip-grid', size]\"\n [ngStyle]=\"{minHeight: minHeight, maxHeight: maxHeight}\"\n [cdkMenuTriggerFor]=\"selectMenu\">\n <div class=\"inner-chip-grid\" *ngIf=\"value && value.length>0\">\n <fw-chip\n *ngFor=\"let chip of selectedOptions | slice:0:maxSelectedShown\"\n [title]=\"chip[titleProperty]\"\n [value]=\"chip[valueProperty]\"\n [icon]=\"chip[iconProperty]\"\n color=\"primary\"\n [showClose]=\"true\"\n (close)=\"handleClose(chip)\"\n [selectable]=\"false\">\n </fw-chip>\n <span *ngIf=\"value.length>maxSelectedShown\" class=\"max-exceeded\">+{{ value.length - maxSelectedShown }}\n more</span>\n <input\n type=\"text\" #textInput\n class=\"placeholder\"\n (keydown)=\"handleKeyDown($event)\" (input)=\"handleInput($event)\">\n </div>\n <input\n type=\"text\" #textInitialInput\n *ngIf=\"!value || value.length===0\"\n class=\"placeholder\" [placeholder]=\"placeholder\"\n (focus)=\"handleTouched()\"\n (keydown)=\"handleKeyDown($event)\" (input)=\"handleInput($event)\">\n <fw-icon>chevron-down</fw-icon>\n </div>\n <ng-template #selectMenu>\n <fw-menu-container\n [width]=\"optionsWidth || width\" [maxHeight]=\"maxOptionsHeight\" [minHeight]=\"minOptionsHeight\"\n *ngIf=\"emptyText.length > 0 || (filteredOptions && filteredOptions.length > 0)\">\n <fw-menu\n [multiSelect]=\"true\"\n [disabled]=\"disabled || (filteredOptions && filteredOptions.length===0)\"\n [value]=\"selectedValues\"\n (change)=\"handleChange($event)\">\n <ng-container *ngIf=\"menuItems && menuItems.length===0\">\n <fw-menu-item\n *ngFor=\"let item of filteredOptions; index as $index\"\n [title]=\"item[titleProperty]\"\n [value]=\"item[valueProperty]\"\n [icon]=\"item[iconProperty]\"\n [multiSelect]=\"true\"\n [showCheckbox]=\"useCheckbox\"\n [focused]=\"focused===$index\"\n (mouseover)=\"focused=$index\"\n >\n </fw-menu-item>\n <fw-menu-item\n *ngIf=\"filteredOptions && filteredOptions.length===0 && emptyText\" [showCheckbox]=\"false\"\n [disabled]=\"true\" [title]=\"emptyText\">\n </fw-menu-item>\n </ng-container>\n <ng-content select=\"[fw-menu-item, fw-menu-separator]\"></ng-content>\n </fw-menu>\n </fw-menu-container>\n </ng-template>\n</div>\n", styles: [":host .chip-grid{min-height:36px;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;padding:4px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid.small{min-height:30px;padding:2px}:host .chip-grid.large{min-height:40px;padding:6px}:host .chip-grid:focus-within{border-color:var(--primary-base)}:host .chip-grid .inner-chip-grid{display:flex;flex-wrap:wrap;gap:4px;overflow:hidden auto;align-items:center;flex:1}:host .chip-grid .inner-chip-grid input{display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder{padding:0 2px 0 4px;font-size:14px;color:var(--typography-base);background:var(--page-light);border:0;outline:0;display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder:focus{outline:none!important}:host .chip-grid .placeholder::placeholder{color:var(--typography-light)}:host .chip-grid fw-icon{font-size:20px}:host .chip-grid fw-icon:hover{color:var(--primary-base)}:host .chip-grid .max-exceeded{font-size:12px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "component", type: i3.FwChipComponent, selector: "fw-chip", inputs: ["value", "variant", "color", "icon", "title", "description", "showClose", "disabled", "selected", "selectable"], outputs: ["close", "select"] }, { kind: "component", type: i4.FwIconComponent, selector: "fw-icon", inputs: ["size", "color"] }, { kind: "component", type: i5.FwMenuComponent, selector: "fw-menu", inputs: ["disabled", "size", "multiSelect", "useCheckbox", "value", "variant", "collapsed", "collapsedWidth", "openWidth"], outputs: ["change", "filteredItemsChange"] }, { kind: "component", type: i6.FwMenuContainerComponent, selector: "fw-menu-container", inputs: ["width", "maxHeight", "minHeight", "border", "shadow", "showFilter", "filterText", "offset", "collapsed"], outputs: ["filterChanged"] }, { kind: "component", type: i7.FwMenuItemComponent, selector: "fw-menu-item", inputs: ["value", "size", "title", "description", "icon", "iconColor", "disabled", "showCheckbox", "checkboxColor", "multiSelect", "hidden", "collapsed", "href", "target", "subItemsOpen", "focused", "selected", "variant"], outputs: ["click"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }] });
285
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FwMultiSelectMenuComponent, decorators: [{
286
- type: Component,
287
- args: [{ selector: 'fw-multi-select', providers: [
288
- {
289
- provide: NG_VALUE_ACCESSOR,
290
- useExisting: forwardRef(() => FwMultiSelectMenuComponent),
291
- multi: true,
292
- },
293
- ], template: "<div [ngStyle]=\"{width: width}\">\n <div\n [ngClass]=\"['chip-grid', size]\"\n [ngStyle]=\"{minHeight: minHeight, maxHeight: maxHeight}\"\n [cdkMenuTriggerFor]=\"selectMenu\">\n <div class=\"inner-chip-grid\" *ngIf=\"value && value.length>0\">\n <fw-chip\n *ngFor=\"let chip of selectedOptions | slice:0:maxSelectedShown\"\n [title]=\"chip[titleProperty]\"\n [value]=\"chip[valueProperty]\"\n [icon]=\"chip[iconProperty]\"\n color=\"primary\"\n [showClose]=\"true\"\n (close)=\"handleClose(chip)\"\n [selectable]=\"false\">\n </fw-chip>\n <span *ngIf=\"value.length>maxSelectedShown\" class=\"max-exceeded\">+{{ value.length - maxSelectedShown }}\n more</span>\n <input\n type=\"text\" #textInput\n class=\"placeholder\"\n (keydown)=\"handleKeyDown($event)\" (input)=\"handleInput($event)\">\n </div>\n <input\n type=\"text\" #textInitialInput\n *ngIf=\"!value || value.length===0\"\n class=\"placeholder\" [placeholder]=\"placeholder\"\n (focus)=\"handleTouched()\"\n (keydown)=\"handleKeyDown($event)\" (input)=\"handleInput($event)\">\n <fw-icon>chevron-down</fw-icon>\n </div>\n <ng-template #selectMenu>\n <fw-menu-container\n [width]=\"optionsWidth || width\" [maxHeight]=\"maxOptionsHeight\" [minHeight]=\"minOptionsHeight\"\n *ngIf=\"emptyText.length > 0 || (filteredOptions && filteredOptions.length > 0)\">\n <fw-menu\n [multiSelect]=\"true\"\n [disabled]=\"disabled || (filteredOptions && filteredOptions.length===0)\"\n [value]=\"selectedValues\"\n (change)=\"handleChange($event)\">\n <ng-container *ngIf=\"menuItems && menuItems.length===0\">\n <fw-menu-item\n *ngFor=\"let item of filteredOptions; index as $index\"\n [title]=\"item[titleProperty]\"\n [value]=\"item[valueProperty]\"\n [icon]=\"item[iconProperty]\"\n [multiSelect]=\"true\"\n [showCheckbox]=\"useCheckbox\"\n [focused]=\"focused===$index\"\n (mouseover)=\"focused=$index\"\n >\n </fw-menu-item>\n <fw-menu-item\n *ngIf=\"filteredOptions && filteredOptions.length===0 && emptyText\" [showCheckbox]=\"false\"\n [disabled]=\"true\" [title]=\"emptyText\">\n </fw-menu-item>\n </ng-container>\n <ng-content select=\"[fw-menu-item, fw-menu-separator]\"></ng-content>\n </fw-menu>\n </fw-menu-container>\n </ng-template>\n</div>\n", styles: [":host .chip-grid{min-height:36px;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;padding:4px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid.small{min-height:30px;padding:2px}:host .chip-grid.large{min-height:40px;padding:6px}:host .chip-grid:focus-within{border-color:var(--primary-base)}:host .chip-grid .inner-chip-grid{display:flex;flex-wrap:wrap;gap:4px;overflow:hidden auto;align-items:center;flex:1}:host .chip-grid .inner-chip-grid input{display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder{padding:0 2px 0 4px;font-size:14px;color:var(--typography-base);background:var(--page-light);border:0;outline:0;display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder:focus{outline:none!important}:host .chip-grid .placeholder::placeholder{color:var(--typography-light)}:host .chip-grid fw-icon{font-size:20px}:host .chip-grid fw-icon:hover{color:var(--primary-base)}:host .chip-grid .max-exceeded{font-size:12px}\n"] }]
294
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { outsideClick: [{
295
- type: HostListener,
296
- args: ['document:click']
297
- }], options: [{
298
- type: Input
299
- }], valueProperty: [{
300
- type: Input
301
- }], titleProperty: [{
302
- type: Input
303
- }], iconProperty: [{
304
- type: Input
305
- }], disabled: [{
306
- type: Input
307
- }], useCheckbox: [{
308
- type: Input
309
- }], closeOnSelect: [{
310
- type: Input
311
- }], filterItemsOnSelect: [{
312
- type: Input
313
- }], maxSelectedShown: [{
314
- type: Input
315
- }], width: [{
316
- type: Input
317
- }], minHeight: [{
318
- type: Input
319
- }], maxHeight: [{
320
- type: Input
321
- }], optionsWidth: [{
322
- type: Input
323
- }], minOptionsHeight: [{
324
- type: Input
325
- }], maxOptionsHeight: [{
326
- type: Input
327
- }], size: [{
328
- type: Input
329
- }], placeholder: [{
330
- type: Input
331
- }], emptyText: [{
332
- type: Input
333
- }], trigger: [{
334
- type: ViewChild,
335
- args: [CdkMenuTrigger]
336
- }], menu: [{
337
- type: ViewChild,
338
- args: [FwMenuComponent]
339
- }], renderedMenuItems: [{
340
- type: ViewChildren,
341
- args: [FwMenuItemComponent]
342
- }], menuItems: [{
343
- type: ContentChildren,
344
- args: [FwMenuItemComponent]
345
- }], textInput: [{
346
- type: ViewChild,
347
- args: ['textInput']
348
- }], textInitialInput: [{
349
- type: ViewChild,
350
- args: ['textInitialInput']
351
- }], change: [{
352
- type: Output
353
- }], value: [{
354
- type: Input
355
- }] } });
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBR0wsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7Ozs7O0FBYy9FLE1BQU0sT0FBTywwQkFBMEI7SUF3RHJDLFlBQXNCLGtCQUFxQztRQUFyQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBN0NsRCxZQUFPLEdBQWEsRUFBRSxDQUFDO1FBQ3ZCLGtCQUFhLEdBQVksT0FBTyxDQUFDO1FBQ2pDLGtCQUFhLEdBQVksT0FBTyxDQUFDO1FBQ2pDLGlCQUFZLEdBQVksTUFBTSxDQUFDO1FBQy9CLGFBQVEsR0FBYSxLQUFLLENBQUM7UUFDM0IsZ0JBQVcsR0FBYSxLQUFLLENBQUM7UUFDOUIsa0JBQWEsR0FBYSxJQUFJLENBQUM7UUFDL0Isd0JBQW1CLEdBQWEsSUFB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QkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDcUIsT0FBTztzQkFBakMsU0FBUzt1QkFBQyxjQUFjO2dCQUNHLElBQUk7c0JBQS9CLFNBQVM7dUJBQUMsZUFBZTtnQkFDUyxpQkFBaUI7c0JBQW5ELFlBQVk7dUJBQUMsbUJBQW1CO2dCQUNLLFNBQVM7c0JBQTlDLGVBQWU7dUJBQUMsbUJBQW1CO2dCQUtaLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDUyxnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUVuQixNQUFNO3NCQUFmLE1BQU07Z0JBTUgsS0FBSztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENka01lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL21lbnUnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZ3TWVudUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21lbnUvbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRndNZW51SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21lbnUvbWVudS1pdGVtL21lbnUtaXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmdy1tdWx0aS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tdWx0aS1zZWxlY3QtbWVudS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZ3TXVsdGlTZWxlY3RNZW51Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZ3TXVsdGlTZWxlY3RNZW51Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snKSBvdXRzaWRlQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzT3Blbikge1xuICAgICAgdGhpcy50cmlnZ2VyLmNsb3NlKCk7XG4gICAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHJpZ2dlciAmJiB0aGlzLnRyaWdnZXIuaXNPcGVuKCkpIHtcbiAgICAgIHRoaXMuX2lzT3BlbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgb3B0aW9uczogb2JqZWN0W10gPSBbXTtcbiAgQElucHV0KCkgdmFsdWVQcm9wZXJ0eT86IHN0cmluZyA9ICd2YWx1ZSc7XG4gIEBJbnB1dCgpIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcgPSAndGl0bGUnO1xuICBASW5wdXQoKSBpY29uUHJvcGVydHk/OiBzdHJpbmcgPSAnaWNvbic7XG4gIEBJbnB1dCgpIGRpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB1c2VDaGVja2JveD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY2xvc2VPblNlbGVjdD86IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBmaWx0ZXJJdGVtc09uU2VsZWN0PzogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIG1heFNlbGVjdGVkU2hvd246IG51bWJlciA9IDEwMDtcbiAgQElucHV0KCkgd2lkdGg6IHN0cmluZyA9ICcyMDBweCc7XG4gIEBJbnB1dCgpIG1pbkhlaWdodDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIG1heEhlaWdodDogc3RyaW5nID0gJzIwMHB4JztcbiAgQElucHV0KCkgb3B0aW9uc1dpZHRoPzogc3RyaW5nO1xuICBASW5wdXQoKSBtaW5PcHRpb25zSGVpZ2h0Pzogc3RyaW5nO1xuICBASW5wdXQoKSBtYXhPcHRpb25zSGVpZ2h0Pzogc3RyaW5nO1xuICBASW5wdXQoKSBzaXplPzogJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJyA9ICdtZWRpdW0nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBzb21ldGhpbmcuLi4nO1xuICBASW5wdXQoKSBlbXB0eVRleHQ6IHN0cmluZyA9ICdObyBtYXRjaGVzIGZvdW5kLi4uJztcbiAgQFZpZXdDaGlsZChDZGtNZW51VHJpZ2dlcikgdHJpZ2dlcjogQ2RrTWVudVRyaWdnZXI7XG4gIEBWaWV3Q2hpbGQoRndNZW51Q29tcG9uZW50KSBtZW51OiBGd01lbnVDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGRyZW4oRndNZW51SXRlbUNvbXBvbmVudCkgcmVuZGVyZWRNZW51SXRlbXM6IFF1ZXJ5TGlzdDxGd01lbnVJdGVtQ29tcG9uZW50PjtcbiAgQENvbnRlbnRDaGlsZHJlbihGd01lbnVJdGVtQ29tcG9uZW50KSBtZW51SXRlbXM6IFF1ZXJ5TGlzdDxGd01lbnVJdGVtQ29tcG9uZW50PjtcbiAgc2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkT3B0aW9uczogb2JqZWN0W10gPSBbXTtcbiAgZmlsdGVyZWRPcHRpb25zOiBvYmplY3RbXSA9IFtdO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIEBWaWV3Q2hpbGQoJ3RleHRJbnB1dCcpIHRleHRJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgndGV4dEluaXRpYWxJbnB1dCcpIHRleHRJbml0aWFsSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIGZvY3VzZWQgPSAwO1xuICBwcml2YXRlIHRvdWNoZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNPcGVuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUobmV3VmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZShuZXdWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZTogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG5cblxuICBvbkNoYW5nZTogKHZhbHVlOiBhbnlbXSkgPT4gdm9pZDtcbiAgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge1xuICB9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnlbXSk6IHZvaWQge1xuICAgIC8vIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiB0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZW51SXRlbXMgJiYgdGhpcy5tZW51SXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLm1lbnVJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdCA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgbGFiZWw6IGl0ZW0udGl0bGUsXG4gICAgICAgICAgICBpY29uOiBpdGVtLmljb24sXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHQpO1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVzLmluZGV4T2YoaXRlbS52YWx1ZS50b1N0cmluZygpKSA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5wdXNoKG9wdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN1YiA9IGl0ZW0uY2xpY2suc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMubWVudS53cml0ZVZhbHVlKHZhbHVlKSk7XG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3ViKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVRvdWNoZWQoKTogdm9pZCB7XG4gICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUNsb3NlKGNoaXA6IG9iamVjdCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUuc3BsaWNlKHRoaXMudmFsdWUuaW5kZXhPZihjaGlwW3RoaXMudmFsdWVQcm9wZXJ0eV0pLCAxKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlKGU6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHtcbiAgICAgIGlmIChlLnRvU3RyaW5nKCkgIT09IHRoaXMuc2VsZWN0ZWRWYWx1ZXMudG9TdHJpbmcoKSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZU9uU2VsZWN0KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlVmFsdWUoZSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyZWRJdGVtcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWx0ZXJJdGVtc09uU2VsZWN0ICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIoaSA9PiAhdGhpcy52YWx1ZS5pbmNsdWRlcyhpW3RoaXMudmFsdWVQcm9wZXJ0eV0pKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHRoaXMgbmVlZHMgdG8gYmUgZGVsYXllZCB0byBnaXZlIHRpbWUgZm9yIGVsZW1lbnQgc3dhcCB0byBoYXBwZW5cbiAgICAgICAgICBpZiAodGhpcy50ZXh0SW5pdGlhbElucHV0ICYmIHRoaXMudGV4dEluaXRpYWxJbnB1dC5uYXRpdmVFbGVtZW50ICYmIHRoaXMudG91Y2hlZCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEByeC1hbmd1bGFyL3ByZWZlci1uby1sYXlvdXQtc2Vuc2l0aXZlLWFwaXNcbiAgICAgICAgICAgIHRoaXMudGV4dEluaXRpYWxJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gdGhpcyBuZWVkcyB0byBiZSBkZWxheWVkIHRvIGdpdmUgdGltZSBmb3IgZWxlbWVudCBzd2FwIHRvIGhhcHBlblxuICAgICAgICAgIGlmICh0aGlzLnRleHRJbnB1dCAmJiB0aGlzLnRleHRJbnB1dC5uYXRpdmVFbGVtZW50ICYmIHRoaXMudG91Y2hlZCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEByeC1hbmd1bGFyL3ByZWZlci1uby1sYXlvdXQtc2Vuc2l0aXZlLWFwaXNcbiAgICAgICAgICAgIHRoaXMudGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVmFsdWUodmFsdWU6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gW107XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucHVzaCh2YWxbdGhpcy52YWx1ZVByb3BlcnR5XSk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaCh2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucHVzaCh2YWwpO1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKG9wdCA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKG9wdFt0aGlzLnZhbHVlUHJvcGVydHldKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChvcHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXM7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgaWYgKHRoaXMub25DaGFuZ2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICBpZiAodGhpcy50ZXh0SW5wdXQgJiYgdGhpcy50ZXh0SW5wdXQubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy50ZXh0SW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVGb2N1c2VkKGRpcmVjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2Rvd24nOiB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCsrO1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkID49IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd1cCc6IHtcbiAgICAgICAgdGhpcy5mb2N1c2VkLS07XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWQgPCAwKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c2VkID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyaWdnZXIuaXNPcGVuKCkpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzZWQoJ2Rvd24nKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgdGhpcy5tb3ZlRm9jdXNlZCgndXAnKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCkge1xuICAgICAgICAgIGV2ZW50LnRhcmdldFsndmFsdWUnXSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0KSB7XG4gICAgICAgICAgZXZlbnQudGFyZ2V0Wyd2YWx1ZSddID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gdGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnZhbHVlLmluY2x1ZGVzKHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuZm9jdXNlZF0pKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IFsuLi50aGlzLnZhbHVlLCB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmZvY3VzZWRdW3RoaXMudmFsdWVQcm9wZXJ0eV1dO1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCkge1xuICAgICAgICAgICAgICBldmVudC50YXJnZXRbJ3ZhbHVlJ10gPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZU9uU2VsZWN0KSB7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlci5vcGVuKCk7XG4gICAgICAgICAgICAgIH0sIDApO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA+IDAgJiYgZXZlbnQudGFyZ2V0Wyd2YWx1ZSddLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKHRoaXMudmFsdWUubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUlucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC50YXJnZXRbJ3ZhbHVlJ10ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiB7XG4gICAgICAgIGlmIChvcHRpb25bdGhpcy50aXRsZVByb3BlcnR5XS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnRhcmdldFsndmFsdWUnXS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIHJldHVybiAhdGhpcy52YWx1ZS5pbmNsdWRlcyhvcHRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmlnZ2VyLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLnRyaWdnZXIub3BlbigpO1xuICAgIH1cbiAgICB0aGlzLm1vdmVGb2N1c2VkKCd6ZXJvJyk7XG4gIH1cbn1cbiIsIjxkaXYgW25nU3R5bGVdPVwie3dpZHRoOiB3aWR0aH1cIj5cbiAgPGRpdlxuICAgIFtuZ0NsYXNzXT1cIlsnY2hpcC1ncmlkJywgc2l6ZV1cIlxuICAgIFtuZ1N0eWxlXT1cInttaW5IZWlnaHQ6IG1pbkhlaWdodCwgbWF4SGVpZ2h0OiBtYXhIZWlnaHR9XCJcbiAgICBbY2RrTWVudVRyaWdnZXJGb3JdPVwic2VsZWN0TWVudVwiPlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1jaGlwLWdyaWRcIiAqbmdJZj1cInZhbHVlICYmIHZhbHVlLmxlbmd0aD4wXCI+XG4gICAgICA8ZnctY2hpcFxuICAgICAgICAqbmdGb3I9XCJsZXQgY2hpcCBvZiBzZWxlY3RlZE9wdGlvbnMgfCBzbGljZTowOm1heFNlbGVjdGVkU2hvd25cIlxuICAgICAgICBbdGl0bGVdPVwiY2hpcFt0aXRsZVByb3BlcnR5XVwiXG4gICAgICAgIFt2YWx1ZV09XCJjaGlwW3ZhbHVlUHJvcGVydHldXCJcbiAgICAgICAgW2ljb25dPVwiY2hpcFtpY29uUHJvcGVydHldXCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgW3Nob3dDbG9zZV09XCJ0cnVlXCJcbiAgICAgICAgKGNsb3NlKT1cImhhbmRsZUNsb3NlKGNoaXApXCJcbiAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIj5cbiAgICAgIDwvZnctY2hpcD5cbiAgICAgIDxzcGFuICpuZ0lmPVwidmFsdWUubGVuZ3RoPm1heFNlbGVjdGVkU2hvd25cIiBjbGFzcz1cIm1heC1leGNlZWRlZFwiPit7eyB2YWx1ZS5sZW5ndGggLSBtYXhTZWxlY3RlZFNob3duIH19XG4gICAgICAgIG1vcmU8L3NwYW4+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIiAjdGV4dElucHV0XG4gICAgICAgIGNsYXNzPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIiAoaW5wdXQpPVwiaGFuZGxlSW5wdXQoJGV2ZW50KVwiPlxuICAgIDwvZGl2PlxuICAgIDxpbnB1dFxuICAgICAgdHlwZT1cInRleHRcIiAjdGV4dEluaXRpYWxJbnB1dFxuICAgICAgKm5nSWY9XCIhdmFsdWUgfHwgdmFsdWUubGVuZ3RoPT09MFwiXG4gICAgICBjbGFzcz1cInBsYWNlaG9sZGVyXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIChmb2N1cyk9XCJoYW5kbGVUb3VjaGVkKClcIlxuICAgICAgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCIgKGlucHV0KT1cImhhbmRsZUlucHV0KCRldmVudClcIj5cbiAgICA8ZnctaWNvbj5jaGV2cm9uLWRvd248L2Z3LWljb24+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI3NlbGVjdE1lbnU+XG4gICAgPGZ3LW1lbnUtY29udGFpbmVyXG4gICAgICBbd2lkdGhdPVwib3B0aW9uc1dpZHRoIHx8IHdpZHRoXCIgW21heEhlaWdodF09XCJtYXhPcHRpb25zSGVpZ2h0XCIgW21pbkhlaWdodF09XCJtaW5PcHRpb25zSGVpZ2h0XCJcbiAgICAgICpuZ0lmPVwiZW1wdHlUZXh0Lmxlbmd0aCA+IDAgfHwgKGZpbHRlcmVkT3B0aW9ucyAmJiBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMClcIj5cbiAgICAgIDxmdy1tZW51XG4gICAgICAgIFttdWx0aVNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IChmaWx0ZXJlZE9wdGlvbnMgJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aD09PTApXCJcbiAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkVmFsdWVzXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVudUl0ZW1zICYmIG1lbnVJdGVtcy5sZW5ndGg9PT0wXCI+XG4gICAgICAgICAgPGZ3LW1lbnUtaXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRPcHRpb25zOyBpbmRleCBhcyAkaW5kZXhcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1bdGl0bGVQcm9wZXJ0eV1cIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1bdmFsdWVQcm9wZXJ0eV1cIlxuICAgICAgICAgICAgW2ljb25dPVwiaXRlbVtpY29uUHJvcGVydHldXCJcbiAgICAgICAgICAgIFttdWx0aVNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzaG93Q2hlY2tib3hdPVwidXNlQ2hlY2tib3hcIlxuICAgICAgICAgICAgW2ZvY3VzZWRdPVwiZm9jdXNlZD09PSRpbmRleFwiXG4gICAgICAgICAgICAobW91c2VvdmVyKT1cImZvY3VzZWQ9JGluZGV4XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9mdy1tZW51LWl0ZW0+XG4gICAgICAgICAgPGZ3LW1lbnUtaXRlbVxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJlZE9wdGlvbnMgJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aD09PTAgJiYgZW1wdHlUZXh0XCIgW3Nob3dDaGVja2JveF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiIFt0aXRsZV09XCJlbXB0eVRleHRcIj5cbiAgICAgICAgICA8L2Z3LW1lbnUtaXRlbT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmdy1tZW51LWl0ZW0sIGZ3LW1lbnUtc2VwYXJhdG9yXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZnctbWVudT5cbiAgICA8L2Z3LW1lbnUtY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=