@eui/components 17.0.0-rc.6 → 17.0.0-rc.8

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 (339) hide show
  1. package/docs/components/ChartComponent.html +2 -2
  2. package/docs/components/CollapsedBreadcrumbComponent.html +2 -2
  3. package/docs/components/EuiAlertComponent.html +143 -17
  4. package/docs/components/EuiAppBreadcrumbComponent.html +2 -2
  5. package/docs/components/EuiAppComponent.html +2 -2
  6. package/docs/components/EuiAppFooterComponent.html +2 -2
  7. package/docs/components/EuiAppHeaderComponent.html +2 -2
  8. package/docs/components/EuiAppSidebarBodyComponent.html +2 -2
  9. package/docs/components/EuiAppSidebarComponent.html +2 -2
  10. package/docs/components/EuiAppSidebarDrawerComponent.html +2 -2
  11. package/docs/components/EuiAppSidebarFooterComponent.html +2 -2
  12. package/docs/components/EuiAppSidebarHeaderComponent.html +2 -2
  13. package/docs/components/EuiAppSidebarHeaderUserProfileComponent.html +2 -2
  14. package/docs/components/EuiAppSidebarMenuComponent.html +4 -4
  15. package/docs/components/EuiAppToolbarComponent.html +2 -2
  16. package/docs/components/EuiAppTopMessageComponent.html +2 -2
  17. package/docs/components/EuiAutocompleteAsyncTestComponent.html +2 -2
  18. package/docs/components/EuiAutocompleteChipsAsyncTestComponent.html +2 -2
  19. package/docs/components/EuiAutocompleteChipsTestComponent.html +2 -2
  20. package/docs/components/EuiAutocompleteComponent.html +31 -19
  21. package/docs/components/EuiAutocompleteOptionComponent.html +2 -2
  22. package/docs/components/EuiAutocompleteOptionGroupComponent.html +2 -2
  23. package/docs/components/EuiAutocompleteTestComponent.html +2 -2
  24. package/docs/components/EuiAvatarBadgeComponent.html +2 -2
  25. package/docs/components/EuiAvatarComponent.html +17 -74
  26. package/docs/components/EuiAvatarIconComponent.html +2 -2
  27. package/docs/components/EuiAvatarImageComponent.html +2 -2
  28. package/docs/components/EuiAvatarListComponent.html +2 -2
  29. package/docs/components/EuiAvatarTextComponent.html +2 -2
  30. package/docs/components/EuiBadgeComponent.html +63 -639
  31. package/docs/components/EuiBlockContentComponent.html +4 -4
  32. package/docs/components/EuiBlockDocumentComponent.html +21 -728
  33. package/docs/components/EuiBreadcrumbComponent.html +2 -2
  34. package/docs/components/EuiBreadcrumbItemComponent.html +2 -2
  35. package/docs/components/EuiButtonComponent.html +2 -2
  36. package/docs/components/EuiButtonGroupComponent.html +2 -2
  37. package/docs/components/EuiButtonsComponent.html +2 -2
  38. package/docs/components/EuiCardComponent.html +2 -2
  39. package/docs/components/EuiCardContentComponent.html +71 -2
  40. package/docs/components/EuiCardFooterActionButtonsComponent.html +2 -2
  41. package/docs/components/EuiCardFooterActionIconsComponent.html +2 -2
  42. package/docs/components/EuiCardFooterComponent.html +2 -2
  43. package/docs/components/EuiCardFooterMenuContentComponent.html +2 -2
  44. package/docs/components/EuiCardHeaderBodyComponent.html +2 -2
  45. package/docs/components/EuiCardHeaderComponent.html +2 -2
  46. package/docs/components/EuiCardHeaderLeftContentComponent.html +2 -2
  47. package/docs/components/EuiCardHeaderRightContentComponent.html +2 -2
  48. package/docs/components/EuiCardHeaderSubtitleComponent.html +2 -2
  49. package/docs/components/EuiCardHeaderTitleComponent.html +2 -2
  50. package/docs/components/EuiCardMediaComponent.html +2 -2
  51. package/docs/components/EuiChipComponent.html +2 -2
  52. package/docs/components/EuiChipListComponent.html +2 -2
  53. package/docs/components/EuiCommonHeaderComponent.html +2 -2
  54. package/docs/components/EuiDashboardButtonComponent.html +3 -3
  55. package/docs/components/EuiDashboardCardComponent.html +7 -7
  56. package/docs/components/EuiDateRangeSelectorComponent.html +2 -2
  57. package/docs/components/EuiDatepickerComponent.html +2 -2
  58. package/docs/components/EuiDialogComponent.html +2 -2
  59. package/docs/components/EuiDialogContainerComponent.html +3 -3
  60. package/docs/components/EuiDimmerComponent.html +2 -2
  61. package/docs/components/EuiDisableContentComponent.html +2 -2
  62. package/docs/components/EuiDiscussionThreadComponent.html +2 -2
  63. package/docs/components/EuiDiscussionThreadItemComponent.html +2 -2
  64. package/docs/components/EuiDropdownComponent.html +2 -2
  65. package/docs/components/EuiDropdownItemComponent.html +2 -2
  66. package/docs/components/EuiEditorComponent.html +2 -2
  67. package/docs/components/EuiEditorCountersComponent.html +2 -2
  68. package/docs/components/EuiEditorHtmlViewComponent.html +2 -2
  69. package/docs/components/EuiEditorImageDialogComponent.html +2 -2
  70. package/docs/components/EuiEditorJsonViewComponent.html +2 -2
  71. package/docs/components/EuiExpandContentComponent.html +2 -2
  72. package/docs/components/EuiFeedbackMessageComponent.html +2 -2
  73. package/docs/components/EuiFieldsetComponent.html +8 -8
  74. package/docs/components/EuiFilePreviewComponent.html +2 -2
  75. package/docs/components/EuiFileUploadComponent.html +2 -2
  76. package/docs/components/EuiFileUploadProgressComponent.html +2 -2
  77. package/docs/components/EuiFooterComponent.html +2 -2
  78. package/docs/components/EuiGrowlComponent.html +2 -2
  79. package/docs/components/EuiHeaderAppComponent.html +2 -2
  80. package/docs/components/EuiHeaderAppNameComponent.html +2 -2
  81. package/docs/components/EuiHeaderAppNameLogoComponent.html +2 -2
  82. package/docs/components/EuiHeaderAppSubtitleComponent.html +2 -2
  83. package/docs/components/EuiHeaderComponent.html +2 -2
  84. package/docs/components/EuiHeaderEnvironmentComponent.html +2 -2
  85. package/docs/components/EuiHeaderLogoComponent.html +2 -2
  86. package/docs/components/EuiHeaderRightContentComponent.html +2 -2
  87. package/docs/components/EuiHeaderUserProfileComponent.html +2 -2
  88. package/docs/components/EuiIconColorComponent.html +2 -2
  89. package/docs/components/EuiIconComponent.html +2 -2
  90. package/docs/components/EuiIconSvgButtonComponent.html +2 -2
  91. package/docs/components/EuiIconSvgComponent.html +2 -2
  92. package/docs/components/EuiIconToggleComponent.html +2 -2
  93. package/docs/components/EuiInputCheckboxComponent.html +2 -2
  94. package/docs/components/EuiInputGroupComponent.html +2 -2
  95. package/docs/components/EuiInputNumberComponent.html +2 -2
  96. package/docs/components/EuiInputRadioComponent.html +2 -2
  97. package/docs/components/EuiInputTextComponent.html +2 -2
  98. package/docs/components/EuiLabelComponent.html +2 -2
  99. package/docs/components/EuiLanguageSelectorComponent.html +2 -2
  100. package/docs/components/EuiListComponent.html +2 -2
  101. package/docs/components/EuiListItemComponent.html +2 -2
  102. package/docs/components/EuiMenuComponent.html +103 -968
  103. package/docs/components/EuiMenuItemComponent.html +76 -7
  104. package/docs/components/EuiMessageBoxComponent.html +2 -2
  105. package/docs/components/EuiModalSelectorComponent.html +2 -2
  106. package/docs/components/EuiNotificationItemComponent.html +2 -2
  107. package/docs/components/EuiNotificationItemV2Component.html +2 -2
  108. package/docs/components/EuiNotificationsComponent.html +2 -2
  109. package/docs/components/EuiNotificationsV2Component.html +2 -2
  110. package/docs/components/EuiOverlayBodyComponent.html +2 -2
  111. package/docs/components/EuiOverlayComponent.html +71 -2
  112. package/docs/components/EuiOverlayFooterComponent.html +2 -2
  113. package/docs/components/EuiOverlayHeaderComponent.html +2 -2
  114. package/docs/components/EuiOverlayHeaderTitleComponent.html +2 -2
  115. package/docs/components/EuiPageBreadcrumbComponent.html +2 -2
  116. package/docs/components/EuiPageColumnComponent.html +2 -2
  117. package/docs/components/EuiPageColumnsComponent.html +2 -2
  118. package/docs/components/EuiPageComponent.html +2 -2
  119. package/docs/components/EuiPageContentComponent.html +2 -2
  120. package/docs/components/EuiPageFooterComponent.html +2 -2
  121. package/docs/components/EuiPageHeaderComponent.html +2 -2
  122. package/docs/components/EuiPageHeroHeaderComponent.html +2 -2
  123. package/docs/components/EuiPageTopContentComponent.html +2 -2
  124. package/docs/components/EuiPaginatorComponent.html +2 -2
  125. package/docs/components/EuiPopoverComponent.html +2 -2
  126. package/docs/components/EuiProgressBarComponent.html +2 -2
  127. package/docs/components/EuiProgressCircleComponent.html +2 -2
  128. package/docs/components/EuiResizableComponent.html +2 -2
  129. package/docs/components/EuiSearchComponent.html +2 -2
  130. package/docs/components/EuiSelectComponent.html +2 -2
  131. package/docs/components/EuiSidebarMenuComponent.html +5 -5
  132. package/docs/components/EuiSidebarToggleComponent.html +2 -2
  133. package/docs/components/EuiSkeletonComponent.html +2 -2
  134. package/docs/components/EuiSlideToggleComponent.html +2 -2
  135. package/docs/components/EuiSlideToggleTestComponent.html +2 -2
  136. package/docs/components/EuiTabComponent.html +2 -2
  137. package/docs/components/EuiTabContentComponent.html +2 -2
  138. package/docs/components/EuiTabLabelComponent.html +2 -2
  139. package/docs/components/EuiTableComponent.html +2 -2
  140. package/docs/components/EuiTableExpandableRowComponent.html +2 -2
  141. package/docs/components/EuiTableFilterComponent.html +2 -2
  142. package/docs/components/EuiTableSelectableHeaderComponent.html +2 -2
  143. package/docs/components/EuiTableSelectableRowComponent.html +2 -2
  144. package/docs/components/EuiTableSortableColComponent.html +2 -2
  145. package/docs/components/EuiTabsComponent.html +2 -2
  146. package/docs/components/EuiTextareaComponent.html +2 -2
  147. package/docs/components/EuiTimebarComponent.html +4 -4
  148. package/docs/components/EuiTimelineComponent.html +2 -2
  149. package/docs/components/EuiTimelineItemComponent.html +2 -2
  150. package/docs/components/EuiTimepickerComponent.html +2 -2
  151. package/docs/components/EuiToolbarAppComponent.html +2 -2
  152. package/docs/components/EuiToolbarCenterComponent.html +2 -2
  153. package/docs/components/EuiToolbarComponent.html +2 -2
  154. package/docs/components/EuiToolbarEnvironmentComponent.html +2 -2
  155. package/docs/components/EuiToolbarItemComponent.html +2 -2
  156. package/docs/components/EuiToolbarItemsComponent.html +2 -2
  157. package/docs/components/EuiToolbarLogoComponent.html +2 -2
  158. package/docs/components/EuiToolbarMenuComponent.html +6 -6
  159. package/docs/components/EuiTooltipContainerComponent.html +2 -2
  160. package/docs/components/EuiTreeComponent.html +2 -2
  161. package/docs/components/EuiTreeListComponent.html +2 -2
  162. package/docs/components/EuiTreeListItemComponent.html +2 -2
  163. package/docs/components/EuiTreeListItemContentComponent.html +2 -2
  164. package/docs/components/EuiTreeListToolbarComponent.html +2 -2
  165. package/docs/components/EuiUserProfileCardComponent.html +2 -2
  166. package/docs/components/EuiUserProfileComponent.html +2 -2
  167. package/docs/components/EuiUserProfileMenuComponent.html +2 -2
  168. package/docs/components/EuiUserProfileMenuItemComponent.html +2 -2
  169. package/docs/components/EuiWizardComponent.html +2 -2
  170. package/docs/components/EuiWizardStepComponent.html +2 -2
  171. package/docs/components/QuillEditorComponent.html +2 -2
  172. package/docs/dependencies.html +2 -2
  173. package/docs/index.html +4 -4
  174. package/docs/js/menu-wc.js +220 -229
  175. package/docs/js/menu-wc_es5.js +1 -1
  176. package/docs/js/search/search_index.js +2 -2
  177. package/docs/miscellaneous/variables.html +35 -1
  178. package/docs/modules/EuiAlertModule.html +4 -1
  179. package/docs/modules/EuiAllModule.html +0 -6
  180. package/docs/modules/EuiAppModule.html +0 -6
  181. package/docs/modules/EuiAppSidebarModule.html +4 -28
  182. package/docs/modules/EuiAppToolbarModule.html +4 -28
  183. package/docs/modules/EuiAvatarModule.html +7 -28
  184. package/docs/modules/EuiBadgeModule.html +11 -1
  185. package/docs/modules/EuiChartsModule.html +4 -28
  186. package/docs/modules/EuiFieldsetModule.html +3 -0
  187. package/docs/modules/EuiHeaderModule.html +4 -28
  188. package/docs/modules/EuiLayoutModule.html +0 -6
  189. package/docs/modules/EuiPageModule.html +4 -28
  190. package/docs/modules/EuiSidebarMenuModule.html +4 -28
  191. package/docs/modules/EuiSkeletonModule.html +4 -28
  192. package/docs/modules/EuiTimebarModule.html +10 -0
  193. package/docs/modules/EuiToolbarModule.html +4 -28
  194. package/docs/modules/EuiUserProfileModule.html +4 -28
  195. package/docs/modules.html +0 -12
  196. package/esm2022/eui-alert/eui-alert.component.mjs +75 -80
  197. package/esm2022/eui-alert/eui-alert.module.mjs +49 -0
  198. package/esm2022/eui-alert/index.mjs +2 -1
  199. package/esm2022/eui-all/eui-all.module.mjs +1 -6
  200. package/esm2022/eui-autocomplete/eui-autocomplete.component.mjs +49 -77
  201. package/esm2022/eui-avatar/avatar-badge/avatar-badge.component.mjs +1 -4
  202. package/esm2022/eui-avatar/eui-avatar-list.component.mjs +1 -4
  203. package/esm2022/eui-avatar/eui-avatar.component.mjs +20 -39
  204. package/esm2022/eui-avatar/eui-avatar.module.mjs +5 -2
  205. package/esm2022/eui-badge/eui-badge.component.mjs +40 -35
  206. package/esm2022/eui-badge/eui-badge.module.mjs +19 -0
  207. package/esm2022/eui-badge/index.mjs +2 -1
  208. package/esm2022/eui-block-content/eui-block-content.component.mjs +10 -17
  209. package/esm2022/eui-block-document/eui-block-document.component.mjs +15 -20
  210. package/esm2022/eui-card/components/eui-card-content/eui-card-content.component.mjs +6 -2
  211. package/esm2022/eui-dashboard-button/eui-dashboard-button.component.mjs +6 -9
  212. package/esm2022/eui-dashboard-card/eui-dashboard-card.component.mjs +23 -33
  213. package/esm2022/eui-dialog/container/eui-dialog-container.component.mjs +3 -3
  214. package/esm2022/eui-fieldset/eui-fieldset.component.mjs +22 -39
  215. package/esm2022/eui-fieldset/eui-fieldset.module.mjs +4 -3
  216. package/esm2022/eui-menu/eui-menu-item.component.mjs +28 -4
  217. package/esm2022/eui-menu/eui-menu.component.mjs +51 -56
  218. package/esm2022/eui-menu/models/eui-menu-item.model.mjs +2 -12
  219. package/esm2022/eui-overlay/components/eui-overlay-header/eui-overlay-header-title/eui-overlay-header-title.component.mjs +1 -1
  220. package/esm2022/eui-overlay/eui-overlay.component.mjs +6 -2
  221. package/esm2022/eui-tabs/eui-tab/eui-tab.component.mjs +2 -2
  222. package/esm2022/eui-tabs/eui-tabs.component.mjs +2 -2
  223. package/esm2022/eui-timebar/eui-timebar.component.mjs +9 -7
  224. package/esm2022/eui-tree/eui-tree.component.mjs +1 -1
  225. package/esm2022/layout/eui-app/eui-app-sidebar/sidebar.component.mjs +2 -2
  226. package/esm2022/layout/eui-notifications/eui-notifications.component.mjs +1 -1
  227. package/esm2022/layout/eui-notifications-v2/eui-notifications.component.mjs +1 -1
  228. package/esm2022/layout/eui-user-profile/user-profile.component.mjs +1 -1
  229. package/eui-alert/eui-alert.component.d.ts +13 -23
  230. package/eui-alert/eui-alert.component.d.ts.map +1 -1
  231. package/eui-alert/eui-alert.module.d.ts +14 -0
  232. package/eui-alert/eui-alert.module.d.ts.map +1 -0
  233. package/eui-alert/index.d.ts +1 -0
  234. package/eui-alert/index.d.ts.map +1 -1
  235. package/eui-all/eui-all.module.d.ts +4 -5
  236. package/eui-all/eui-all.module.d.ts.map +1 -1
  237. package/eui-autocomplete/eui-autocomplete.component.d.ts +35 -19
  238. package/eui-autocomplete/eui-autocomplete.component.d.ts.map +1 -1
  239. package/eui-avatar/avatar-badge/avatar-badge.component.d.ts +0 -1
  240. package/eui-avatar/avatar-badge/avatar-badge.component.d.ts.map +1 -1
  241. package/eui-avatar/eui-avatar-list.component.d.ts +0 -1
  242. package/eui-avatar/eui-avatar-list.component.d.ts.map +1 -1
  243. package/eui-avatar/eui-avatar.component.d.ts +10 -10
  244. package/eui-avatar/eui-avatar.component.d.ts.map +1 -1
  245. package/eui-avatar/eui-avatar.module.d.ts +2 -1
  246. package/eui-avatar/eui-avatar.module.d.ts.map +1 -1
  247. package/eui-badge/eui-badge.component.d.ts +8 -14
  248. package/eui-badge/eui-badge.component.d.ts.map +1 -1
  249. package/eui-badge/eui-badge.module.d.ts +10 -0
  250. package/eui-badge/eui-badge.module.d.ts.map +1 -0
  251. package/eui-badge/index.d.ts +1 -0
  252. package/eui-badge/index.d.ts.map +1 -1
  253. package/eui-block-content/eui-block-content.component.d.ts +2 -3
  254. package/eui-block-content/eui-block-content.component.d.ts.map +1 -1
  255. package/eui-block-document/eui-block-document.component.d.ts +3 -7
  256. package/eui-block-document/eui-block-document.component.d.ts.map +1 -1
  257. package/eui-card/components/eui-card-content/eui-card-content.component.d.ts +1 -0
  258. package/eui-card/components/eui-card-content/eui-card-content.component.d.ts.map +1 -1
  259. package/eui-dashboard-button/eui-dashboard-button.component.d.ts +1 -2
  260. package/eui-dashboard-button/eui-dashboard-button.component.d.ts.map +1 -1
  261. package/eui-dashboard-card/eui-dashboard-card.component.d.ts +9 -7
  262. package/eui-dashboard-card/eui-dashboard-card.component.d.ts.map +1 -1
  263. package/eui-fieldset/eui-fieldset.component.d.ts +12 -8
  264. package/eui-fieldset/eui-fieldset.component.d.ts.map +1 -1
  265. package/eui-fieldset/eui-fieldset.module.d.ts +2 -1
  266. package/eui-fieldset/eui-fieldset.module.d.ts.map +1 -1
  267. package/eui-menu/eui-menu-item.component.d.ts +7 -1
  268. package/eui-menu/eui-menu-item.component.d.ts.map +1 -1
  269. package/eui-menu/eui-menu.component.d.ts +16 -19
  270. package/eui-menu/eui-menu.component.d.ts.map +1 -1
  271. package/eui-menu/models/eui-menu-item.model.d.ts +1 -35
  272. package/eui-menu/models/eui-menu-item.model.d.ts.map +1 -1
  273. package/eui-overlay/eui-overlay.component.d.ts +1 -0
  274. package/eui-overlay/eui-overlay.component.d.ts.map +1 -1
  275. package/eui-timebar/eui-timebar.component.d.ts +2 -1
  276. package/eui-timebar/eui-timebar.component.d.ts.map +1 -1
  277. package/fesm2022/eui-components-eui-alert.mjs +103 -68
  278. package/fesm2022/eui-components-eui-alert.mjs.map +1 -1
  279. package/fesm2022/eui-components-eui-all.mjs +0 -5
  280. package/fesm2022/eui-components-eui-all.mjs.map +1 -1
  281. package/fesm2022/eui-components-eui-autocomplete.mjs +49 -75
  282. package/fesm2022/eui-components-eui-autocomplete.mjs.map +1 -1
  283. package/fesm2022/eui-components-eui-avatar.mjs +22 -45
  284. package/fesm2022/eui-components-eui-avatar.mjs.map +1 -1
  285. package/fesm2022/eui-components-eui-badge.mjs +42 -22
  286. package/fesm2022/eui-components-eui-badge.mjs.map +1 -1
  287. package/fesm2022/eui-components-eui-block-content.mjs +9 -16
  288. package/fesm2022/eui-components-eui-block-content.mjs.map +1 -1
  289. package/fesm2022/eui-components-eui-block-document.mjs +14 -19
  290. package/fesm2022/eui-components-eui-block-document.mjs.map +1 -1
  291. package/fesm2022/eui-components-eui-card.mjs +5 -1
  292. package/fesm2022/eui-components-eui-card.mjs.map +1 -1
  293. package/fesm2022/eui-components-eui-dashboard-button.mjs +5 -8
  294. package/fesm2022/eui-components-eui-dashboard-button.mjs.map +1 -1
  295. package/fesm2022/eui-components-eui-dashboard-card.mjs +22 -32
  296. package/fesm2022/eui-components-eui-dashboard-card.mjs.map +1 -1
  297. package/fesm2022/eui-components-eui-dialog.mjs +2 -2
  298. package/fesm2022/eui-components-eui-dialog.mjs.map +1 -1
  299. package/fesm2022/eui-components-eui-fieldset.mjs +23 -40
  300. package/fesm2022/eui-components-eui-fieldset.mjs.map +1 -1
  301. package/fesm2022/eui-components-eui-menu.mjs +74 -69
  302. package/fesm2022/eui-components-eui-menu.mjs.map +1 -1
  303. package/fesm2022/eui-components-eui-overlay.mjs +6 -2
  304. package/fesm2022/eui-components-eui-overlay.mjs.map +1 -1
  305. package/fesm2022/eui-components-eui-tabs.mjs +4 -4
  306. package/fesm2022/eui-components-eui-tabs.mjs.map +1 -1
  307. package/fesm2022/eui-components-eui-timebar.mjs +8 -6
  308. package/fesm2022/eui-components-eui-timebar.mjs.map +1 -1
  309. package/fesm2022/eui-components-eui-tree.mjs +1 -1
  310. package/fesm2022/eui-components-eui-tree.mjs.map +1 -1
  311. package/fesm2022/eui-components-layout.mjs +5 -5
  312. package/fesm2022/eui-components-layout.mjs.map +1 -1
  313. package/package.json +7 -13
  314. package/docs/classes/EuiMenuItem.html +0 -933
  315. package/docs/components/EuiUxTreeComponent.html +0 -3171
  316. package/docs/components/EuiUxTreeNodeComponent.html +0 -2433
  317. package/docs/components/EuiUxTreeToolbarComponent.html +0 -1040
  318. package/docs/directives/EuiUxTreeToolbarFilterButtonsTagDirective.html +0 -172
  319. package/docs/modules/EuiUxTreeModule.html +0 -210
  320. package/esm2022/eui-ux-tree/eui-components-eui-ux-tree.mjs +0 -5
  321. package/esm2022/eui-ux-tree/eui-ux-tree-node.component.mjs +0 -347
  322. package/esm2022/eui-ux-tree/eui-ux-tree-toolbar/eui-ux-tree-toolbar.component.mjs +0 -126
  323. package/esm2022/eui-ux-tree/eui-ux-tree.component.mjs +0 -490
  324. package/esm2022/eui-ux-tree/eui-ux-tree.module.mjs +0 -54
  325. package/esm2022/eui-ux-tree/index.mjs +0 -5
  326. package/eui-ux-tree/eui-components-eui-ux-tree.d.ts.map +0 -1
  327. package/eui-ux-tree/eui-ux-tree-node.component.d.ts +0 -80
  328. package/eui-ux-tree/eui-ux-tree-node.component.d.ts.map +0 -1
  329. package/eui-ux-tree/eui-ux-tree-toolbar/eui-ux-tree-toolbar.component.d.ts +0 -44
  330. package/eui-ux-tree/eui-ux-tree-toolbar/eui-ux-tree-toolbar.component.d.ts.map +0 -1
  331. package/eui-ux-tree/eui-ux-tree.component.d.ts +0 -114
  332. package/eui-ux-tree/eui-ux-tree.component.d.ts.map +0 -1
  333. package/eui-ux-tree/eui-ux-tree.module.d.ts +0 -19
  334. package/eui-ux-tree/eui-ux-tree.module.d.ts.map +0 -1
  335. package/eui-ux-tree/index.d.ts +0 -5
  336. package/eui-ux-tree/index.d.ts.map +0 -1
  337. package/eui-ux-tree/package.json +0 -3
  338. package/fesm2022/eui-components-eui-ux-tree.mjs +0 -1004
  339. package/fesm2022/eui-components-eui-ux-tree.mjs.map +0 -1
@@ -1,347 +0,0 @@
1
- /* eslint-disable */
2
- import { Component, EventEmitter, Input, Output, } from '@angular/core';
3
- import { consumeEvent, uniqueId } from '@eui/core';
4
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/router";
7
- import * as i2 from "@angular/common";
8
- import * as i3 from "@angular/forms";
9
- import * as i4 from "@eui/components/eui-icon";
10
- import * as i5 from "@eui/components/eui-button";
11
- import * as i6 from "@eui/components/eui-chip";
12
- import * as i7 from "@ngx-translate/core";
13
- export class EuiUxTreeNodeComponent {
14
- get isFirst() {
15
- return this._isFirst;
16
- }
17
- set isFirst(value) {
18
- this._isFirst = coerceBooleanProperty(value);
19
- }
20
- get isLast() {
21
- return this._isLast;
22
- }
23
- set isLast(value) {
24
- this._isLast = coerceBooleanProperty(value);
25
- }
26
- get isRootNode() {
27
- return this._isRootNode;
28
- }
29
- set isRootNode(value) {
30
- this._isRootNode = coerceBooleanProperty(value);
31
- }
32
- get isClickTogglingNode() {
33
- return this._isClickTogglingNode;
34
- }
35
- set isClickTogglingNode(value) {
36
- this._isClickTogglingNode = coerceBooleanProperty(value);
37
- }
38
- get isMultiselect() {
39
- return this._isMultiselect;
40
- }
41
- set isMultiselect(value) {
42
- this._isMultiselect = coerceBooleanProperty(value);
43
- }
44
- get isRecursiveSelection() {
45
- return this._isRecursiveSelection;
46
- }
47
- set isRecursiveSelection(value) {
48
- this._isRecursiveSelection = coerceBooleanProperty(value);
49
- }
50
- get isRecursiveParentSelection() {
51
- return this._isRecursiveParentSelection;
52
- }
53
- set isRecursiveParentSelection(value) {
54
- this._isRecursiveParentSelection = coerceBooleanProperty(value);
55
- }
56
- get isShowActiveNode() {
57
- return this._isShowActiveNode;
58
- }
59
- set isShowActiveNode(value) {
60
- this._isShowActiveNode = coerceBooleanProperty(value);
61
- }
62
- get isHideToggles() {
63
- return this._isHideToggles;
64
- }
65
- set isHideToggles(value) {
66
- this._isHideToggles = coerceBooleanProperty(value);
67
- }
68
- get isClickSelectingNode() {
69
- return this._isClickSelectingNode;
70
- }
71
- set isClickSelectingNode(value) {
72
- this._isClickSelectingNode = coerceBooleanProperty(value);
73
- }
74
- get highlightPath() {
75
- return this._highlightPath;
76
- }
77
- set highlightPath(value) {
78
- this._highlightPath = coerceBooleanProperty(value);
79
- }
80
- get autoTranslate() {
81
- return this._autoTranslate;
82
- }
83
- set autoTranslate(value) {
84
- this._autoTranslate = coerceBooleanProperty(value);
85
- }
86
- get hasSelectAll() {
87
- return this._hasSelectAll;
88
- }
89
- set hasSelectAll(value) {
90
- this._hasSelectAll = coerceBooleanProperty(value);
91
- }
92
- constructor(router) {
93
- this.router = router;
94
- this.e2eAttr = 'ux-tree-node';
95
- this.nodeClick = new EventEmitter();
96
- this.nodeToggle = new EventEmitter();
97
- this.selectionChange = new EventEmitter();
98
- this.childrenSelected = true;
99
- this.amountSelectedChildren = 0;
100
- this._isFirst = false;
101
- this._isLast = false;
102
- this._isRootNode = false;
103
- this._isClickTogglingNode = false;
104
- this._isMultiselect = false;
105
- this._isRecursiveSelection = false;
106
- this._isRecursiveParentSelection = true;
107
- this._isShowActiveNode = false;
108
- this._isHideToggles = false;
109
- this._isClickSelectingNode = false;
110
- this._highlightPath = false;
111
- this._autoTranslate = true;
112
- this._hasSelectAll = false;
113
- this.nodeId = `ux-tree-node-${uniqueId()}`;
114
- }
115
- hasNodeChildren(node) {
116
- return node && node.children && node.children.length > 0;
117
- }
118
- onNodeKeydown(event, UxLinkLegacy) {
119
- if (event.keyCode === 13) {
120
- this.onNodeClick(event, UxLinkLegacy);
121
- }
122
- }
123
- onNodeToggle(event, UxLinkLegacy) {
124
- this.node.expanded = !this.node.expanded;
125
- this.nodeToggle.emit(UxLinkLegacy);
126
- }
127
- onNodeClick(event, UxLinkLegacy) {
128
- if (!UxLinkLegacy.disabled) {
129
- if (!this.node.metadata) {
130
- if (this.isMultiselect && this.isClickSelectingNode) {
131
- UxLinkLegacy.selected = !UxLinkLegacy.selected;
132
- event.target['checked'] = UxLinkLegacy.selected;
133
- this.onCheckboxChange(UxLinkLegacy, event);
134
- }
135
- if (!this.node.children || this.node.children.length === 0) {
136
- this.node.expanded = !this.node.expanded;
137
- if (this.node.url) {
138
- this.router.navigate([this.node.url]);
139
- }
140
- if (this.node.urlExternal) {
141
- window.open(this.node.urlExternal, this.node.urlExternalTarget);
142
- }
143
- }
144
- else {
145
- const clickedEl = event.target['nodeName'];
146
- if (this.isClickTogglingNode) {
147
- this.onNodeToggle(event, UxLinkLegacy);
148
- }
149
- if (clickedEl === 'SPAN' && (this.node.url || this.node.urlExternal)) {
150
- if (this.node.url) {
151
- this.router.navigate([this.node.url]);
152
- }
153
- if (this.node.urlExternal) {
154
- window.open(this.node.urlExternal, this.node.urlExternalTarget);
155
- }
156
- }
157
- }
158
- }
159
- else {
160
- if (this.node.url) {
161
- this.router.navigate([this.node.url]);
162
- }
163
- if (this.node.urlExternal) {
164
- window.open(this.node.urlExternal, this.node.urlExternalTarget);
165
- }
166
- }
167
- if (UxLinkLegacy.command) {
168
- UxLinkLegacy.command();
169
- }
170
- this.nodeClick.emit(UxLinkLegacy);
171
- consumeEvent(event);
172
- }
173
- }
174
- onCheckboxChange(UxLinkLegacy, evt) {
175
- if (this.isRecursiveSelection) {
176
- if (!UxLinkLegacy.selected) {
177
- UxLinkLegacy.indeterminate = false;
178
- }
179
- this.changeSelectionRecursively(UxLinkLegacy, UxLinkLegacy.selected);
180
- if (UxLinkLegacy.parent) {
181
- this.changeParentSelection(UxLinkLegacy.parent);
182
- }
183
- }
184
- if (this.highlightPath) {
185
- this.getParents(UxLinkLegacy, evt.target.checked);
186
- }
187
- this.selectionChange.next(UxLinkLegacy);
188
- }
189
- onMetadataNodeToggle(event, UxLinkLegacy) {
190
- this.node.expanded = !this.node.expanded;
191
- consumeEvent(event);
192
- }
193
- onSubNodeClick(UxLinkLegacy) {
194
- this.nodeClick.emit(UxLinkLegacy);
195
- }
196
- onSubNodeToggle(UxLinkLegacy) {
197
- this.nodeToggle.emit(UxLinkLegacy);
198
- }
199
- onSelectionChange(UxLinkLegacy) {
200
- this.selectionChange.next(UxLinkLegacy);
201
- }
202
- trackByFn(index, item) {
203
- return item.id;
204
- }
205
- checkInputLabel() {
206
- if (this.isRecursiveSelection && this.node.hasChildren) {
207
- if (this.node.selected) {
208
- return 'Deselect All';
209
- }
210
- else {
211
- return 'Select All';
212
- }
213
- }
214
- else if ((this.isRecursiveSelection && !this.node.hasChildren) || !this.isRecursiveSelection) {
215
- if (this.node.selected) {
216
- return 'Deselect node';
217
- }
218
- else {
219
- return 'Select node';
220
- }
221
- }
222
- }
223
- getParents(UxLinkLegacy, isChecked) {
224
- if (UxLinkLegacy === this.node) {
225
- if (isChecked === true) {
226
- this.node['highlighted'] = isChecked;
227
- }
228
- else {
229
- const selectedChildren = this.hasChildSelected(this.node);
230
- if (selectedChildren.length === 0) {
231
- this.node['highlighted'] = isChecked;
232
- }
233
- }
234
- }
235
- if (UxLinkLegacy.parent) {
236
- if (isChecked === true) {
237
- UxLinkLegacy.parent['highlighted'] = isChecked;
238
- this.getParents(UxLinkLegacy.parent, isChecked);
239
- }
240
- else {
241
- const selectedChildren = this.hasChildSelected(UxLinkLegacy.parent);
242
- if (selectedChildren.length === 0) {
243
- UxLinkLegacy.parent['highlighted'] = isChecked;
244
- this.getParents(UxLinkLegacy.parent, isChecked);
245
- }
246
- }
247
- }
248
- }
249
- hasChildSelected(UxLinkLegacy, selected = []) {
250
- if (UxLinkLegacy.selected) {
251
- selected.push(UxLinkLegacy.label);
252
- }
253
- if (UxLinkLegacy.children && UxLinkLegacy.children.length > 0) {
254
- UxLinkLegacy.children.forEach((child) => {
255
- this.hasChildSelected(child, selected);
256
- });
257
- }
258
- return selected;
259
- }
260
- changeSelectionRecursively(UxLinkLegacy, value) {
261
- if (UxLinkLegacy.hasChildren) {
262
- UxLinkLegacy.children.forEach((link) => {
263
- link.selected = value;
264
- if (value) {
265
- link.indeterminate = false;
266
- }
267
- this.changeSelectionRecursively(link, value);
268
- });
269
- }
270
- }
271
- changeParentSelection(UxLinkLegacy) {
272
- if (this.isRecursiveParentSelection) {
273
- UxLinkLegacy.indeterminate = !this.allChildrenSelected(UxLinkLegacy);
274
- UxLinkLegacy.selected = this.hasSelectedChildren(UxLinkLegacy);
275
- }
276
- else {
277
- if (!UxLinkLegacy.selected) {
278
- UxLinkLegacy.indeterminate = this.hasSelectedChildren(UxLinkLegacy);
279
- UxLinkLegacy.selected = this.hasSelectedChildren(UxLinkLegacy);
280
- }
281
- if (UxLinkLegacy.indeterminate && !this.hasSelectedChildren(UxLinkLegacy)) {
282
- UxLinkLegacy.indeterminate = false;
283
- UxLinkLegacy.selected = false;
284
- }
285
- }
286
- if (UxLinkLegacy.parent) {
287
- this.changeParentSelection(UxLinkLegacy.parent);
288
- }
289
- }
290
- allChildrenSelected(UxLinkLegacy) {
291
- return UxLinkLegacy.children.filter((c) => (!c.selected || (c.selected && c.indeterminate)) && this.childrenSelected).length === 0;
292
- }
293
- hasSelectedChildren(UxLinkLegacy) {
294
- return UxLinkLegacy.children.filter((c) => c.selected === true).length > 0;
295
- }
296
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: EuiUxTreeNodeComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
297
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.2", type: EuiUxTreeNodeComponent, selector: "eui-ux-tree-node", inputs: { expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", templateVariable: "templateVariable", node: "node", nodeContentTemplate: "nodeContentTemplate", e2eAttr: "e2eAttr", isFirst: "isFirst", isLast: "isLast", isRootNode: "isRootNode", isClickTogglingNode: "isClickTogglingNode", isMultiselect: "isMultiselect", isRecursiveSelection: "isRecursiveSelection", isRecursiveParentSelection: "isRecursiveParentSelection", isShowActiveNode: "isShowActiveNode", isHideToggles: "isHideToggles", isClickSelectingNode: "isClickSelectingNode", highlightPath: "highlightPath", autoTranslate: "autoTranslate", hasSelectAll: "hasSelectAll" }, outputs: { nodeClick: "nodeClick", nodeToggle: "nodeToggle", selectionChange: "selectionChange" }, ngImport: i0, template: "<li\n *ngIf=\"node.visible\"\n class=\"ux-tree__node\"\n [class.first-child]=\"isFirst\"\n [class.last-child]=\"isLast\"\n [class.ux-tree__node--expandable]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__node--disabled]=\"node.disabled\"\n title=\"{{ node.tooltipLabel ? node.tooltipLabel : node.label }}\"\n attr.data-e2e=\"{{ e2eAttr }}\">\n <div class=\"ux-tree__node-wrapper\" [class.ux-tree__node--selected]=\"node.selected\">\n <button\n (click)=\"onNodeToggle($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\"\n styleClass=\"ux-tree__node-toggle-icon\"\n *ngIf=\"hasNodeChildren(node) && !isHideToggles\"\n euiSizeS\n euiButton\n euiBasicButton\n [ariaLabel]=\"node.expanded ? 'Collapse' : 'Expand'\">\n <eui-icon [iconClass]=\"node.expanded ? expandedIconClass : collapsedIconClass\"></eui-icon>\n </button>\n\n <span\n *ngIf=\"isMultiselect\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <input\n type=\"checkbox\"\n class=\"ux-input__checkbox\"\n [class.checkbox-label-indeterminate]=\"node.indeterminate\"\n [class.ux-input__checkbox--selected]=\"node.selected && !node.indeterminate\"\n [id]=\"nodeId\"\n [value]=\"node.label\"\n [disabled]=\"node.disabled\"\n [(ngModel)]=\"node.selected\"\n [attr.aria-label]=\"checkInputLabel()\"\n (change)=\"onCheckboxChange(node, $event)\" />\n <label class=\"ux-tree__node-checkbox-label\" [class.checkbox-label-indeterminate]=\"node.indeterminate\" [for]=\"nodeId\"> </label>\n </span>\n\n <div\n *ngIf=\"nodeContentTemplate\"\n class=\"ux-tree__custom-content\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <ng-template [ngTemplateOutlet]=\"nodeContentTemplate\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-template>\n </div>\n\n <ng-container *ngIf=\"!nodeContentTemplate\">\n <ng-container *ngIf=\"node.typeLabel || node.iconClass\">\n <span\n *ngIf=\"node.typeLabel\"\n class=\"ux-tree__node-type ux-tree__node-type--{{ node.typeClass }}\"\n [class.ux-tree__node-type-parent]=\"hasNodeChildren(node) && !isHideToggles && !isMultiselect\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n {{ node.typeLabel }}\n </span>\n\n <span *ngIf=\"node.iconClass\" class=\"ux-tree__node-icon ux-tree__node-type--{{ node.iconTypeClass }}\">\n <span class=\"{{ node.iconClass }}\"></span>\n </span>\n\n <div class=\"ux-tree__node-label-wrapped\">\n <span\n [class.text-muted]=\"node.disabled\"\n [class.ux-tree__node-label--highlighted]=\"node['highlighted']\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n <span *ngIf=\"autoTranslate; else manualTranslation\">\n {{ node.label | translate }}\n </span>\n <ng-template #manualTranslation>{{ node.label }}</ng-template>\n <span [class.eui-u-text-link-external]=\"node && node.urlExternal\"></span>\n </span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(node.typeLabel || node.iconClass)\">\n <span\n class=\"ux-tree__node-label\"\n [class.ux-tree__node-label-parent]=\"hasNodeChildren(node) && !isHideToggles && !isMultiselect\"\n [class.ux-tree__node-label--highlighted]=\"node['highlighted']\"\n [class.text-muted]=\"node.disabled\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n <span *ngIf=\"autoTranslate; else manualTranslation\">\n {{ node.label | translate }}\n </span>\n <ng-template #manualTranslation>{{ node.label }}</ng-template>\n <span [class.eui-u-text-link-external]=\"node && node.urlExternal\"></span>\n </span>\n </ng-container>\n\n <div *ngIf=\"node.badges\" class=\"eui-u-ml-auto\">\n <eui-chip\n *ngFor=\"let badge of node.badges\"\n styleClass=\"ux-tree__node-badge\"\n euiSizeS\n euiOutline\n euiVariant=\"{{ badge.typeClass }}\">\n {{ badge.label }}\n </eui-chip>\n </div>\n\n <span\n *ngIf=\"node.metadata && node.metadata.title && node.metadata.title.length > 0\"\n class=\"ux-tree__node-metacontent-toggle ux-tree__node-clickable\"\n (click)=\"onMetadataNodeToggle($event, node)\">\n <span class=\"eui-icon\" [ngClass]=\"node.expanded ? 'eui-icon eui-icon-angle-down' : 'eui-icon eui-icon-angle-right'\"></span>\n </span>\n </ng-container>\n </div>\n <ng-container *ngIf=\"node.expanded\">\n <ul *ngIf=\"hasNodeChildren(node)\" class=\"ux-tree__nodes\">\n <eui-ux-tree-node\n *ngFor=\"let subNode of node.children; let isFirst = first; let isLast = last; trackBy: trackByFn\"\n [node]=\"subNode\"\n [isMultiselect]=\"isMultiselect\"\n [isRecursiveSelection]=\"isRecursiveSelection\"\n (nodeClick)=\"onSubNodeClick($event)\"\n (nodeToggle)=\"onSubNodeToggle($event)\"\n (selectionChange)=\"onSelectionChange($event)\"\n [isFirst]=\"isFirst\"\n [isLast]=\"isLast\"\n [isClickTogglingNode]=\"isClickTogglingNode\"\n expandedIconClass=\"{{ expandedIconClass }}\"\n collapsedIconClass=\"{{ collapsedIconClass }}\"\n [templateVariable]=\"templateVariable\"\n [nodeContentTemplate]=\"nodeContentTemplate\"\n [isShowActiveNode]=\"isShowActiveNode\"\n [isHideToggles]=\"isHideToggles\"\n [isClickSelectingNode]=\"isClickSelectingNode\"\n [highlightPath]=\"highlightPath\"\n [isRecursiveParentSelection]=\"isRecursiveParentSelection\"\n [autoTranslate]=\"autoTranslate\">\n </eui-ux-tree-node>\n </ul>\n <div *ngIf=\"node.metadata && node.metadata.title && node.metadata.title.length > 0\" class=\"ux-tree__node-metacontent\">\n <ng-template [ngTemplateOutlet]=\"templateVariable\" [ngTemplateOutletContext]=\"{ metadata: node.metadata }\"></ng-template>\n </div>\n </ng-container>\n</li>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.EuiIconComponent, selector: "div[euiIcon], span[euiIcon], i[euiIcon], eui-icon", inputs: ["aria-label", "iconClass", "isLoading"] }, { kind: "component", type: i5.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "isLoading", "euiIconButton", "euiLineWrap"], outputs: ["buttonClick"] }, { kind: "component", type: i6.EuiChipComponent, selector: "eui-chip, span[euiChip], li[euiChip]", inputs: ["euiInternalId", "tooltipMessage", "id", "data", "isChipRemovable", "isSquared"], outputs: ["remove"] }, { kind: "component", type: EuiUxTreeNodeComponent, selector: "eui-ux-tree-node", inputs: ["expandedIconClass", "collapsedIconClass", "templateVariable", "node", "nodeContentTemplate", "e2eAttr", "isFirst", "isLast", "isRootNode", "isClickTogglingNode", "isMultiselect", "isRecursiveSelection", "isRecursiveParentSelection", "isShowActiveNode", "isHideToggles", "isClickSelectingNode", "highlightPath", "autoTranslate", "hasSelectAll"], outputs: ["nodeClick", "nodeToggle", "selectionChange"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] }); }
298
- }
299
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: EuiUxTreeNodeComponent, decorators: [{
300
- type: Component,
301
- args: [{ selector: 'eui-ux-tree-node', template: "<li\n *ngIf=\"node.visible\"\n class=\"ux-tree__node\"\n [class.first-child]=\"isFirst\"\n [class.last-child]=\"isLast\"\n [class.ux-tree__node--expandable]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__node--disabled]=\"node.disabled\"\n title=\"{{ node.tooltipLabel ? node.tooltipLabel : node.label }}\"\n attr.data-e2e=\"{{ e2eAttr }}\">\n <div class=\"ux-tree__node-wrapper\" [class.ux-tree__node--selected]=\"node.selected\">\n <button\n (click)=\"onNodeToggle($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\"\n styleClass=\"ux-tree__node-toggle-icon\"\n *ngIf=\"hasNodeChildren(node) && !isHideToggles\"\n euiSizeS\n euiButton\n euiBasicButton\n [ariaLabel]=\"node.expanded ? 'Collapse' : 'Expand'\">\n <eui-icon [iconClass]=\"node.expanded ? expandedIconClass : collapsedIconClass\"></eui-icon>\n </button>\n\n <span\n *ngIf=\"isMultiselect\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <input\n type=\"checkbox\"\n class=\"ux-input__checkbox\"\n [class.checkbox-label-indeterminate]=\"node.indeterminate\"\n [class.ux-input__checkbox--selected]=\"node.selected && !node.indeterminate\"\n [id]=\"nodeId\"\n [value]=\"node.label\"\n [disabled]=\"node.disabled\"\n [(ngModel)]=\"node.selected\"\n [attr.aria-label]=\"checkInputLabel()\"\n (change)=\"onCheckboxChange(node, $event)\" />\n <label class=\"ux-tree__node-checkbox-label\" [class.checkbox-label-indeterminate]=\"node.indeterminate\" [for]=\"nodeId\"> </label>\n </span>\n\n <div\n *ngIf=\"nodeContentTemplate\"\n class=\"ux-tree__custom-content\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <ng-template [ngTemplateOutlet]=\"nodeContentTemplate\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-template>\n </div>\n\n <ng-container *ngIf=\"!nodeContentTemplate\">\n <ng-container *ngIf=\"node.typeLabel || node.iconClass\">\n <span\n *ngIf=\"node.typeLabel\"\n class=\"ux-tree__node-type ux-tree__node-type--{{ node.typeClass }}\"\n [class.ux-tree__node-type-parent]=\"hasNodeChildren(node) && !isHideToggles && !isMultiselect\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n {{ node.typeLabel }}\n </span>\n\n <span *ngIf=\"node.iconClass\" class=\"ux-tree__node-icon ux-tree__node-type--{{ node.iconTypeClass }}\">\n <span class=\"{{ node.iconClass }}\"></span>\n </span>\n\n <div class=\"ux-tree__node-label-wrapped\">\n <span\n [class.text-muted]=\"node.disabled\"\n [class.ux-tree__node-label--highlighted]=\"node['highlighted']\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n <span *ngIf=\"autoTranslate; else manualTranslation\">\n {{ node.label | translate }}\n </span>\n <ng-template #manualTranslation>{{ node.label }}</ng-template>\n <span [class.eui-u-text-link-external]=\"node && node.urlExternal\"></span>\n </span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(node.typeLabel || node.iconClass)\">\n <span\n class=\"ux-tree__node-label\"\n [class.ux-tree__node-label-parent]=\"hasNodeChildren(node) && !isHideToggles && !isMultiselect\"\n [class.ux-tree__node-label--highlighted]=\"node['highlighted']\"\n [class.text-muted]=\"node.disabled\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n <span *ngIf=\"autoTranslate; else manualTranslation\">\n {{ node.label | translate }}\n </span>\n <ng-template #manualTranslation>{{ node.label }}</ng-template>\n <span [class.eui-u-text-link-external]=\"node && node.urlExternal\"></span>\n </span>\n </ng-container>\n\n <div *ngIf=\"node.badges\" class=\"eui-u-ml-auto\">\n <eui-chip\n *ngFor=\"let badge of node.badges\"\n styleClass=\"ux-tree__node-badge\"\n euiSizeS\n euiOutline\n euiVariant=\"{{ badge.typeClass }}\">\n {{ badge.label }}\n </eui-chip>\n </div>\n\n <span\n *ngIf=\"node.metadata && node.metadata.title && node.metadata.title.length > 0\"\n class=\"ux-tree__node-metacontent-toggle ux-tree__node-clickable\"\n (click)=\"onMetadataNodeToggle($event, node)\">\n <span class=\"eui-icon\" [ngClass]=\"node.expanded ? 'eui-icon eui-icon-angle-down' : 'eui-icon eui-icon-angle-right'\"></span>\n </span>\n </ng-container>\n </div>\n <ng-container *ngIf=\"node.expanded\">\n <ul *ngIf=\"hasNodeChildren(node)\" class=\"ux-tree__nodes\">\n <eui-ux-tree-node\n *ngFor=\"let subNode of node.children; let isFirst = first; let isLast = last; trackBy: trackByFn\"\n [node]=\"subNode\"\n [isMultiselect]=\"isMultiselect\"\n [isRecursiveSelection]=\"isRecursiveSelection\"\n (nodeClick)=\"onSubNodeClick($event)\"\n (nodeToggle)=\"onSubNodeToggle($event)\"\n (selectionChange)=\"onSelectionChange($event)\"\n [isFirst]=\"isFirst\"\n [isLast]=\"isLast\"\n [isClickTogglingNode]=\"isClickTogglingNode\"\n expandedIconClass=\"{{ expandedIconClass }}\"\n collapsedIconClass=\"{{ collapsedIconClass }}\"\n [templateVariable]=\"templateVariable\"\n [nodeContentTemplate]=\"nodeContentTemplate\"\n [isShowActiveNode]=\"isShowActiveNode\"\n [isHideToggles]=\"isHideToggles\"\n [isClickSelectingNode]=\"isClickSelectingNode\"\n [highlightPath]=\"highlightPath\"\n [isRecursiveParentSelection]=\"isRecursiveParentSelection\"\n [autoTranslate]=\"autoTranslate\">\n </eui-ux-tree-node>\n </ul>\n <div *ngIf=\"node.metadata && node.metadata.title && node.metadata.title.length > 0\" class=\"ux-tree__node-metacontent\">\n <ng-template [ngTemplateOutlet]=\"templateVariable\" [ngTemplateOutletContext]=\"{ metadata: node.metadata }\"></ng-template>\n </div>\n </ng-container>\n</li>\n" }]
302
- }], ctorParameters: () => [{ type: i1.Router }], propDecorators: { expandedIconClass: [{
303
- type: Input
304
- }], collapsedIconClass: [{
305
- type: Input
306
- }], templateVariable: [{
307
- type: Input
308
- }], node: [{
309
- type: Input
310
- }], nodeContentTemplate: [{
311
- type: Input
312
- }], e2eAttr: [{
313
- type: Input
314
- }], nodeClick: [{
315
- type: Output
316
- }], nodeToggle: [{
317
- type: Output
318
- }], selectionChange: [{
319
- type: Output
320
- }], isFirst: [{
321
- type: Input
322
- }], isLast: [{
323
- type: Input
324
- }], isRootNode: [{
325
- type: Input
326
- }], isClickTogglingNode: [{
327
- type: Input
328
- }], isMultiselect: [{
329
- type: Input
330
- }], isRecursiveSelection: [{
331
- type: Input
332
- }], isRecursiveParentSelection: [{
333
- type: Input
334
- }], isShowActiveNode: [{
335
- type: Input
336
- }], isHideToggles: [{
337
- type: Input
338
- }], isClickSelectingNode: [{
339
- type: Input
340
- }], highlightPath: [{
341
- type: Input
342
- }], autoTranslate: [{
343
- type: Input
344
- }], hasSelectAll: [{
345
- type: Input
346
- }] } });
347
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXV4LXRyZWUtbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktdXgtdHJlZS9ldWktdXgtdHJlZS1ub2RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2V1aS11eC10cmVlL2V1aS11eC10cmVlLW5vZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBRXBCLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFnQixNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7QUFNNUUsTUFBTSxPQUFPLHNCQUFzQjtJQWdCL0IsSUFDSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFtQjtRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUNJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLEtBQW1CO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQ0ksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsS0FBbUI7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFDSSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUMs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Q0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDL0UsQ0FBQztpSUFuVVEsc0JBQXNCO3FIQUF0QixzQkFBc0IsbXpCQ2xCbkMseXpPQStJQSxrbkREN0hhLHNCQUFzQjs7MkZBQXRCLHNCQUFzQjtrQkFKbEMsU0FBUzsrQkFDSSxrQkFBa0I7MkVBSW5CLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQU9ILE9BQU87c0JBRFYsS0FBSztnQkFTRixNQUFNO3NCQURULEtBQUs7Z0JBU0YsVUFBVTtzQkFEYixLQUFLO2dCQVNGLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFTRixhQUFhO3NCQURoQixLQUFLO2dCQVNGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFTRiwwQkFBMEI7c0JBRDdCLEtBQUs7Z0JBU0YsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVNGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBU0Ysb0JBQW9CO3NCQUR2QixLQUFLO2dCQVNGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBU0YsYUFBYTtzQkFEaEIsS0FBSztnQkFTRixZQUFZO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBVeExpbmtMZWdhY3kgfSBmcm9tICdAZXVpL2NvcmUnO1xuaW1wb3J0IHsgY29uc3VtZUV2ZW50LCB1bmlxdWVJZCB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXVpLXV4LXRyZWUtbm9kZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS11eC10cmVlLW5vZGUuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlVeFRyZWVOb2RlQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBleHBhbmRlZEljb25DbGFzczogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZEljb25DbGFzczogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlVmFyaWFibGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgbm9kZTogVXhMaW5rTGVnYWN5O1xuICAgIEBJbnB1dCgpIG5vZGVDb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgZTJlQXR0ciA9ICd1eC10cmVlLW5vZGUnO1xuXG4gICAgQE91dHB1dCgpIG5vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VXhMaW5rTGVnYWN5PigpO1xuICAgIEBPdXRwdXQoKSBub2RlVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxVeExpbmtMZWdhY3k+KCk7XG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXhMaW5rTGVnYWN5PigpO1xuXG4gICAgcHVibGljIG5vZGVJZDogc3RyaW5nO1xuICAgIHB1YmxpYyBjaGlsZHJlblNlbGVjdGVkID0gdHJ1ZTtcbiAgICBwdWJsaWMgYW1vdW50U2VsZWN0ZWRDaGlsZHJlbiA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0ZpcnN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNGaXJzdDtcbiAgICB9XG4gICAgc2V0IGlzRmlyc3QodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0ZpcnN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNGaXJzdCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzTGFzdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTGFzdDtcbiAgICB9XG4gICAgc2V0IGlzTGFzdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzTGFzdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzTGFzdCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzUm9vdE5vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Jvb3ROb2RlO1xuICAgIH1cbiAgICBzZXQgaXNSb290Tm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzUm9vdE5vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc1Jvb3ROb2RlID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNDbGlja1RvZ2dsaW5nTm9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2xpY2tUb2dnbGluZ05vZGU7XG4gICAgfVxuICAgIHNldCBpc0NsaWNrVG9nZ2xpbmdOb2RlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNDbGlja1RvZ2dsaW5nTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzQ2xpY2tUb2dnbGluZ05vZGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc011bHRpc2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNNdWx0aXNlbGVjdDtcbiAgICB9XG4gICAgc2V0IGlzTXVsdGlzZWxlY3QodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc011bHRpc2VsZWN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNNdWx0aXNlbGVjdCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzUmVjdXJzaXZlU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSZWN1cnNpdmVTZWxlY3Rpb247XG4gICAgfVxuICAgIHNldCBpc1JlY3Vyc2l2ZVNlbGVjdGlvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzUmVjdXJzaXZlU2VsZWN0aW9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNSZWN1cnNpdmVTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uO1xuICAgIH1cbiAgICBzZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1Nob3dBY3RpdmVOb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNTaG93QWN0aXZlTm9kZTtcbiAgICB9XG4gICAgc2V0IGlzU2hvd0FjdGl2ZU5vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1Nob3dBY3RpdmVOb2RlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNTaG93QWN0aXZlTm9kZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzSGlkZVRvZ2dsZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0hpZGVUb2dnbGVzO1xuICAgIH1cbiAgICBzZXQgaXNIaWRlVG9nZ2xlcyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzSGlkZVRvZ2dsZXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc0hpZGVUb2dnbGVzID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNDbGlja1NlbGVjdGluZ05vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NsaWNrU2VsZWN0aW5nTm9kZTtcbiAgICB9XG4gICAgc2V0IGlzQ2xpY2tTZWxlY3RpbmdOb2RlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNDbGlja1NlbGVjdGluZ05vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc0NsaWNrU2VsZWN0aW5nTm9kZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhpZ2hsaWdodFBhdGgoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWdobGlnaHRQYXRoO1xuICAgIH1cbiAgICBzZXQgaGlnaGxpZ2h0UGF0aCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodFBhdGggPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9oaWdobGlnaHRQYXRoID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgYXV0b1RyYW5zbGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9UcmFuc2xhdGU7XG4gICAgfVxuICAgIHNldCBhdXRvVHJhbnNsYXRlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fYXV0b1RyYW5zbGF0ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2F1dG9UcmFuc2xhdGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhhc1NlbGVjdEFsbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1NlbGVjdEFsbDtcbiAgICB9XG4gICAgc2V0IGhhc1NlbGVjdEFsbCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2hhc1NlbGVjdEFsbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2hhc1NlbGVjdEFsbCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xuICAgICAgICB0aGlzLm5vZGVJZCA9IGB1eC10cmVlLW5vZGUtJHt1bmlxdWVJZCgpfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc05vZGVDaGlsZHJlbihub2RlOiBVeExpbmtMZWdhY3kpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZUtleWRvd24oZXZlbnQ6IGFueSwgVXhMaW5rTGVnYWN5OiBVeExpbmtMZWdhY3kpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICB0aGlzLm9uTm9kZUNsaWNrKGV2ZW50LCBVeExpbmtMZWdhY3kpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZVRvZ2dsZShldmVudDogRXZlbnQsIFV4TGlua0xlZ2FjeTogVXhMaW5rTGVnYWN5KTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZS5leHBhbmRlZCA9ICF0aGlzLm5vZGUuZXhwYW5kZWQ7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KFV4TGlua0xlZ2FjeSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZUNsaWNrKGV2ZW50OiBFdmVudCwgVXhMaW5rTGVnYWN5OiBVeExpbmtMZWdhY3kpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFVeExpbmtMZWdhY3kuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5ub2RlLm1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCAmJiB0aGlzLmlzQ2xpY2tTZWxlY3RpbmdOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIFV4TGlua0xlZ2FjeS5zZWxlY3RlZCA9ICFVeExpbmtMZWdhY3kuc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldFsnY2hlY2tlZCddID0gVXhMaW5rTGVnYWN5LnNlbGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hlY2tib3hDaGFuZ2UoVXhMaW5rTGVnYWN5LCBldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ub2RlLmNoaWxkcmVuIHx8IHRoaXMubm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlLmV4cGFuZGVkID0gIXRoaXMubm9kZS5leHBhbmRlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMubm9kZS51cmxdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybEV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLm5vZGUudXJsRXh0ZXJuYWwsIHRoaXMubm9kZS51cmxFeHRlcm5hbFRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGlja2VkRWwgPSBldmVudC50YXJnZXRbJ25vZGVOYW1lJ107XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQ2xpY2tUb2dnbGluZ05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlVG9nZ2xlKGV2ZW50LCBVeExpbmtMZWdhY3kpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGlja2VkRWwgPT09ICdTUEFOJyAmJiAodGhpcy5ub2RlLnVybCB8fCB0aGlzLm5vZGUudXJsRXh0ZXJuYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLm5vZGUudXJsXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybEV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5ub2RlLnVybEV4dGVybmFsLCB0aGlzLm5vZGUudXJsRXh0ZXJuYWxUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ub2RlLnVybF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybEV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMubm9kZS51cmxFeHRlcm5hbCwgdGhpcy5ub2RlLnVybEV4dGVybmFsVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoVXhMaW5rTGVnYWN5LmNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICBVeExpbmtMZWdhY3kuY29tbWFuZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KFV4TGlua0xlZ2FjeSk7XG4gICAgICAgICAgICBjb25zdW1lRXZlbnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2UoVXhMaW5rTGVnYWN5OiBVeExpbmtMZWdhY3ksIGV2dDogYW55KTogdm9pZCB7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSZWN1cnNpdmVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICghVXhMaW5rTGVnYWN5LnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgVXhMaW5rTGVnYWN5LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uUmVjdXJzaXZlbHkoVXhMaW5rTGVnYWN5LCBVeExpbmtMZWdhY3kuc2VsZWN0ZWQpO1xuICAgICAgICAgICAgaWYgKFV4TGlua0xlZ2FjeS5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBhcmVudFNlbGVjdGlvbihVeExpbmtMZWdhY3kucGFyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodFBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50cyhVeExpbmtMZWdhY3ksIGV2dC50YXJnZXQuY2hlY2tlZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5uZXh0KFV4TGlua0xlZ2FjeSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTWV0YWRhdGFOb2RlVG9nZ2xlKGV2ZW50OiBFdmVudCwgVXhMaW5rTGVnYWN5OiBVeExpbmtMZWdhY3kpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlLmV4cGFuZGVkID0gIXRoaXMubm9kZS5leHBhbmRlZDtcbiAgICAgICAgY29uc3VtZUV2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TdWJOb2RlQ2xpY2soVXhMaW5rTGVnYWN5OiBVeExpbmtMZWdhY3kpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlQ2xpY2suZW1pdChVeExpbmtMZWdhY3kpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN1Yk5vZGVUb2dnbGUoVXhMaW5rTGVnYWN5OiBVeExpbmtMZWdhY3kpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlVG9nZ2xlLmVtaXQoVXhMaW5rTGVnYWN5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2UoVXhMaW5rTGVnYWN5OiBVeExpbmtMZWdhY3kpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UubmV4dChVeExpbmtMZWdhY3kpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogVXhMaW5rTGVnYWN5KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgY2hlY2tJbnB1dExhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uICYmIHRoaXMubm9kZS5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKHRoaXMubm9kZS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnRGVzZWxlY3QgQWxsJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdTZWxlY3QgQWxsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5pc1JlY3Vyc2l2ZVNlbGVjdGlvbiAmJiAhdGhpcy5ub2RlLmhhc0NoaWxkcmVuKSB8fCAhdGhpcy5pc1JlY3Vyc2l2ZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMubm9kZS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnRGVzZWxlY3Qgbm9kZSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnU2VsZWN0IG5vZGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYXJlbnRzKFV4TGlua0xlZ2FjeTogVXhMaW5rTGVnYWN5LCBpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKFV4TGlua0xlZ2FjeSA9PT0gdGhpcy5ub2RlKSB7XG4gICAgICAgICAgICBpZiAoaXNDaGVja2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlWydoaWdobGlnaHRlZCddID0gaXNDaGVja2VkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZENoaWxkcmVuID0gdGhpcy5oYXNDaGlsZFNlbGVjdGVkKHRoaXMubm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZVsnaGlnaGxpZ2h0ZWQnXSA9IGlzQ2hlY2tlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoVXhMaW5rTGVnYWN5LnBhcmVudCkge1xuICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIFV4TGlua0xlZ2FjeS5wYXJlbnRbJ2hpZ2hsaWdodGVkJ10gPSBpc0NoZWNrZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQYXJlbnRzKFV4TGlua0xlZ2FjeS5wYXJlbnQsIGlzQ2hlY2tlZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2hpbGRyZW4gPSB0aGlzLmhhc0NoaWxkU2VsZWN0ZWQoVXhMaW5rTGVnYWN5LnBhcmVudCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIFV4TGlua0xlZ2FjeS5wYXJlbnRbJ2hpZ2hsaWdodGVkJ10gPSBpc0NoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50cyhVeExpbmtMZWdhY3kucGFyZW50LCBpc0NoZWNrZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFzQ2hpbGRTZWxlY3RlZChVeExpbmtMZWdhY3k6IFV4TGlua0xlZ2FjeSwgc2VsZWN0ZWQgPSBbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKFV4TGlua0xlZ2FjeS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWQucHVzaChVeExpbmtMZWdhY3kubGFiZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFV4TGlua0xlZ2FjeS5jaGlsZHJlbiAmJiBVeExpbmtMZWdhY3kuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgVXhMaW5rTGVnYWN5LmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGlsZFNlbGVjdGVkKGNoaWxkLCBzZWxlY3RlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZVNlbGVjdGlvblJlY3Vyc2l2ZWx5KFV4TGlua0xlZ2FjeTogVXhMaW5rTGVnYWN5LCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoVXhMaW5rTGVnYWN5Lmhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICBVeExpbmtMZWdhY3kuY2hpbGRyZW4uZm9yRWFjaCgobGluazogVXhMaW5rTGVnYWN5KSA9PiB7XG4gICAgICAgICAgICAgICAgbGluay5zZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5rLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb25SZWN1cnNpdmVseShsaW5rLCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlUGFyZW50U2VsZWN0aW9uKFV4TGlua0xlZ2FjeTogVXhMaW5rTGVnYWN5KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBVeExpbmtMZWdhY3kuaW5kZXRlcm1pbmF0ZSA9ICF0aGlzLmFsbENoaWxkcmVuU2VsZWN0ZWQoVXhMaW5rTGVnYWN5KTtcbiAgICAgICAgICAgIFV4TGlua0xlZ2FjeS5zZWxlY3RlZCA9IHRoaXMuaGFzU2VsZWN0ZWRDaGlsZHJlbihVeExpbmtMZWdhY3kpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFVeExpbmtMZWdhY3kuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBVeExpbmtMZWdhY3kuaW5kZXRlcm1pbmF0ZSA9IHRoaXMuaGFzU2VsZWN0ZWRDaGlsZHJlbihVeExpbmtMZWdhY3kpO1xuICAgICAgICAgICAgICAgIFV4TGlua0xlZ2FjeS5zZWxlY3RlZCA9IHRoaXMuaGFzU2VsZWN0ZWRDaGlsZHJlbihVeExpbmtMZWdhY3kpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoVXhMaW5rTGVnYWN5LmluZGV0ZXJtaW5hdGUgJiYgIXRoaXMuaGFzU2VsZWN0ZWRDaGlsZHJlbihVeExpbmtMZWdhY3kpKSB7XG4gICAgICAgICAgICAgICAgVXhMaW5rTGVnYWN5LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBVeExpbmtMZWdhY3kuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChVeExpbmtMZWdhY3kucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVBhcmVudFNlbGVjdGlvbihVeExpbmtMZWdhY3kucGFyZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWxsQ2hpbGRyZW5TZWxlY3RlZChVeExpbmtMZWdhY3k6IFV4TGlua0xlZ2FjeSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gVXhMaW5rTGVnYWN5LmNoaWxkcmVuLmZpbHRlcigoYykgPT4gKCFjLnNlbGVjdGVkIHx8IChjLnNlbGVjdGVkICYmIGMuaW5kZXRlcm1pbmF0ZSkpICYmIHRoaXMuY2hpbGRyZW5TZWxlY3RlZCkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzU2VsZWN0ZWRDaGlsZHJlbihVeExpbmtMZWdhY3k6IFV4TGlua0xlZ2FjeSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gVXhMaW5rTGVnYWN5LmNoaWxkcmVuLmZpbHRlcigoYykgPT4gYy5zZWxlY3RlZCA9PT0gdHJ1ZSkubGVuZ3RoID4gMDtcbiAgICB9XG59XG5cbi8qIGVzbGludC1lbmFibGUgKi9cbiIsIjxsaVxuICAgICpuZ0lmPVwibm9kZS52aXNpYmxlXCJcbiAgICBjbGFzcz1cInV4LXRyZWVfX25vZGVcIlxuICAgIFtjbGFzcy5maXJzdC1jaGlsZF09XCJpc0ZpcnN0XCJcbiAgICBbY2xhc3MubGFzdC1jaGlsZF09XCJpc0xhc3RcIlxuICAgIFtjbGFzcy51eC10cmVlX19ub2RlLS1leHBhbmRhYmxlXT1cImhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlc1wiXG4gICAgW2NsYXNzLnV4LXRyZWVfX25vZGUtLWRpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxuICAgIHRpdGxlPVwie3sgbm9kZS50b29sdGlwTGFiZWwgPyBub2RlLnRvb2x0aXBMYWJlbCA6IG5vZGUubGFiZWwgfX1cIlxuICAgIGF0dHIuZGF0YS1lMmU9XCJ7eyBlMmVBdHRyIH19XCI+XG4gICAgPGRpdiBjbGFzcz1cInV4LXRyZWVfX25vZGUtd3JhcHBlclwiIFtjbGFzcy51eC10cmVlX19ub2RlLS1zZWxlY3RlZF09XCJub2RlLnNlbGVjdGVkXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVUb2dnbGUoJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbk5vZGVLZXlkb3duKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInV4LXRyZWVfX25vZGUtdG9nZ2xlLWljb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXNcIlxuICAgICAgICAgICAgZXVpU2l6ZVNcbiAgICAgICAgICAgIGV1aUJ1dHRvblxuICAgICAgICAgICAgZXVpQmFzaWNCdXR0b25cbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwibm9kZS5leHBhbmRlZCA/ICdDb2xsYXBzZScgOiAnRXhwYW5kJ1wiPlxuICAgICAgICAgICAgPGV1aS1pY29uIFtpY29uQ2xhc3NdPVwibm9kZS5leHBhbmRlZCA/IGV4cGFuZGVkSWNvbkNsYXNzIDogY29sbGFwc2VkSWNvbkNsYXNzXCI+PC9ldWktaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fcGFyZW50XT1cImhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlc1wiXG4gICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fbGVhZl09XCIhaGFzTm9kZUNoaWxkcmVuKG5vZGUpICYmICFpc0hpZGVUb2dnbGVzXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXgtaW5wdXRfX2NoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuY2hlY2tib3gtbGFiZWwtaW5kZXRlcm1pbmF0ZV09XCJub2RlLmluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy51eC1pbnB1dF9fY2hlY2tib3gtLXNlbGVjdGVkXT1cIm5vZGUuc2VsZWN0ZWQgJiYgIW5vZGUuaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cIm5vZGVJZFwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm5vZGUubGFiZWxcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5vZGUuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY2hlY2tJbnB1dExhYmVsKClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZShub2RlLCAkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInV4LXRyZWVfX25vZGUtY2hlY2tib3gtbGFiZWxcIiBbY2xhc3MuY2hlY2tib3gtbGFiZWwtaW5kZXRlcm1pbmF0ZV09XCJub2RlLmluZGV0ZXJtaW5hdGVcIiBbZm9yXT1cIm5vZGVJZFwiPiA8L2xhYmVsPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJub2RlQ29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICAgIGNsYXNzPVwidXgtdHJlZV9fY3VzdG9tLWNvbnRlbnRcIlxuICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX3BhcmVudF09XCJoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXNcIlxuICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX2xlYWZdPVwiIWhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlc1wiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVDb250ZW50VGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG5vZGUgfVwiPiA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5vZGVDb250ZW50VGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLnR5cGVMYWJlbCB8fCBub2RlLmljb25DbGFzc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS50eXBlTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInV4LXRyZWVfX25vZGUtdHlwZSB1eC10cmVlX19ub2RlLXR5cGUtLXt7IG5vZGUudHlwZUNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX25vZGUtdHlwZS1wYXJlbnRdPVwiaGFzTm9kZUNoaWxkcmVuKG5vZGUpICYmICFpc0hpZGVUb2dnbGVzICYmICFpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbk5vZGVLZXlkb3duKCRldmVudCwgbm9kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbm9kZS50eXBlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm5vZGUuaWNvbkNsYXNzXCIgY2xhc3M9XCJ1eC10cmVlX19ub2RlLWljb24gdXgtdHJlZV9fbm9kZS10eXBlLS17eyBub2RlLmljb25UeXBlQ2xhc3MgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ7eyBub2RlLmljb25DbGFzcyB9fVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXgtdHJlZV9fbm9kZS1sYWJlbC13cmFwcGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1tdXRlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlX19ub2RlLWxhYmVsLS1oaWdobGlnaHRlZF09XCJub2RlWydoaWdobGlnaHRlZCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uTm9kZUtleWRvd24oJGV2ZW50LCBub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhdXRvVHJhbnNsYXRlOyBlbHNlIG1hbnVhbFRyYW5zbGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtYW51YWxUcmFuc2xhdGlvbj57eyBub2RlLmxhYmVsIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzcy5ldWktdS10ZXh0LWxpbmstZXh0ZXJuYWxdPVwibm9kZSAmJiBub2RlLnVybEV4dGVybmFsXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEobm9kZS50eXBlTGFiZWwgfHwgbm9kZS5pY29uQ2xhc3MpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1eC10cmVlX19ub2RlLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX25vZGUtbGFiZWwtcGFyZW50XT1cImhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlcyAmJiAhaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlX19ub2RlLWxhYmVsLS1oaWdobGlnaHRlZF09XCJub2RlWydoaWdobGlnaHRlZCddXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtbXV0ZWRdPVwibm9kZS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Ob2RlS2V5ZG93bigkZXZlbnQsIG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYXV0b1RyYW5zbGF0ZTsgZWxzZSBtYW51YWxUcmFuc2xhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbWFudWFsVHJhbnNsYXRpb24+e3sgbm9kZS5sYWJlbCB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzcy5ldWktdS10ZXh0LWxpbmstZXh0ZXJuYWxdPVwibm9kZSAmJiBub2RlLnVybEV4dGVybmFsXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibm9kZS5iYWRnZXNcIiBjbGFzcz1cImV1aS11LW1sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGJhZGdlIG9mIG5vZGUuYmFkZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInV4LXRyZWVfX25vZGUtYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICBldWlTaXplU1xuICAgICAgICAgICAgICAgICAgICBldWlPdXRsaW5lXG4gICAgICAgICAgICAgICAgICAgIGV1aVZhcmlhbnQ9XCJ7eyBiYWRnZS50eXBlQ2xhc3MgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYmFkZ2UubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2V1aS1jaGlwPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLm1ldGFkYXRhICYmIG5vZGUubWV0YWRhdGEudGl0bGUgJiYgbm9kZS5tZXRhZGF0YS50aXRsZS5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInV4LXRyZWVfX25vZGUtbWV0YWNvbnRlbnQtdG9nZ2xlIHV4LXRyZWVfX25vZGUtY2xpY2thYmxlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25NZXRhZGF0YU5vZGVUb2dnbGUoJGV2ZW50LCBub2RlKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXVpLWljb25cIiBbbmdDbGFzc109XCJub2RlLmV4cGFuZGVkID8gJ2V1aS1pY29uIGV1aS1pY29uLWFuZ2xlLWRvd24nIDogJ2V1aS1pY29uIGV1aS1pY29uLWFuZ2xlLXJpZ2h0J1wiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGUuZXhwYW5kZWRcIj5cbiAgICAgICAgPHVsICpuZ0lmPVwiaGFzTm9kZUNoaWxkcmVuKG5vZGUpXCIgY2xhc3M9XCJ1eC10cmVlX19ub2Rlc1wiPlxuICAgICAgICAgICAgPGV1aS11eC10cmVlLW5vZGVcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3ViTm9kZSBvZiBub2RlLmNoaWxkcmVuOyBsZXQgaXNGaXJzdCA9IGZpcnN0OyBsZXQgaXNMYXN0ID0gbGFzdDsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgICAgICAgICBbbm9kZV09XCJzdWJOb2RlXCJcbiAgICAgICAgICAgICAgICBbaXNNdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICBbaXNSZWN1cnNpdmVTZWxlY3Rpb25dPVwiaXNSZWN1cnNpdmVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgIChub2RlQ2xpY2spPVwib25TdWJOb2RlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG5vZGVUb2dnbGUpPVwib25TdWJOb2RlVG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2lzRmlyc3RdPVwiaXNGaXJzdFwiXG4gICAgICAgICAgICAgICAgW2lzTGFzdF09XCJpc0xhc3RcIlxuICAgICAgICAgICAgICAgIFtpc0NsaWNrVG9nZ2xpbmdOb2RlXT1cImlzQ2xpY2tUb2dnbGluZ05vZGVcIlxuICAgICAgICAgICAgICAgIGV4cGFuZGVkSWNvbkNsYXNzPVwie3sgZXhwYW5kZWRJY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgIGNvbGxhcHNlZEljb25DbGFzcz1cInt7IGNvbGxhcHNlZEljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgW3RlbXBsYXRlVmFyaWFibGVdPVwidGVtcGxhdGVWYXJpYWJsZVwiXG4gICAgICAgICAgICAgICAgW25vZGVDb250ZW50VGVtcGxhdGVdPVwibm9kZUNvbnRlbnRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2lzU2hvd0FjdGl2ZU5vZGVdPVwiaXNTaG93QWN0aXZlTm9kZVwiXG4gICAgICAgICAgICAgICAgW2lzSGlkZVRvZ2dsZXNdPVwiaXNIaWRlVG9nZ2xlc1wiXG4gICAgICAgICAgICAgICAgW2lzQ2xpY2tTZWxlY3RpbmdOb2RlXT1cImlzQ2xpY2tTZWxlY3RpbmdOb2RlXCJcbiAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0UGF0aF09XCJoaWdobGlnaHRQYXRoXCJcbiAgICAgICAgICAgICAgICBbaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb25dPVwiaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgIFthdXRvVHJhbnNsYXRlXT1cImF1dG9UcmFuc2xhdGVcIj5cbiAgICAgICAgICAgIDwvZXVpLXV4LXRyZWUtbm9kZT5cbiAgICAgICAgPC91bD5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGUubWV0YWRhdGEgJiYgbm9kZS5tZXRhZGF0YS50aXRsZSAmJiBub2RlLm1ldGFkYXRhLnRpdGxlLmxlbmd0aCA+IDBcIiBjbGFzcz1cInV4LXRyZWVfX25vZGUtbWV0YWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVZhcmlhYmxlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgbWV0YWRhdGE6IG5vZGUubWV0YWRhdGEgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9saT5cbiJdfQ==