@net7/components 4.2.0 → 4.2.3-rc4

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 (286) hide show
  1. package/README.md +2 -1
  2. package/esm2022/lib/components/advanced-autocomplete/advanced-autocomplete.mjs +25 -0
  3. package/esm2022/lib/components/advanced-autocomplete/advanced-autocomplete.mock.mjs +147 -0
  4. package/esm2022/lib/components/alert/alert.mjs +24 -0
  5. package/{esm2020 → esm2022}/lib/components/alert/alert.mock.mjs +2 -2
  6. package/esm2022/lib/components/anchor-wrapper/anchor-wrapper.mjs +35 -0
  7. package/esm2022/lib/components/avatar/avatar.mjs +34 -0
  8. package/esm2022/lib/components/breadcrumbs/breadcrumbs.mjs +25 -0
  9. package/{esm2020 → esm2022}/lib/components/breadcrumbs/breadcrumbs.mock.mjs +8 -8
  10. package/esm2022/lib/components/bubble-chart/bubble-chart.mjs +336 -0
  11. package/{esm2020 → esm2022}/lib/components/bubble-chart/bubble-chart.mock.mjs +249 -249
  12. package/esm2022/lib/components/button/button.mjs +26 -0
  13. package/{esm2020 → esm2022}/lib/components/button/button.mock.mjs +3 -3
  14. package/esm2022/lib/components/carousel/carousel.mjs +97 -0
  15. package/esm2022/lib/components/carousel/carousel.mock.mjs +157 -0
  16. package/esm2022/lib/components/chart/chart.mjs +37 -0
  17. package/esm2022/lib/components/chart/chart.mock.mjs +127 -0
  18. package/esm2022/lib/components/content-placeholder/content-placeholder.mjs +17 -0
  19. package/{esm2020 → esm2022}/lib/components/content-placeholder/content-placeholder.mock.mjs +6 -3
  20. package/esm2022/lib/components/data-widget/data-widget.mjs +29 -0
  21. package/{esm2020 → esm2022}/lib/components/data-widget/data-widget.mock.mjs +4 -4
  22. package/esm2022/lib/components/datepicker/datepicker.mjs +44 -0
  23. package/esm2022/lib/components/facet/facet.mjs +24 -0
  24. package/esm2022/lib/components/facet/facet.mock.mjs +169 -0
  25. package/esm2022/lib/components/facet-header/facet-header.mjs +24 -0
  26. package/esm2022/lib/components/facet-year-range/facet-year-range.mjs +53 -0
  27. package/esm2022/lib/components/file-selector/file-selector.mjs +41 -0
  28. package/{esm2020 → esm2022}/lib/components/file-selector/file-selector.mock.mjs +2 -2
  29. package/esm2022/lib/components/footer/footer.mjs +26 -0
  30. package/esm2022/lib/components/footer/footer.mock.mjs +60 -0
  31. package/esm2022/lib/components/header/header.mjs +53 -0
  32. package/esm2022/lib/components/header/header.mock.mjs +119 -0
  33. package/esm2022/lib/components/hero/hero.mjs +41 -0
  34. package/{esm2020 → esm2022}/lib/components/hero/hero.mock.mjs +5 -5
  35. package/esm2022/lib/components/histogram-range/histogram-range.mjs +390 -0
  36. package/{esm2020 → esm2022}/lib/components/histogram-range/histogram-range.mock.mjs +4 -4
  37. package/esm2022/lib/components/icon/icon.mjs +21 -0
  38. package/{esm2020 → esm2022}/lib/components/icon/icon.mock.mjs +2 -2
  39. package/esm2022/lib/components/image-viewer/image-viewer.mjs +57 -0
  40. package/esm2022/lib/components/image-viewer/image-viewer.mock.mjs +29 -0
  41. package/esm2022/lib/components/image-viewer-tools/image-viewer-tools.mjs +28 -0
  42. package/esm2022/lib/components/image-viewer-tools/image-viewer-tools.mock.mjs +54 -0
  43. package/esm2022/lib/components/inner-title/inner-title.mjs +40 -0
  44. package/esm2022/lib/components/inner-title/inner-title.mock.mjs +53 -0
  45. package/esm2022/lib/components/input-checkbox/input-checkbox.mjs +24 -0
  46. package/esm2022/lib/components/input-checkbox/input-checkbox.mock.mjs +31 -0
  47. package/esm2022/lib/components/input-link/input-link.mjs +24 -0
  48. package/esm2022/lib/components/input-link/input-link.mock.mjs +66 -0
  49. package/{esm2020 → esm2022}/lib/components/input-select/input-select.mjs +5 -5
  50. package/esm2022/lib/components/input-text/input-text.mjs +34 -0
  51. package/esm2022/lib/components/input-textarea/input-textarea.mjs +21 -0
  52. package/esm2022/lib/components/item-preview/item-preview.mjs +25 -0
  53. package/esm2022/lib/components/item-preview/item-preview.mock.mjs +46 -0
  54. package/esm2022/lib/components/loader/loader.mjs +16 -0
  55. package/{esm2020 → esm2022}/lib/components/loader/loader.mock.mjs +2 -2
  56. package/esm2022/lib/components/map/map.mjs +66 -0
  57. package/{esm2020 → esm2022}/lib/components/map/map.mock.mjs +14 -10
  58. package/esm2022/lib/components/metadata-viewer/metadata-viewer.mjs +19 -0
  59. package/esm2022/lib/components/metadata-viewer/metadata-viewer.mock.mjs +75 -0
  60. package/esm2022/lib/components/mirador/mirador.mjs +36 -0
  61. package/esm2022/lib/components/mirador/mirador.mock.mjs +23 -0
  62. package/esm2022/lib/components/mirador/miradorTheme.mjs +220 -0
  63. package/esm2022/lib/components/nav/nav.mjs +27 -0
  64. package/esm2022/lib/components/nav/nav.mock.mjs +46 -0
  65. package/esm2022/lib/components/pagination/pagination.mjs +31 -0
  66. package/esm2022/lib/components/pagination/pagination.mock.mjs +27 -0
  67. package/esm2022/lib/components/progress-line/progress-line.mjs +19 -0
  68. package/esm2022/lib/components/sidebar-header/sidebar-header.mjs +24 -0
  69. package/esm2022/lib/components/signup/signup.mjs +44 -0
  70. package/{esm2020 → esm2022}/lib/components/signup/signup.mock.mjs +14 -14
  71. package/esm2022/lib/components/simple-autocomplete/simple-autocomplete.mjs +25 -0
  72. package/esm2022/lib/components/simple-autocomplete/simple-autocomplete.mock.mjs +22 -0
  73. package/esm2022/lib/components/table/table.mjs +35 -0
  74. package/esm2022/lib/components/table/table.mock.mjs +156 -0
  75. package/esm2022/lib/components/tag/tag.mjs +35 -0
  76. package/esm2022/lib/components/text-viewer/text-viewer.mjs +42 -0
  77. package/{esm2020 → esm2022}/lib/components/text-viewer/text-viewer.mock.mjs +4 -4
  78. package/esm2022/lib/components/timeline/timeline.mjs +51 -0
  79. package/esm2022/lib/components/timeline/timeline.mock.mjs +137 -0
  80. package/esm2022/lib/components/toast/toast.mjs +24 -0
  81. package/esm2022/lib/components/toast/toast.mock.mjs +65 -0
  82. package/esm2022/lib/components/tooltip-content/tooltip-content.mjs +25 -0
  83. package/{esm2020 → esm2022}/lib/components/tooltip-content/tooltip-content.mock.mjs +9 -8
  84. package/esm2022/lib/components/tree/tree.mjs +25 -0
  85. package/{esm2020 → esm2022}/lib/components/tree/tree.mock.mjs +44 -44
  86. package/esm2022/lib/components/wizard/wizard.mjs +24 -0
  87. package/{esm2020 → esm2022}/lib/components/wizard/wizard.mock.mjs +6 -6
  88. package/esm2022/lib/dv-components-lib.module.mjs +211 -0
  89. package/{esm2020 → esm2022}/lib/shared-interfaces.mjs +1 -1
  90. package/esm2022/public-api.mjs +105 -0
  91. package/fesm2022/net7-components.mjs +6091 -0
  92. package/fesm2022/net7-components.mjs.map +1 -0
  93. package/lib/components/advanced-autocomplete/advanced-autocomplete.d.ts +22 -22
  94. package/lib/components/alert/alert.d.ts +2 -2
  95. package/lib/components/anchor-wrapper/anchor-wrapper.d.ts +1 -1
  96. package/lib/components/avatar/avatar.d.ts +1 -1
  97. package/lib/components/breadcrumbs/breadcrumbs.d.ts +1 -1
  98. package/lib/components/bubble-chart/bubble-chart.d.ts +3 -3
  99. package/lib/components/button/button.d.ts +1 -1
  100. package/lib/components/carousel/carousel.d.ts +1 -1
  101. package/lib/components/chart/chart.d.ts +2 -2
  102. package/lib/components/content-placeholder/content-placeholder.d.ts +6 -6
  103. package/lib/components/data-widget/data-widget.d.ts +1 -1
  104. package/lib/components/datepicker/datepicker.d.ts +4 -4
  105. package/lib/components/facet/facet.d.ts +23 -23
  106. package/lib/components/facet-header/facet-header.d.ts +1 -1
  107. package/lib/components/facet-year-range/facet-year-range.d.ts +9 -9
  108. package/lib/components/file-selector/file-selector.d.ts +1 -1
  109. package/lib/components/footer/footer.d.ts +4 -4
  110. package/lib/components/header/header.d.ts +1 -1
  111. package/lib/components/hero/hero.d.ts +16 -16
  112. package/lib/components/histogram-range/histogram-range.d.ts +3 -3
  113. package/lib/components/icon/icon.d.ts +1 -1
  114. package/lib/components/image-viewer/image-viewer.d.ts +1 -1
  115. package/lib/components/image-viewer-tools/image-viewer-tools.d.ts +3 -3
  116. package/lib/components/inner-title/inner-title.d.ts +1 -1
  117. package/lib/components/input-checkbox/input-checkbox.d.ts +1 -1
  118. package/lib/components/input-link/input-link.d.ts +1 -1
  119. package/lib/components/input-select/input-select.d.ts +1 -1
  120. package/lib/components/input-text/input-text.d.ts +1 -1
  121. package/lib/components/input-textarea/input-textarea.d.ts +2 -2
  122. package/lib/components/item-preview/item-preview.d.ts +40 -40
  123. package/lib/components/loader/loader.d.ts +1 -1
  124. package/lib/components/map/map.d.ts +1 -1
  125. package/lib/components/metadata-viewer/metadata-viewer.d.ts +19 -19
  126. package/lib/components/mirador/mirador.d.ts +15 -0
  127. package/lib/components/mirador/mirador.mock.d.ts +6 -0
  128. package/lib/components/mirador/miradorTheme.d.ts +218 -0
  129. package/lib/components/nav/nav.d.ts +1 -1
  130. package/lib/components/pagination/pagination.d.ts +1 -1
  131. package/lib/components/progress-line/progress-line.d.ts +1 -1
  132. package/lib/components/sidebar-header/sidebar-header.d.ts +1 -1
  133. package/lib/components/signup/signup.d.ts +1 -1
  134. package/lib/components/simple-autocomplete/simple-autocomplete.d.ts +11 -11
  135. package/lib/components/table/table.d.ts +1 -1
  136. package/lib/components/tag/tag.d.ts +1 -1
  137. package/lib/components/text-viewer/text-viewer.d.ts +1 -1
  138. package/lib/components/timeline/timeline.d.ts +1 -1
  139. package/lib/components/toast/toast.d.ts +1 -1
  140. package/lib/components/tooltip-content/tooltip-content.d.ts +1 -1
  141. package/lib/components/tree/tree.d.ts +20 -20
  142. package/lib/components/wizard/wizard.d.ts +30 -30
  143. package/lib/dv-components-lib.module.d.ts +19 -18
  144. package/lib/shared-interfaces.d.ts +3 -3
  145. package/package.json +8 -14
  146. package/public-api.d.ts +2 -0
  147. package/src/lib/styles/_imports.scss +54 -56
  148. package/src/lib/styles/atoms/_button.scss +37 -30
  149. package/src/lib/styles/components/_advanced-autocomplete.scss +15 -38
  150. package/src/lib/styles/components/_alert.scss +6 -18
  151. package/src/lib/styles/components/_anchor-wrapper.scss +3 -4
  152. package/src/lib/styles/components/_avatar.scss +1 -4
  153. package/src/lib/styles/components/_breadcrumbs.scss +12 -23
  154. package/src/lib/styles/components/_bubble-chart.scss +3 -4
  155. package/src/lib/styles/components/_button.scss +3 -13
  156. package/src/lib/styles/components/_carousel.scss +18 -46
  157. package/src/lib/styles/components/_chart.scss +3 -4
  158. package/src/lib/styles/components/_content-placeholder.scss +17 -17
  159. package/src/lib/styles/components/_data-widget.scss +5 -17
  160. package/src/lib/styles/components/_datepicker.scss +3 -4
  161. package/src/lib/styles/components/_facet-header.scss +3 -8
  162. package/src/lib/styles/components/_facet-year-range.scss +7 -12
  163. package/src/lib/styles/components/_facet.scss +11 -28
  164. package/src/lib/styles/components/_file-selector.scss +3 -4
  165. package/src/lib/styles/components/_footer.scss +7 -28
  166. package/src/lib/styles/components/_header.scss +15 -76
  167. package/src/lib/styles/components/_hero.scss +10 -20
  168. package/src/lib/styles/components/_histogram-range.scss +1 -2
  169. package/src/lib/styles/components/_icon.scss +1 -3
  170. package/src/lib/styles/components/_image-viewer-tools.scss +31 -40
  171. package/src/lib/styles/components/_image-viewer.scss +20 -36
  172. package/src/lib/styles/components/_inner-title.scss +13 -39
  173. package/src/lib/styles/components/_input-checkbox.scss +6 -10
  174. package/src/lib/styles/components/_input-link.scss +4 -10
  175. package/src/lib/styles/components/_input-select.scss +2 -7
  176. package/src/lib/styles/components/_input-text.scss +5 -10
  177. package/src/lib/styles/components/_input-textarea.scss +3 -8
  178. package/src/lib/styles/components/_item-preview.scss +10 -36
  179. package/src/lib/styles/components/_loader.scss +1 -2
  180. package/src/lib/styles/components/_map.scss +2 -3
  181. package/src/lib/styles/components/_metadata-viewer.scss +7 -12
  182. package/src/lib/styles/components/_mirador.scss +19 -0
  183. package/src/lib/styles/components/_nav.scss +5 -11
  184. package/src/lib/styles/components/_pagination.scss +29 -33
  185. package/src/lib/styles/components/_progress-line.scss +3 -10
  186. package/src/lib/styles/components/_sidebar-header.scss +3 -8
  187. package/src/lib/styles/components/_signup.scss +48 -49
  188. package/src/lib/styles/components/_simple-autocomplete.scss +5 -12
  189. package/src/lib/styles/components/_table.scss +5 -18
  190. package/src/lib/styles/components/_tag.scss +7 -10
  191. package/src/lib/styles/components/_text-viewer.scss +33 -88
  192. package/src/lib/styles/components/_timeline.scss +3 -4
  193. package/src/lib/styles/components/_toast.scss +7 -17
  194. package/src/lib/styles/components/_tooltip-content.scss +3 -4
  195. package/src/lib/styles/components/_tree.scss +26 -22
  196. package/src/lib/styles/components/_wizard.scss +36 -29
  197. package/src/lib/styles/generic/_color_scheme.scss +2 -2
  198. package/src/lib/styles/generic/_mixins.scss +28 -31
  199. package/src/lib/styles/generic/_variables.scss +9 -11
  200. package/src/lib/styles/global/_forms.scss +38 -63
  201. package/src/lib/styles/global/_global.scss +3 -5
  202. package/src/lib/styles/global/_normalize.scss +17 -57
  203. package/src/lib/styles/global/_typography.scss +25 -23
  204. package/src/lib/styles/utilities/_grids.scss +40 -79
  205. package/esm2020/lib/components/advanced-autocomplete/advanced-autocomplete.mjs +0 -25
  206. package/esm2020/lib/components/advanced-autocomplete/advanced-autocomplete.mock.mjs +0 -100
  207. package/esm2020/lib/components/alert/alert.mjs +0 -24
  208. package/esm2020/lib/components/anchor-wrapper/anchor-wrapper.mjs +0 -35
  209. package/esm2020/lib/components/avatar/avatar.mjs +0 -34
  210. package/esm2020/lib/components/breadcrumbs/breadcrumbs.mjs +0 -25
  211. package/esm2020/lib/components/bubble-chart/bubble-chart.mjs +0 -329
  212. package/esm2020/lib/components/button/button.mjs +0 -26
  213. package/esm2020/lib/components/carousel/carousel.mjs +0 -89
  214. package/esm2020/lib/components/carousel/carousel.mock.mjs +0 -136
  215. package/esm2020/lib/components/chart/chart.mjs +0 -37
  216. package/esm2020/lib/components/chart/chart.mock.mjs +0 -112
  217. package/esm2020/lib/components/content-placeholder/content-placeholder.mjs +0 -17
  218. package/esm2020/lib/components/data-widget/data-widget.mjs +0 -29
  219. package/esm2020/lib/components/datepicker/datepicker.mjs +0 -44
  220. package/esm2020/lib/components/facet/facet.mjs +0 -24
  221. package/esm2020/lib/components/facet/facet.mock.mjs +0 -103
  222. package/esm2020/lib/components/facet-header/facet-header.mjs +0 -24
  223. package/esm2020/lib/components/facet-year-range/facet-year-range.mjs +0 -53
  224. package/esm2020/lib/components/file-selector/file-selector.mjs +0 -39
  225. package/esm2020/lib/components/footer/footer.mjs +0 -26
  226. package/esm2020/lib/components/footer/footer.mock.mjs +0 -58
  227. package/esm2020/lib/components/header/header.mjs +0 -53
  228. package/esm2020/lib/components/header/header.mock.mjs +0 -101
  229. package/esm2020/lib/components/hero/hero.mjs +0 -41
  230. package/esm2020/lib/components/histogram-range/histogram-range.mjs +0 -390
  231. package/esm2020/lib/components/icon/icon.mjs +0 -21
  232. package/esm2020/lib/components/image-viewer/image-viewer.mjs +0 -55
  233. package/esm2020/lib/components/image-viewer/image-viewer.mock.mjs +0 -25
  234. package/esm2020/lib/components/image-viewer-tools/image-viewer-tools.mjs +0 -28
  235. package/esm2020/lib/components/image-viewer-tools/image-viewer-tools.mock.mjs +0 -54
  236. package/esm2020/lib/components/inner-title/inner-title.mjs +0 -40
  237. package/esm2020/lib/components/inner-title/inner-title.mock.mjs +0 -53
  238. package/esm2020/lib/components/input-checkbox/input-checkbox.mjs +0 -24
  239. package/esm2020/lib/components/input-checkbox/input-checkbox.mock.mjs +0 -25
  240. package/esm2020/lib/components/input-link/input-link.mjs +0 -24
  241. package/esm2020/lib/components/input-link/input-link.mock.mjs +0 -38
  242. package/esm2020/lib/components/input-text/input-text.mjs +0 -34
  243. package/esm2020/lib/components/input-textarea/input-textarea.mjs +0 -21
  244. package/esm2020/lib/components/item-preview/item-preview.mjs +0 -25
  245. package/esm2020/lib/components/item-preview/item-preview.mock.mjs +0 -43
  246. package/esm2020/lib/components/loader/loader.mjs +0 -16
  247. package/esm2020/lib/components/map/map.mjs +0 -64
  248. package/esm2020/lib/components/metadata-viewer/metadata-viewer.mjs +0 -19
  249. package/esm2020/lib/components/metadata-viewer/metadata-viewer.mock.mjs +0 -74
  250. package/esm2020/lib/components/nav/nav.mjs +0 -27
  251. package/esm2020/lib/components/nav/nav.mock.mjs +0 -36
  252. package/esm2020/lib/components/pagination/pagination.mjs +0 -31
  253. package/esm2020/lib/components/pagination/pagination.mock.mjs +0 -23
  254. package/esm2020/lib/components/progress-line/progress-line.mjs +0 -19
  255. package/esm2020/lib/components/sidebar-header/sidebar-header.mjs +0 -24
  256. package/esm2020/lib/components/signup/signup.mjs +0 -44
  257. package/esm2020/lib/components/simple-autocomplete/simple-autocomplete.mjs +0 -25
  258. package/esm2020/lib/components/simple-autocomplete/simple-autocomplete.mock.mjs +0 -15
  259. package/esm2020/lib/components/table/table.mjs +0 -35
  260. package/esm2020/lib/components/table/table.mock.mjs +0 -152
  261. package/esm2020/lib/components/tag/tag.mjs +0 -35
  262. package/esm2020/lib/components/text-viewer/text-viewer.mjs +0 -42
  263. package/esm2020/lib/components/timeline/timeline.mjs +0 -51
  264. package/esm2020/lib/components/timeline/timeline.mock.mjs +0 -137
  265. package/esm2020/lib/components/toast/toast.mjs +0 -24
  266. package/esm2020/lib/components/toast/toast.mock.mjs +0 -51
  267. package/esm2020/lib/components/tooltip-content/tooltip-content.mjs +0 -25
  268. package/esm2020/lib/components/tree/tree.mjs +0 -25
  269. package/esm2020/lib/components/wizard/wizard.mjs +0 -24
  270. package/esm2020/lib/dv-components-lib.module.mjs +0 -211
  271. package/esm2020/public-api.mjs +0 -103
  272. package/fesm2015/net7-components.mjs +0 -5421
  273. package/fesm2015/net7-components.mjs.map +0 -1
  274. package/fesm2020/net7-components.mjs +0 -5434
  275. package/fesm2020/net7-components.mjs.map +0 -1
  276. /package/{esm2020 → esm2022}/lib/components/avatar/avatar.mock.mjs +0 -0
  277. /package/{esm2020 → esm2022}/lib/components/datepicker/datepicker.mock.mjs +0 -0
  278. /package/{esm2020 → esm2022}/lib/components/facet-header/facet-header.mock.mjs +0 -0
  279. /package/{esm2020 → esm2022}/lib/components/facet-year-range/facet-year-range.mock.mjs +0 -0
  280. /package/{esm2020 → esm2022}/lib/components/input-select/input-select.mock.mjs +0 -0
  281. /package/{esm2020 → esm2022}/lib/components/input-text/input-text.mock.mjs +0 -0
  282. /package/{esm2020 → esm2022}/lib/components/input-textarea/input-textarea.mock.mjs +0 -0
  283. /package/{esm2020 → esm2022}/lib/components/progress-line/progress-line.mock.mjs +0 -0
  284. /package/{esm2020 → esm2022}/lib/components/sidebar-header/sidebar-header.mock.mjs +0 -0
  285. /package/{esm2020 → esm2022}/lib/components/tag/tag.mock.mjs +0 -0
  286. /package/{esm2020 → esm2022}/net7-components.mjs +0 -0
@@ -1,25 +0,0 @@
1
- //---------------------------
2
- // BREADCRUMBS.ts
3
- //---------------------------
4
- import { Component, Input } from '@angular/core';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "../anchor-wrapper/anchor-wrapper";
8
- export class BreadcrumbsComponent {
9
- onClick(payload) {
10
- if (!this.emit)
11
- return;
12
- this.emit('click', payload);
13
- }
14
- }
15
- BreadcrumbsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16
- BreadcrumbsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BreadcrumbsComponent, selector: "n7-breadcrumbs", inputs: { data: "data", emit: "emit" }, ngImport: i0, template: "<div *ngIf=\"data\" class=\"n7-breadcrumbs {{ data.classes || '' }}\">\n <nav class=\"n7-breadcrumbs__nav\">\n <ol class=\"n7-breadcrumbs__list\">\n <li *ngFor=\"let item of data.items\" class=\"n7-breadcrumbs__item {{ item.classes || '' }}\">\n <n7-anchor-wrapper [classes]=\"'n7-breadcrumbs__label'\"\n [data]=\"item.anchor\"\n (clicked)=\"onClick($event)\">\n {{ item.label }}\n </n7-anchor-wrapper>\n </li>\n </ol>\n </nav>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.AnchorWrapperComponent, selector: "n7-anchor-wrapper", inputs: ["data", "classes"], outputs: ["clicked"] }] });
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BreadcrumbsComponent, decorators: [{
18
- type: Component,
19
- args: [{ selector: 'n7-breadcrumbs', template: "<div *ngIf=\"data\" class=\"n7-breadcrumbs {{ data.classes || '' }}\">\n <nav class=\"n7-breadcrumbs__nav\">\n <ol class=\"n7-breadcrumbs__list\">\n <li *ngFor=\"let item of data.items\" class=\"n7-breadcrumbs__item {{ item.classes || '' }}\">\n <n7-anchor-wrapper [classes]=\"'n7-breadcrumbs__label'\"\n [data]=\"item.anchor\"\n (clicked)=\"onClick($event)\">\n {{ item.label }}\n </n7-anchor-wrapper>\n </li>\n </ol>\n </nav>\n</div>\n" }]
20
- }], propDecorators: { data: [{
21
- type: Input
22
- }], emit: [{
23
- type: Input
24
- }] } });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kdi1jb21wb25lbnRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kdi1jb21wb25lbnRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2QkFBNkI7QUFDN0IsaUJBQWlCO0FBQ2pCLDZCQUE2QjtBQUU3QixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQWtEakQsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQixPQUFPLENBQUMsT0FBTztRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQzs7aUhBUlUsb0JBQW9CO3FHQUFwQixvQkFBb0IsOEZDdERqQyxnakJBYUE7MkZEeUNhLG9CQUFvQjtrQkFKaEMsU0FBUzsrQkFDRSxnQkFBZ0I7OEJBSWpCLElBQUk7c0JBQVosS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQlJFQURDUlVNQlMudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuY2hvciB9IGZyb20gJy4uLy4uL3NoYXJlZC1pbnRlcmZhY2VzJztcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGEgc2luZ2xlIEJyZWFkY3J1bWJzQ29tcG9uZW50J3MgXCJJdGVtXCJcbiAqXG4gKiBAcHJvcGVydHkgbGFiZWwgKHJlcXVpcmVkKVxuICogQHByb3BlcnR5IHBheWxvYWQgKHJlcXVpcmVkKVxuICogQHByb3BlcnR5IGNsYXNzZXMgKG9wdGlvbmFsKVxuICogQHByb3BlcnR5IF9tZXRhIChvcHRpb25hbClcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWRjcnVtYnNJdGVtIHtcbiAgLyoqXG4gICAqIGl0ZW0ncyBsYWJlbFxuICAgKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgYW5jaG9yOiBBbmNob3I7XG4gIC8qKlxuICAgKiBhZGRpdGlvbmFsIGh0bWwgY2xhc3Nlc1xuICAgKi9cbiAgY2xhc3Nlcz86IGFueTtcbiAgLyoqXG4gICAqIGFkZGl0aW9uYWwgaW5mbyB1c2VmdWwgZm9yIHRoZSBjb21wb25lbnQncyBsb2dpY1xuICAgKi9cbiAgX21ldGE/OiBhbnk7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBCcmVhZGNydW1ic0NvbXBvbmVudCdzIFwiRGF0YVwiXG4gKlxuICogQHByb3BlcnR5IGl0ZW1zIChyZXF1aXJlZClcbiAqIEBwcm9wZXJ0eSBjbGFzc2VzIChvcHRpb25hbClcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWRjcnVtYnNEYXRhIHtcbiAgLyoqXG4gICAqIGVhY2ggaXRlbSByZW5kZXJzIGEgYnJlYWRjcnVtYiBsZXZlbFxuICAgKi9cbiAgaXRlbXM6IEJyZWFkY3J1bWJzSXRlbVtdO1xuICAvKipcbiAgICogYWRkaXRpb25hbCBodG1sIGNsYXNzZXNcbiAgICovXG4gIGNsYXNzZXM/OiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ243LWJyZWFkY3J1bWJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JyZWFkY3J1bWJzLmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWJzQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZGF0YTogQnJlYWRjcnVtYnNEYXRhO1xuXG4gIEBJbnB1dCgpIGVtaXQ6IGFueTtcblxuICBvbkNsaWNrKHBheWxvYWQpIHtcbiAgICBpZiAoIXRoaXMuZW1pdCkgcmV0dXJuO1xuICAgIHRoaXMuZW1pdCgnY2xpY2snLCBwYXlsb2FkKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImRhdGFcIiBjbGFzcz1cIm43LWJyZWFkY3J1bWJzIHt7IGRhdGEuY2xhc3NlcyB8fCAnJyB9fVwiPlxuICAgIDxuYXYgY2xhc3M9XCJuNy1icmVhZGNydW1ic19fbmF2XCI+XG4gICAgICAgIDxvbCBjbGFzcz1cIm43LWJyZWFkY3J1bWJzX19saXN0XCI+XG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YS5pdGVtc1wiIGNsYXNzPVwibjctYnJlYWRjcnVtYnNfX2l0ZW0ge3sgaXRlbS5jbGFzc2VzIHx8ICcnIH19XCI+XG4gICAgICAgICAgICAgICAgPG43LWFuY2hvci13cmFwcGVyIFtjbGFzc2VzXT1cIiduNy1icmVhZGNydW1ic19fbGFiZWwnXCJcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJpdGVtLmFuY2hvclwiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L243LWFuY2hvci13cmFwcGVyPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9vbD5cbiAgICA8L25hdj5cbjwvZGl2PlxuIl19
@@ -1,329 +0,0 @@
1
- //---------------------------
2
- // BUBBLECHART.ts
3
- //---------------------------
4
- /**
5
- * The bubble chart is drawn using d3js, a library to create and update anything in svg.
6
- *
7
- * LEGEND:
8
- * - svg -> the canvas/<svg> element where everything will be drawn on (appended).
9
- * - g -> <g> is a group of svg elements.
10
- * - leaf -> this is the svg circle, the bubble.
11
- * - text -> this is all the text inside the circle.
12
- * - tspan -> this is just one line of text.
13
- *
14
- * What are "join, enter, update, exit?"
15
- * https://observablehq.com/@d3/learn-d3-joins?collection=@d3/learn-d3
16
- * https://observablehq.com/@thetylerwolf/day-18-join-enter-update-exit
17
- *
18
- * Each line can have a different width, but all of the text inside a circle
19
- * needs to be scaled by a constant factor.
20
- * https://observablehq.com/@mbostock/fit-text-to-circle
21
- */
22
- import { Component, Input } from '@angular/core';
23
- import * as i0 from "@angular/core";
24
- import * as i1 from "@angular/common";
25
- export class BubbleChartComponent {
26
- constructor() {
27
- this._loaded = false;
28
- /**
29
- * Reference for much of the new text scaling code comes from:
30
- * https://observablehq.com/@mbostock/fit-text-to-circle
31
- */
32
- this.measureWidth = (text) => {
33
- const context = document.createElement('canvas').getContext('2d');
34
- // measure text with the correct font family and weight
35
- if (this.data?.fontRendering?.label?.family && this.data?.fontRendering?.label?.weight) {
36
- context.font = `${this.data.fontRendering.label.weight} ${this.data.fontRendering.label.family}`;
37
- }
38
- // calculated width + padding
39
- return context.measureText(text).width * 1.15;
40
- };
41
- this.isValidNumber = (value) => !Number.isNaN(Number.parseFloat(value));
42
- this.draw = () => {
43
- const { d3 } = this;
44
- const { containerId, data, height, width, selected, transition, colorMatch, shuffle, fontRendering } = this.data;
45
- // SVG shape path for the close icon
46
- const closeIconPath = 'M -50,40 L-40,50 0,10 40,50 50,40 10,0 50,-40 40,-50 0,-10 -40,-50 -50,-40 -10,0 -50,40';
47
- const defaultLineHeight = 13;
48
- // word count before truncating with ellipsis
49
- const ellipsisThreshold = 4;
50
- const textScalingFactor = 1;
51
- if (!Array.isArray(data)) {
52
- // Check if it is possible to draw with the current dataset
53
- console.warn('(n7-bubble-chart) The data object is not in the expected format!');
54
- return;
55
- }
56
- // animation settings used to render changes in the chart
57
- let t = d3
58
- .transition()
59
- .duration(0);
60
- if (typeof transition === 'number') {
61
- t = d3
62
- .transition()
63
- .duration(transition)
64
- .ease(d3.easeCubicInOut);
65
- }
66
- // calculate the bubble background color from it's type (domain)
67
- const colorMap = d3.scaleOrdinal()
68
- .domain(colorMatch ? colorMatch.domain : ['persona', 'luogo', 'organizzazione', 'cosa notevole'])
69
- .range(colorMatch ? colorMatch.range : d3.schemeTableau10);
70
- // calculate how big the radius of the bubble should be
71
- const sizeScale = d3 // map entity count to bubble size
72
- .scaleLinear()
73
- .domain([0, d3.max(data, (d) => +d.count)])
74
- .range([3, d3.max(data, (d) => +d.count)]);
75
- // pack is a d3js method which calculates the bubble's x & y position in the chart
76
- // circle packing reference: https://observablehq.com/@d3/pack
77
- const pack = (children) => d3
78
- .pack()
79
- .size([width - 2, height - 2])
80
- .padding(1.5)(d3.hierarchy({ children }).sum((d) => sizeScale(d.count)));
81
- // the bubbles are packed in a single level tree, this is the root
82
- // see circle packing reference: https://observablehq.com/@d3/pack
83
- const root = () => {
84
- if (typeof shuffle === 'undefined' || shuffle) {
85
- const shuffData = data.slice(); // do not modify the source data!
86
- return pack(d3.shuffle(shuffData));
87
- } // if shuffle is set to false, skip the data shuffle
88
- return pack(data);
89
- };
90
- // svg canvas where all the bubbles are drawn
91
- const svg = d3
92
- .select(`#${containerId}`)
93
- .attr('viewBox', [0, 0, width, height])
94
- // .attr('font-family', 'Verdana, Geneva, sans-serif')
95
- // .attr('font-size', '10px')
96
- .style('font', '10px Verdana, Geneva, sans-serif')
97
- .style('height', 'auto')
98
- .style('max-width', '100%')
99
- .attr('text-anchor', 'middle');
100
- this.removeUnneededNodes(svg);
101
- // a leaf of the "pack tree" corresponds to a bubble
102
- const leaf = svg.selectAll('g').data(root().leaves(), (d) => d.data.entity.id);
103
- leaf
104
- .transition(t) // update transition on <g>
105
- .attr('fill-opacity', 1)
106
- .attr('transform', (d) => `translate(${d.x + 1},${d.y + 1})`);
107
- // .attr('font-size', (d) => {
108
- // let size = d.r / 5.5;
109
- // size *= 1;
110
- // size += 1;
111
- // return `${Math.round(size)}px`;
112
- // });
113
- // clear all existing close icons from the bubbles
114
- leaf.selectAll('.close-icon').remove();
115
- if (selected) {
116
- leaf // render only the necessary close icons
117
- .filter((d) => selected.includes(d.data.entity.id))
118
- .append('path')
119
- .attr('class', 'close-icon')
120
- .attr('d', closeIconPath)
121
- .attr('fill', '#fff')
122
- .attr('transform', (d) => {
123
- if (d.r / 4 > 3) {
124
- return `scale(.08) translate(0, ${d.r * 10 - 80})`;
125
- }
126
- return 'scale(.08)';
127
- });
128
- }
129
- leaf
130
- .select('circle')
131
- .transition(t) // update transition on <circle>
132
- .attr('fill-opacity', 1)
133
- .attr('r', (d) => d.r);
134
- // g represents a "group of svg items"
135
- // items grouped together can be added / removed / scaled together
136
- const g = leaf.enter().append('g');
137
- g.attr('transform', (d) => `translate(${d.x + 1},${d.y + 1})`)
138
- .attr('cursor', 'pointer')
139
- .on('click', (event, d) => {
140
- this.onClick(d.data.entity.id);
141
- })
142
- .attr('id', (d) => `g_${d.data.entity.id}`)
143
- .append('circle')
144
- .attr('id', (d) => { d.leafUid = d.data.entity.id; })
145
- .attr('r', 0)
146
- .transition(t) // enter() transition on <circle>
147
- .attr('fill-opacity', 1)
148
- .attr('fill', (d) => colorMap(d.data.entity.typeOfEntity))
149
- .attr('r', (d) => d.r);
150
- // prevents the text from overflowing the bubble
151
- g.append('clipPath')
152
- .attr('id', (d) => { d.clipUid = `Clip-${d.data.entity.id}`; })
153
- .append('use')
154
- .attr('xlink:href', (d) => d.leafUid.href);
155
- /** NEW TEXT LOGIC */
156
- g.append('text')
157
- .attr('font-family', () => {
158
- if (fontRendering && fontRendering.label && fontRendering.label.family) {
159
- return fontRendering.label.family;
160
- }
161
- return 'inherit';
162
- })
163
- .attr('font-weight', () => {
164
- if (fontRendering && fontRendering && fontRendering.label && fontRendering.label.weight) {
165
- return fontRendering.label.weight;
166
- }
167
- return 'inherit';
168
- })
169
- .attr('fill', 'white')
170
- .each((d) => {
171
- // Capitalize the first letter of the label
172
- d.data.entity.label = d.data.entity
173
- .label.charAt(0).toUpperCase()
174
- + d.data.entity.label.slice(1);
175
- // 1. initialize meta object
176
- if (!d._meta || typeof d._meta !== 'object')
177
- d._meta = {};
178
- // 2. tokenize label & count into words
179
- const words = d.data.entity.label.split(/[\s]+/g); // To hyphenate: /\s+|(?<=-)/
180
- // Truncate with ellipsis if the label is longer than the threshold
181
- if (words.length > ellipsisThreshold) {
182
- words.splice(ellipsisThreshold, words.length - ellipsisThreshold);
183
- words[ellipsisThreshold - 1] += '…';
184
- }
185
- // add counter
186
- if (d.r / 4 > 2.5) {
187
- // show text threshold
188
- if (!words[words.length - 1])
189
- words.pop();
190
- if (!words[0])
191
- words.shift();
192
- }
193
- if (d.r / 4 > 4.5) {
194
- // show number threshold
195
- words.push(`${d.data.count}`);
196
- }
197
- d._meta.words = words;
198
- d._meta.lineHeight = defaultLineHeight;
199
- const targetWidth = Math.sqrt(this.measureWidth(d._meta.words.join(' ').trim()) * defaultLineHeight);
200
- // 3. build lines of text
201
- d._meta.lines = [];
202
- let line;
203
- let lineWidth0 = Infinity;
204
- for (let i = 0, n = d._meta.words.length; i < n; i += 1) {
205
- const lineText1 = (line ? `${line.text} ` : '') + words[i];
206
- const lineWidth1 = this.measureWidth(lineText1);
207
- if ((lineWidth0 + lineWidth1) / 2 < targetWidth && i !== n - 1) {
208
- line.width = lineWidth0;
209
- lineWidth0 = lineWidth1;
210
- line.text = lineText1;
211
- }
212
- else {
213
- // if line is too long or this is the last line (counter), push to next line
214
- lineWidth0 = this.measureWidth(words[i]);
215
- line = { width: lineWidth0, text: words[i] };
216
- d._meta.lines.push(line);
217
- }
218
- }
219
- // 4. compute the bounding radius
220
- let radius = 0;
221
- for (let i = 0, n = d._meta.lines.length; i < n; i += 1) {
222
- const dy = (Math.abs(i - n / 2) + 0.8) * d._meta.lineHeight;
223
- const dx = d._meta.lines[i].width / 2;
224
- radius = Math.max(radius, Math.sqrt(dx * dx + dy * dy));
225
- }
226
- d._meta.textRadius = radius;
227
- return d;
228
- })
229
- .attr('transform', (d) => {
230
- const scale = ((d.r * 0.8) / d._meta.textRadius) * textScalingFactor;
231
- return `scale(${scale})`;
232
- })
233
- .filter((d) => (d.r / 4 > 2.5))
234
- .selectAll('tspan')
235
- .data((d) => d._meta.lines)
236
- .enter()
237
- .append('tspan')
238
- .attr('x', 0)
239
- .attr('y', (d, i, n) => (i - n.length / 2 + 0.8) * defaultLineHeight)
240
- .attr('class', (d, i, n) => (
241
- // if it's the last label and a valid number, mark as counter
242
- i === n.length - 1 && this.isValidNumber(d.text) ? 'label-counter' : 'label-text'))
243
- .text((d) => d.text)
244
- .attr('fill-opacity', 0)
245
- .transition(t) // enter() transition on <tspan>
246
- .attr('fill-opacity', 1);
247
- // custom style for the counter
248
- g.selectAll('tspan.label-counter')
249
- .attr('font-family', () => {
250
- if (fontRendering && fontRendering.counter && fontRendering.counter.family) {
251
- return fontRendering.counter.family;
252
- }
253
- return 'inherit';
254
- })
255
- .attr('font-weight', () => {
256
- if (fontRendering && fontRendering.counter && fontRendering.counter.weight) {
257
- return fontRendering.counter.weight;
258
- }
259
- return 'inherit';
260
- });
261
- leaf
262
- .exit() // EXIT CYCLE
263
- .remove();
264
- if (selected) {
265
- g.filter((d) => selected.includes(d.leafUid)) // append 'X' icon // only for selected bubbles
266
- .append('path')
267
- .attr('d', closeIconPath)
268
- .attr('class', 'close-icon')
269
- .attr('fill', (d) => {
270
- if (d.r / 4 > 2.5) {
271
- return '#fff';
272
- }
273
- return 'transparent';
274
- })
275
- .attr('transform', (d) => {
276
- if (d.r / 4 > 3) {
277
- return `scale(.08) translate(0, ${d.r * 10 - 80})`;
278
- }
279
- return 'scale(.08)';
280
- });
281
- }
282
- // communicate end of draw
283
- this.emit('d3end', data);
284
- };
285
- }
286
- ngAfterContentChecked() {
287
- /*
288
- Waits for the dom to be loaded, then fires the draw function
289
- that renders the chart.
290
- */
291
- if (this.data) {
292
- if (this._loaded)
293
- return;
294
- this._loaded = true;
295
- setTimeout(() => {
296
- import('d3').then((module) => {
297
- this.d3 = module;
298
- this.draw();
299
- if (this.data && this.data.setDraw) {
300
- this.data.setDraw(this.draw);
301
- }
302
- });
303
- });
304
- }
305
- }
306
- onClick(payload) {
307
- if (!this.emit)
308
- return;
309
- this.emit('click', payload);
310
- }
311
- removeUnneededNodes(svg) {
312
- // select all nodes and rejoin data
313
- const nodes = svg.selectAll('g')
314
- .data(this.data);
315
- // remove excess nodes
316
- nodes.exit().remove();
317
- }
318
- }
319
- BubbleChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BubbleChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
320
- BubbleChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BubbleChartComponent, selector: "n7-bubble-chart", inputs: { data: "data", emit: "emit" }, ngImport: i0, template: "<div *ngIf=\"data\" class=\"n7-bubble-chart {{ data.classes || '' }}\">\n <svg #bubbleChart id=\"{{data.containerId}}\"></svg>\n</div>", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
321
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BubbleChartComponent, decorators: [{
322
- type: Component,
323
- args: [{ selector: 'n7-bubble-chart', template: "<div *ngIf=\"data\" class=\"n7-bubble-chart {{ data.classes || '' }}\">\n <svg #bubbleChart id=\"{{data.containerId}}\"></svg>\n</div>" }]
324
- }], propDecorators: { data: [{
325
- type: Input
326
- }], emit: [{
327
- type: Input
328
- }] } });
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnViYmxlLWNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHYtY29tcG9uZW50cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2J1YmJsZS1jaGFydC9idWJibGUtY2hhcnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kdi1jb21wb25lbnRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYnViYmxlLWNoYXJ0L2J1YmJsZS1jaGFydC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3QixpQkFBaUI7QUFDakIsNkJBQTZCO0FBRTdCOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUF1QixNQUFNLGVBQWUsQ0FBQzs7O0FBMEh0RSxNQUFNLE9BQU8sb0JBQW9CO0lBSmpDO1FBV1UsWUFBTyxHQUFHLEtBQUssQ0FBQztRQTJCeEI7OztXQUdHO1FBQ0gsaUJBQVksR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3RCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xFLHVEQUF1RDtZQUN2RCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDdEYsT0FBTyxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ2xHO1lBQ0QsNkJBQTZCO1lBQzdCLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJ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QjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQU87UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFrQkQsbUJBQW1CLENBQUMsR0FBRztRQUNyQixtQ0FBbUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7YUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixzQkFBc0I7UUFDdEIsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hCLENBQUM7O2lIQXhEVSxvQkFBb0I7cUdBQXBCLG9CQUFvQiwrRkNqSmpDLDJJQUVNOzJGRCtJTyxvQkFBb0I7a0JBSmhDLFNBQVM7K0JBQ0UsaUJBQWlCOzhCQUlsQixJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJVQkJMRUNIQVJULnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFRoZSBidWJibGUgY2hhcnQgaXMgZHJhd24gdXNpbmcgZDNqcywgYSBsaWJyYXJ5IHRvIGNyZWF0ZSBhbmQgdXBkYXRlIGFueXRoaW5nIGluIHN2Zy5cbiAqXG4gKiBMRUdFTkQ6XG4gKiAtIHN2ZyAtPiB0aGUgY2FudmFzLzxzdmc+IGVsZW1lbnQgd2hlcmUgZXZlcnl0aGluZyB3aWxsIGJlIGRyYXduIG9uIChhcHBlbmRlZCkuXG4gKiAtIGcgLT4gPGc+IGlzIGEgZ3JvdXAgb2Ygc3ZnIGVsZW1lbnRzLlxuICogLSBsZWFmIC0+IHRoaXMgaXMgdGhlIHN2ZyBjaXJjbGUsIHRoZSBidWJibGUuXG4gKiAtIHRleHQgLT4gdGhpcyBpcyBhbGwgdGhlIHRleHQgaW5zaWRlIHRoZSBjaXJjbGUuXG4gKiAtIHRzcGFuIC0+IHRoaXMgaXMganVzdCBvbmUgbGluZSBvZiB0ZXh0LlxuICpcbiAqIFdoYXQgYXJlIFwiam9pbiwgZW50ZXIsIHVwZGF0ZSwgZXhpdD9cIlxuICogaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BkMy9sZWFybi1kMy1qb2lucz9jb2xsZWN0aW9uPUBkMy9sZWFybi1kM1xuICogaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0B0aGV0eWxlcndvbGYvZGF5LTE4LWpvaW4tZW50ZXItdXBkYXRlLWV4aXRcbiAqXG4gKiBFYWNoIGxpbmUgY2FuIGhhdmUgYSBkaWZmZXJlbnQgd2lkdGgsIGJ1dCBhbGwgb2YgdGhlIHRleHQgaW5zaWRlIGEgY2lyY2xlXG4gKiBuZWVkcyB0byBiZSBzY2FsZWQgYnkgYSBjb25zdGFudCBmYWN0b3IuXG4gKiBodHRwczovL29ic2VydmFibGVocS5jb20vQG1ib3N0b2NrL2ZpdC10ZXh0LXRvLWNpcmNsZVxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEFmdGVyQ29udGVudENoZWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIEQzQ2hhcnQncyBcImRhdGFcIlxuICpcbiAqIEBwcm9wZXJ0eSBlbnRpdHkgKHJlcXVpcmVkKVxuICogLSBpZCAocmVxdWlyZWQpXG4gKiAtIGxhYmVsIChvcHRpb25hbClcbiAqIC0gdHlwZU9mRW50aXR5IChvcHRpb25hbClcbiAqIEBwcm9wZXJ0eSBjb3VudCAocmVxdWlyZWQpXG4qL1xuZXhwb3J0IGludGVyZmFjZSBCdWJibGVDaGFydERhdGFJdGVtIHtcbiAgZW50aXR5OiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICB0eXBlT2ZFbnRpdHk/OiBzdHJpbmc7XG4gIH07XG4gIGNvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBhIENpcmNsZSdzIG5vZGUgZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENpcmNsZU5vZGUge1xuICBjbGlwVWlkOiBzdHJpbmc7XG4gIGRhdGE6IEJ1YmJsZUNoYXJ0RGF0YUl0ZW07XG4gIGRlcHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBsZWFmVWlkOiBzdHJpbmc7XG4gIHBhcmVudDogTm9kZTtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHI6IG51bWJlcjtcbiAgdmFsdWU6IG51bWJlcjtcbiAgLyoqIER5bmFtaWMgZGF0YSBmb3IgaW50ZXJuYWwgbG9naWMgKi9cbiAgX21ldGE/OiBhbnk7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBCdWJibGVDaGFydENvbXBvbmVudCdzIFwiZGF0YVwiXG4gKlxuICogQHByb3BlcnR5IGNvbnRhaW5lcklkIChyZXF1aXJlZClcbiAqIEBwcm9wZXJ0eSBjb250YWluZXJXaWR0aCAocmVxdWlyZWQpXG4gKiBAcHJvcGVydHkgY29udGFpbmVySGVpZ2h0IChyZXF1aXJlZClcbiAqIEBwcm9wZXJ0eSBidWJibGVzRGF0YSAocmVxdWlyZWQpXG4gKiBAcHJvcGVydHkgaXNGb3JjZVNpbXVsYXRpb25FbmFibGVkIChyZXF1aXJlZClcbiAqIEBwcm9wZXJ0eSBjbGFzc2VzIChvcHRpb25hbClcbiAqIEBwcm9wZXJ0eSByZXNldCAob3B0aW9uYWwpXG4qL1xuZXhwb3J0IGludGVyZmFjZSBCdWJibGVDaGFydERhdGEge1xuICAvKipcbiAgICogdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBidWJibGUtY2hhcnRcbiAgICovXG4gIGNvbnRhaW5lcklkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiB0b3RhbCB3aWR0aCBmb3IgdGhlIGJ1YmJsZS1jaGFydFxuICAgKi9cbiAgd2lkdGg6IG51bWJlcjtcbiAgLyoqXG4gICAqIHRvdGFsIGhlaWdodCBmb3IgdGhlIGJ1YmJsZS1jaGFydFxuICAgKi9cbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBkYXRhIGFib3V0IHRoZSBidWJibGVzXG4gICAqL1xuICBkYXRhOiBCdWJibGVDaGFydERhdGFJdGVtW107XG4gIC8qKlxuICAgKiBhZGRpdGlvbmFsIGNzcyBjbGFzc2VzXG4gICAqL1xuICBjbGFzc2VzPzogc3RyaW5nO1xuICAvKipcbiAgICogbGlzdCBvZiBJRCdzIG9mIHNlbGVjdGVkIGl0ZW1zXG4gICAqIChzZWxlY3RlZCBpdGVtcyB3aWxsIHJlbmRlciB3aXRoIGEgJ1gnIGljb24pXG4gICAqL1xuICBzZWxlY3RlZD86IHN0cmluZ1tdO1xuICAvKipcbiAgICogU3BlY2lmeSBhIGxpc3Qgb2YgdHlwZU9mRW50aXR5IHR5cGVzIChkb21haW4pLFxuICAgKiBhbmQgYSBsaXN0IG9mIGNvbG9ycyAocmFuZ2UpLCB3aGljaCB3aWxsIGJlIG1hcHBlZCB0b2dldGhlci5cbiAgICovXG4gIGNvbG9yTWF0Y2g/OiB7XG4gICAgZG9tYWluOiBzdHJpbmdbXTtcbiAgICByYW5nZTogc3RyaW5nW107XG4gIH07XG4gIC8qKlxuICAgKiBEZWZpbmUgYSBtYXggYW5kIG1pbiBzaXplIGZvciB0aGUgYnViYmxlc1xuICAgKi9cbiAgc2l6ZVJhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xuICAvKipcbiAgICogSWYgZGVmaW5lZCwgdHJhbnNpdGlvbiB3aWxsIGJlIGFjdGl2YXRlZFxuICAgKiBhbmQgdGhlIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyBkdXJhdGlvblxuICAgKi9cbiAgdHJhbnNpdGlvbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIElmIHNldCB0byBmYWxzZSwgc3RvcHMgdGhlIHNodWZmbGluZyBvZiB0aGUgZGF0YVxuICAgKiBiZWZvcmUgcmVuZGVyaW5nLlxuICAgKi9cbiAgc2h1ZmZsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBmb250LWZhbWlseSBhbmQgdGhlIGZvbnQtd2VpZ2h0IGZvciBlYWNoIHRleHQgZ3JvdXBcbiAgICovXG4gIGZvbnRSZW5kZXJpbmc/OiB7XG4gICAgbGFiZWw/OiB7XG4gICAgICBmYW1pbHk/OiBzdHJpbmc7XG4gICAgICB3ZWlnaHQ/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBjb3VudGVyPzoge1xuICAgICAgZmFtaWx5Pzogc3RyaW5nO1xuICAgICAgd2VpZ2h0Pzogc3RyaW5nO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4cG9zZSB0aGUgZHJhdyBmdW5jdGlvbiBvdXRzaWRlIG9mIG43LWZyb250ZW5kL2NvbXBvbmVudHMgbGlicmFyeVxuICAgKiB0aGlzIGlzIG5lZWRlZCB0byByZWRyYXcgYnViYmxlLWNoYXJ0LWNvbXBvbmVudCBvbiBjb21tYW5kXG4gICAqL1xuICBzZXREcmF3PzogYW55O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduNy1idWJibGUtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYnViYmxlLWNoYXJ0Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEJ1YmJsZUNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XG4gIEBJbnB1dCgpIGRhdGE6IEJ1YmJsZUNoYXJ0RGF0YTtcblxuICBASW5wdXQoKSBlbWl0OiBhbnk7XG5cbiAgcHJpdmF0ZSBkMztcblxuICBwcml2YXRlIF9sb2FkZWQgPSBmYWxzZTtcblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgLypcbiAgICAgV2FpdHMgZm9yIHRoZSBkb20gdG8gYmUgbG9hZGVkLCB0aGVuIGZpcmVzIHRoZSBkcmF3IGZ1bmN0aW9uXG4gICAgIHRoYXQgcmVuZGVycyB0aGUgY2hhcnQuXG4gICAgKi9cbiAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICBpZiAodGhpcy5fbG9hZGVkKSByZXR1cm47XG4gICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGltcG9ydCgnZDMnKS50aGVuKChtb2R1bGUpID0+IHtcbiAgICAgICAgICB0aGlzLmQzID0gbW9kdWxlO1xuICAgICAgICAgIHRoaXMuZHJhdygpO1xuICAgICAgICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnNldERyYXcpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXREcmF3KHRoaXMuZHJhdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2socGF5bG9hZCkge1xuICAgIGlmICghdGhpcy5lbWl0KSByZXR1cm47XG4gICAgdGhpcy5lbWl0KCdjbGljaycsIHBheWxvYWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSBmb3IgbXVjaCBvZiB0aGUgbmV3IHRleHQgc2NhbGluZyBjb2RlIGNvbWVzIGZyb206XG4gICAqIGh0dHBzOi8vb2JzZXJ2YWJsZWhxLmNvbS9AbWJvc3RvY2svZml0LXRleHQtdG8tY2lyY2xlXG4gICAqL1xuICBtZWFzdXJlV2lkdGggPSAodGV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpO1xuICAgIC8vIG1lYXN1cmUgdGV4dCB3aXRoIHRoZSBjb3JyZWN0IGZvbnQgZmFtaWx5IGFuZCB3ZWlnaHRcbiAgICBpZiAodGhpcy5kYXRhPy5mb250UmVuZGVyaW5nPy5sYWJlbD8uZmFtaWx5ICYmIHRoaXMuZGF0YT8uZm9udFJlbmRlcmluZz8ubGFiZWw/LndlaWdodCkge1xuICAgICAgY29udGV4dC5mb250ID0gYCR7dGhpcy5kYXRhLmZvbnRSZW5kZXJpbmcubGFiZWwud2VpZ2h0fSAke3RoaXMuZGF0YS5mb250UmVuZGVyaW5nLmxhYmVsLmZhbWlseX1gO1xuICAgIH1cbiAgICAvLyBjYWxjdWxhdGVkIHdpZHRoICsgcGFkZGluZ1xuICAgIHJldHVybiBjb250ZXh0Lm1lYXN1cmVUZXh0KHRleHQpLndpZHRoICogMS4xNTtcbiAgfTtcblxuICBpc1ZhbGlkTnVtYmVyID0gKHZhbHVlKSA9PiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSk7XG5cbiAgcmVtb3ZlVW5uZWVkZWROb2RlcyhzdmcpIHtcbiAgICAvLyBzZWxlY3QgYWxsIG5vZGVzIGFuZCByZWpvaW4gZGF0YVxuICAgIGNvbnN0IG5vZGVzID0gc3ZnLnNlbGVjdEFsbCgnZycpXG4gICAgICAuZGF0YSh0aGlzLmRhdGEpO1xuICAgIC8vIHJlbW92ZSBleGNlc3Mgbm9kZXNcbiAgICBub2Rlcy5leGl0KCkucmVtb3ZlKCk7XG4gIH1cblxuICBkcmF3ID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZDMgfSA9IHRoaXM7XG4gICAgY29uc3Qge1xuICAgICAgY29udGFpbmVySWQsIGRhdGEsIGhlaWdodCxcbiAgICAgIHdpZHRoLCBzZWxlY3RlZCwgdHJhbnNpdGlvbixcbiAgICAgIGNvbG9yTWF0Y2gsIHNodWZmbGUsXG4gICAgICBmb250UmVuZGVyaW5nXG4gICAgfSA9IHRoaXMuZGF0YTtcbiAgICAvLyBTVkcgc2hhcGUgcGF0aCBmb3IgdGhlIGNsb3NlIGljb25cbiAgICBjb25zdCBjbG9zZUljb25QYXRoID0gJ00gLTUwLDQwIEwtNDAsNTAgMCwxMCA0MCw1MCA1MCw0MCAxMCwwIDUwLC00MCA0MCwtNTAgMCwtMTAgLTQwLC01MCAtNTAsLTQwIC0xMCwwIC01MCw0MCc7XG4gICAgY29uc3QgZGVmYXVsdExpbmVIZWlnaHQgPSAxMztcbiAgICAvLyB3b3JkIGNvdW50IGJlZm9yZSB0cnVuY2F0aW5nIHdpdGggZWxsaXBzaXNcbiAgICBjb25zdCBlbGxpcHNpc1RocmVzaG9sZCA9IDQ7XG4gICAgY29uc3QgdGV4dFNjYWxpbmdGYWN0b3IgPSAxO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAvLyBDaGVjayBpZiBpdCBpcyBwb3NzaWJsZSB0byBkcmF3IHdpdGggdGhlIGN1cnJlbnQgZGF0YXNldFxuICAgICAgY29uc29sZS53YXJuKCcobjctYnViYmxlLWNoYXJ0KSBUaGUgZGF0YSBvYmplY3QgaXMgbm90IGluIHRoZSBleHBlY3RlZCBmb3JtYXQhJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYW5pbWF0aW9uIHNldHRpbmdzIHVzZWQgdG8gcmVuZGVyIGNoYW5nZXMgaW4gdGhlIGNoYXJ0XG4gICAgbGV0IHQgPSBkM1xuICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgLmR1cmF0aW9uKDApO1xuICAgIGlmICh0eXBlb2YgdHJhbnNpdGlvbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHQgPSBkM1xuICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgIC5kdXJhdGlvbih0cmFuc2l0aW9uKVxuICAgICAgICAuZWFzZShkMy5lYXNlQ3ViaWNJbk91dCk7XG4gICAgfVxuXG4gICAgLy8gY2FsY3VsYXRlIHRoZSBidWJibGUgYmFja2dyb3VuZCBjb2xvciBmcm9tIGl0J3MgdHlwZSAoZG9tYWluKVxuICAgIGNvbnN0IGNvbG9yTWFwID0gZDMuc2NhbGVPcmRpbmFsKClcbiAgICAgIC5kb21haW4oY29sb3JNYXRjaCA/IGNvbG9yTWF0Y2guZG9tYWluIDogWydwZXJzb25hJywgJ2x1b2dvJywgJ29yZ2FuaXp6YXppb25lJywgJ2Nvc2Egbm90ZXZvbGUnXSlcbiAgICAgIC5yYW5nZShjb2xvck1hdGNoID8gY29sb3JNYXRjaC5yYW5nZSA6IGQzLnNjaGVtZVRhYmxlYXUxMCk7XG5cbiAgICAvLyBjYWxjdWxhdGUgaG93IGJpZyB0aGUgcmFkaXVzIG9mIHRoZSBidWJibGUgc2hvdWxkIGJlXG4gICAgY29uc3Qgc2l6ZVNjYWxlID0gZDMgLy8gbWFwIGVudGl0eSBjb3VudCB0byBidWJibGUgc2l6ZVxuICAgICAgLnNjYWxlTGluZWFyKClcbiAgICAgIC5kb21haW4oWzAsIGQzLm1heChkYXRhLCAoZCkgPT4gK2QuY291bnQpXSlcbiAgICAgIC5yYW5nZShbMywgZDMubWF4KGRhdGEsIChkKSA9PiArZC5jb3VudCldKTtcblxuICAgIC8vIHBhY2sgaXMgYSBkM2pzIG1ldGhvZCB3aGljaCBjYWxjdWxhdGVzIHRoZSBidWJibGUncyB4ICYgeSBwb3NpdGlvbiBpbiB0aGUgY2hhcnRcbiAgICAvLyBjaXJjbGUgcGFja2luZyByZWZlcmVuY2U6IGh0dHBzOi8vb2JzZXJ2YWJsZWhxLmNvbS9AZDMvcGFja1xuICAgIGNvbnN0IHBhY2sgPSAoY2hpbGRyZW4pID0+IGQzXG4gICAgICAucGFjaygpXG4gICAgICAuc2l6ZShbd2lkdGggLSAyLCBoZWlnaHQgLSAyXSlcbiAgICAgIC5wYWRkaW5nKDEuNSkoXG4gICAgICAgIGQzLmhpZXJhcmNoeSh7IGNoaWxkcmVuIH0pLnN1bSgoZCkgPT4gc2l6ZVNjYWxlKGQuY291bnQpKVxuICAgICAgKTtcblxuICAgIC8vIHRoZSBidWJibGVzIGFyZSBwYWNrZWQgaW4gYSBzaW5nbGUgbGV2ZWwgdHJlZSwgdGhpcyBpcyB0aGUgcm9vdFxuICAgIC8vIHNlZSBjaXJjbGUgcGFja2luZyByZWZlcmVuY2U6IGh0dHBzOi8vb2JzZXJ2YWJsZWhxLmNvbS9AZDMvcGFja1xuICAgIGNvbnN0IHJvb3QgPSAoKSA9PiB7IC8vIGlmIHNodWZmbGUgaXMgdW5kZWZpbmVkIG9yIHRydWUsIHNodWZmbGUgdGhlIGRhdGFcbiAgICAgIGlmICh0eXBlb2Ygc2h1ZmZsZSA9PT0gJ3VuZGVmaW5lZCcgfHwgc2h1ZmZsZSkge1xuICAgICAgICBjb25zdCBzaHVmZkRhdGEgPSBkYXRhLnNsaWNlKCk7IC8vIGRvIG5vdCBtb2RpZnkgdGhlIHNvdXJjZSBkYXRhIVxuICAgICAgICByZXR1cm4gcGFjayhkMy5zaHVmZmxlKHNodWZmRGF0YSkpO1xuICAgICAgfSAvLyBpZiBzaHVmZmxlIGlzIHNldCB0byBmYWxzZSwgc2tpcCB0aGUgZGF0YSBzaHVmZmxlXG4gICAgICByZXR1cm4gcGFjayhkYXRhKTtcbiAgICB9O1xuXG4gICAgLy8gc3ZnIGNhbnZhcyB3aGVyZSBhbGwgdGhlIGJ1YmJsZXMgYXJlIGRyYXduXG4gICAgY29uc3Qgc3ZnID0gZDNcbiAgICAgIC5zZWxlY3QoYCMke2NvbnRhaW5lcklkfWApXG4gICAgICAuYXR0cigndmlld0JveCcsIFswLCAwLCB3aWR0aCwgaGVpZ2h0XSlcbiAgICAgIC8vIC5hdHRyKCdmb250LWZhbWlseScsICdWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWYnKVxuICAgICAgLy8gLmF0dHIoJ2ZvbnQtc2l6ZScsICcxMHB4JylcbiAgICAgIC5zdHlsZSgnZm9udCcsICcxMHB4IFZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZicpXG4gICAgICAuc3R5bGUoJ2hlaWdodCcsICdhdXRvJylcbiAgICAgIC5zdHlsZSgnbWF4LXdpZHRoJywgJzEwMCUnKVxuICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpO1xuXG4gICAgdGhpcy5yZW1vdmVVbm5lZWRlZE5vZGVzKHN2Zyk7XG5cbiAgICAvLyBhIGxlYWYgb2YgdGhlIFwicGFjayB0cmVlXCIgY29ycmVzcG9uZHMgdG8gYSBidWJibGVcbiAgICBjb25zdCBsZWFmID0gc3ZnLnNlbGVjdEFsbCgnZycpLmRhdGEocm9vdCgpLmxlYXZlcygpLCAoZCkgPT4gZC5kYXRhLmVudGl0eS5pZCk7XG4gICAgbGVhZlxuICAgICAgLnRyYW5zaXRpb24odCkgLy8gdXBkYXRlIHRyYW5zaXRpb24gb24gPGc+XG4gICAgICAuYXR0cignZmlsbC1vcGFjaXR5JywgMSlcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4gYHRyYW5zbGF0ZSgke2QueCArIDF9LCR7ZC55ICsgMX0pYCk7XG4gICAgLy8gLmF0dHIoJ2ZvbnQtc2l6ZScsIChkKSA9PiB7XG4gICAgLy8gICBsZXQgc2l6ZSA9IGQuciAvIDUuNTtcbiAgICAvLyAgIHNpemUgKj0gMTtcbiAgICAvLyAgIHNpemUgKz0gMTtcbiAgICAvLyAgIHJldHVybiBgJHtNYXRoLnJvdW5kKHNpemUpfXB4YDtcbiAgICAvLyB9KTtcblxuICAgIC8vIGNsZWFyIGFsbCBleGlzdGluZyBjbG9zZSBpY29ucyBmcm9tIHRoZSBidWJibGVzXG4gICAgbGVhZi5zZWxlY3RBbGwoJy5jbG9zZS1pY29uJykucmVtb3ZlKCk7XG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICBsZWFmIC8vIHJlbmRlciBvbmx5IHRoZSBuZWNlc3NhcnkgY2xvc2UgaWNvbnNcbiAgICAgICAgLmZpbHRlcigoZCkgPT4gc2VsZWN0ZWQuaW5jbHVkZXMoZC5kYXRhLmVudGl0eS5pZCkpXG4gICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnY2xvc2UtaWNvbicpXG4gICAgICAgIC5hdHRyKCdkJywgY2xvc2VJY29uUGF0aClcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnI2ZmZicpXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4ge1xuICAgICAgICAgIGlmIChkLnIgLyA0ID4gMykge1xuICAgICAgICAgICAgcmV0dXJuIGBzY2FsZSguMDgpIHRyYW5zbGF0ZSgwLCAke2QuciAqIDEwIC0gODB9KWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAnc2NhbGUoLjA4KSc7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxlYWZcbiAgICAgIC5zZWxlY3QoJ2NpcmNsZScpXG4gICAgICAudHJhbnNpdGlvbih0KSAvLyB1cGRhdGUgdHJhbnNpdGlvbiBvbiA8Y2lyY2xlPlxuICAgICAgLmF0dHIoJ2ZpbGwtb3BhY2l0eScsIDEpXG4gICAgICAuYXR0cigncicsIChkKSA9PiBkLnIpO1xuXG4gICAgLy8gZyByZXByZXNlbnRzIGEgXCJncm91cCBvZiBzdmcgaXRlbXNcIlxuICAgIC8vIGl0ZW1zIGdyb3VwZWQgdG9nZXRoZXIgY2FuIGJlIGFkZGVkIC8gcmVtb3ZlZCAvIHNjYWxlZCB0b2dldGhlclxuICAgIGNvbnN0IGcgPSBsZWFmLmVudGVyKCkuYXBwZW5kKCdnJyk7XG5cbiAgICBnLmF0dHIoJ3RyYW5zZm9ybScsIChkKSA9PiBgdHJhbnNsYXRlKCR7ZC54ICsgMX0sJHtkLnkgKyAxfSlgKVxuICAgICAgLmF0dHIoJ2N1cnNvcicsICdwb2ludGVyJylcbiAgICAgIC5vbignY2xpY2snLCAoZXZlbnQsIGQpID0+IHtcbiAgICAgICAgdGhpcy5vbkNsaWNrKGQuZGF0YS5lbnRpdHkuaWQpO1xuICAgICAgfSlcbiAgICAgIC5hdHRyKCdpZCcsIChkKSA9PiBgZ18ke2QuZGF0YS5lbnRpdHkuaWR9YClcbiAgICAgIC5hcHBlbmQoJ2NpcmNsZScpXG4gICAgICAuYXR0cignaWQnLCAoZCkgPT4geyBkLmxlYWZVaWQgPSBkLmRhdGEuZW50aXR5LmlkOyB9KVxuICAgICAgLmF0dHIoJ3InLCAwKVxuICAgICAgLnRyYW5zaXRpb24odCkgLy8gZW50ZXIoKSB0cmFuc2l0aW9uIG9uIDxjaXJjbGU+XG4gICAgICAuYXR0cignZmlsbC1vcGFjaXR5JywgMSlcbiAgICAgIC5hdHRyKCdmaWxsJywgKGQpID0+IGNvbG9yTWFwKGQuZGF0YS5lbnRpdHkudHlwZU9mRW50aXR5KSlcbiAgICAgIC5hdHRyKCdyJywgKGQpID0+IGQucik7XG5cbiAgICAvLyBwcmV2ZW50cyB0aGUgdGV4dCBmcm9tIG92ZXJmbG93aW5nIHRoZSBidWJibGVcbiAgICBnLmFwcGVuZCgnY2xpcFBhdGgnKVxuICAgICAgLmF0dHIoJ2lkJywgKGQpID0+IHsgZC5jbGlwVWlkID0gYENsaXAtJHtkLmRhdGEuZW50aXR5LmlkfWA7IH0pXG4gICAgICAuYXBwZW5kKCd1c2UnKVxuICAgICAgLmF0dHIoJ3hsaW5rOmhyZWYnLCAoZCkgPT4gZC5sZWFmVWlkLmhyZWYpO1xuXG4gICAgLyoqIE5FVyBURVhUIExPR0lDICovXG4gICAgZy5hcHBlbmQoJ3RleHQnKVxuICAgICAgLmF0dHIoJ2ZvbnQtZmFtaWx5JywgKCkgPT4ge1xuICAgICAgICBpZiAoZm9udFJlbmRlcmluZyAmJiBmb250UmVuZGVyaW5nLmxhYmVsICYmIGZvbnRSZW5kZXJpbmcubGFiZWwuZmFtaWx5KSB7XG4gICAgICAgICAgcmV0dXJuIGZvbnRSZW5kZXJpbmcubGFiZWwuZmFtaWx5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnaW5oZXJpdCc7XG4gICAgICB9KVxuICAgICAgLmF0dHIoJ2ZvbnQtd2VpZ2h0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZm9udFJlbmRlcmluZyAmJiBmb250UmVuZGVyaW5nICYmIGZvbnRSZW5kZXJpbmcubGFiZWwgJiYgZm9udFJlbmRlcmluZy5sYWJlbC53ZWlnaHQpIHtcbiAgICAgICAgICByZXR1cm4gZm9udFJlbmRlcmluZy5sYWJlbC53ZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdpbmhlcml0JztcbiAgICAgIH0pXG4gICAgICAuYXR0cignZmlsbCcsICd3aGl0ZScpXG4gICAgICAuZWFjaCgoZDogQ2lyY2xlTm9kZSkgPT4ge1xuICAgICAgICAvLyBDYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIGxhYmVsXG4gICAgICAgIGQuZGF0YS5lbnRpdHkubGFiZWwgPSBkLmRhdGEuZW50aXR5XG4gICAgICAgICAgLmxhYmVsLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgKyBkLmRhdGEuZW50aXR5LmxhYmVsLnNsaWNlKDEpO1xuICAgICAgICAvLyAxLiBpbml0aWFsaXplIG1ldGEgb2JqZWN0XG4gICAgICAgIGlmICghZC5fbWV0YSB8fCB0eXBlb2YgZC5fbWV0YSAhPT0gJ29iamVjdCcpIGQuX21ldGEgPSB7fTtcbiAgICAgICAgLy8gMi4gdG9rZW5pemUgbGFiZWwgJiBjb3VudCBpbnRvIHdvcmRzXG4gICAgICAgIGNvbnN0IHdvcmRzID0gZC5kYXRhLmVudGl0eS5sYWJlbC5zcGxpdCgvW1xcc10rL2cpOyAvLyBUbyBoeXBoZW5hdGU6IC9cXHMrfCg/PD0tKS9cbiAgICAgICAgLy8gVHJ1bmNhdGUgd2l0aCBlbGxpcHNpcyBpZiB0aGUgbGFiZWwgaXMgbG9uZ2VyIHRoYW4gdGhlIHRocmVzaG9sZFxuICAgICAgICBpZiAod29yZHMubGVuZ3RoID4gZWxsaXBzaXNUaHJlc2hvbGQpIHtcbiAgICAgICAgICB3b3Jkcy5zcGxpY2UoZWxsaXBzaXNUaHJlc2hvbGQsIHdvcmRzLmxlbmd0aCAtIGVsbGlwc2lzVGhyZXNob2xkKTtcbiAgICAgICAgICB3b3Jkc1tlbGxpcHNpc1RocmVzaG9sZCAtIDFdICs9ICfigKYnO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCBjb3VudGVyXG4gICAgICAgIGlmIChkLnIgLyA0ID4gMi41KSB7XG4gICAgICAgICAgLy8gc2hvdyB0ZXh0IHRocmVzaG9sZFxuICAgICAgICAgIGlmICghd29yZHNbd29yZHMubGVuZ3RoIC0gMV0pIHdvcmRzLnBvcCgpO1xuICAgICAgICAgIGlmICghd29yZHNbMF0pIHdvcmRzLnNoaWZ0KCk7XG4gICAgICAgIH0gaWYgKGQuciAvIDQgPiA0LjUpIHtcbiAgICAgICAgICAvLyBzaG93IG51bWJlciB0aHJlc2hvbGRcbiAgICAgICAgICB3b3Jkcy5wdXNoKGAke2QuZGF0YS5jb3VudH1gKTtcbiAgICAgICAgfVxuICAgICAgICBkLl9tZXRhLndvcmRzID0gd29yZHM7XG4gICAgICAgIGQuX21ldGEubGluZUhlaWdodCA9IGRlZmF1bHRMaW5lSGVpZ2h0O1xuICAgICAgICBjb25zdCB0YXJnZXRXaWR0aCA9IE1hdGguc3FydChcbiAgICAgICAgICB0aGlzLm1lYXN1cmVXaWR0aChkLl9tZXRhLndvcmRzLmpvaW4oJyAnKS50cmltKCkpICogZGVmYXVsdExpbmVIZWlnaHRcbiAgICAgICAgKTtcbiAgICAgICAgLy8gMy4gYnVpbGQgbGluZXMgb2YgdGV4dFxuICAgICAgICBkLl9tZXRhLmxpbmVzID0gW107XG4gICAgICAgIGxldCBsaW5lO1xuICAgICAgICBsZXQgbGluZVdpZHRoMCA9IEluZmluaXR5O1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbiA9IGQuX21ldGEud29yZHMubGVuZ3RoOyBpIDwgbjsgaSArPSAxKSB7XG4gICAgICAgICAgY29uc3QgbGluZVRleHQxID0gKGxpbmUgPyBgJHtsaW5lLnRleHR9IGAgOiAnJykgKyB3b3Jkc1tpXTtcbiAgICAgICAgICBjb25zdCBsaW5lV2lkdGgxID0gdGhpcy5tZWFzdXJlV2lkdGgobGluZVRleHQxKTtcbiAgICAgICAgICBpZiAoKGxpbmVXaWR0aDAgKyBsaW5lV2lkdGgxKSAvIDIgPCB0YXJnZXRXaWR0aCAmJiBpICE9PSBuIC0gMSkge1xuICAgICAgICAgICAgbGluZS53aWR0aCA9IGxpbmVXaWR0aDA7XG4gICAgICAgICAgICBsaW5lV2lkdGgwID0gbGluZVdpZHRoMTtcbiAgICAgICAgICAgIGxpbmUudGV4dCA9IGxpbmVUZXh0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgbGluZSBpcyB0b28gbG9uZyBvciB0aGlzIGlzIHRoZSBsYXN0IGxpbmUgKGNvdW50ZXIpLCBwdXNoIHRvIG5leHQgbGluZVxuICAgICAgICAgICAgbGluZVdpZHRoMCA9IHRoaXMubWVhc3VyZVdpZHRoKHdvcmRzW2ldKTtcbiAgICAgICAgICAgIGxpbmUgPSB7IHdpZHRoOiBsaW5lV2lkdGgwLCB0ZXh0OiB3b3Jkc1tpXSB9O1xuICAgICAgICAgICAgZC5fbWV0YS5saW5lcy5wdXNoKGxpbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyA0LiBjb21wdXRlIHRoZSBib3VuZGluZyByYWRpdXNcbiAgICAgICAgbGV0IHJhZGl1cyA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBuID0gZC5fbWV0YS5saW5lcy5sZW5ndGg7IGkgPCBuOyBpICs9IDEpIHtcbiAgICAgICAgICBjb25zdCBkeSA9IChNYXRoLmFicyhpIC0gbiAvIDIpICsgMC44KSAqIGQuX21ldGEubGluZUhlaWdodDtcbiAgICAgICAgICBjb25zdCBkeCA9IGQuX21ldGEubGluZXNbaV0ud2lkdGggLyAyO1xuICAgICAgICAgIHJhZGl1cyA9IE1hdGgubWF4KHJhZGl1cywgTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZC5fbWV0YS50ZXh0UmFkaXVzID0gcmFkaXVzO1xuICAgICAgICByZXR1cm4gZDtcbiAgICAgIH0pXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+IHtcbiAgICAgICAgY29uc3Qgc2NhbGUgPSAoKGQuciAqIDAuOCkgLyBkLl9tZXRhLnRleHRSYWRpdXMpICogdGV4dFNjYWxpbmdGYWN0b3I7XG4gICAgICAgIHJldHVybiBgc2NhbGUoJHtzY2FsZX0pYDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChkKSA9PiAoZC5yIC8gNCA+IDIuNSkpXG4gICAgICAuc2VsZWN0QWxsKCd0c3BhbicpXG4gICAgICAuZGF0YSgoZCkgPT4gZC5fbWV0YS5saW5lcylcbiAgICAgIC5lbnRlcigpXG4gICAgICAuYXBwZW5kKCd0c3BhbicpXG4gICAgICAuYXR0cigneCcsIDApXG4gICAgICAuYXR0cigneScsIChkLCBpLCBuKSA9PiAoaSAtIG4ubGVuZ3RoIC8gMiArIDAuOCkgKiBkZWZhdWx0TGluZUhlaWdodClcbiAgICAgIC5hdHRyKCdjbGFzcycsIChkLCBpLCBuKSA9PiAoXG4gICAgICAgIC8vIGlmIGl0J3MgdGhlIGxhc3QgbGFiZWwgYW5kIGEgdmFsaWQgbnVtYmVyLCBtYXJrIGFzIGNvdW50ZXJcbiAgICAgICAgaSA9PT0gbi5sZW5ndGggLSAxICYmIHRoaXMuaXNWYWxpZE51bWJlcihkLnRleHQpID8gJ2xhYmVsLWNvdW50ZXInIDogJ2xhYmVsLXRleHQnXG4gICAgICApKVxuICAgICAgLnRleHQoKGQpID0+IGQudGV4dClcbiAgICAgIC5hdHRyKCdmaWxsLW9wYWNpdHknLCAwKVxuICAgICAgLnRyYW5zaXRpb24odCkgLy8gZW50ZXIoKSB0cmFuc2l0aW9uIG9uIDx0c3Bhbj5cbiAgICAgIC5hdHRyKCdmaWxsLW9wYWNpdHknLCAxKTtcblxuICAgIC8vIGN1c3RvbSBzdHlsZSBmb3IgdGhlIGNvdW50ZXJcbiAgICBnLnNlbGVjdEFsbCgndHNwYW4ubGFiZWwtY291bnRlcicpXG4gICAgICAuYXR0cignZm9udC1mYW1pbHknLCAoKSA9PiB7XG4gICAgICAgIGlmIChmb250UmVuZGVyaW5nICYmIGZvbnRSZW5kZXJpbmcuY291bnRlciAmJiBmb250UmVuZGVyaW5nLmNvdW50ZXIuZmFtaWx5KSB7XG4gICAgICAgICAgcmV0dXJuIGZvbnRSZW5kZXJpbmcuY291bnRlci5mYW1pbHk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdpbmhlcml0JztcbiAgICAgIH0pXG4gICAgICAuYXR0cignZm9udC13ZWlnaHQnLCAoKSA9PiB7XG4gICAgICAgIGlmIChmb250UmVuZGVyaW5nICYmIGZvbnRSZW5kZXJpbmcuY291bnRlciAmJiBmb250UmVuZGVyaW5nLmNvdW50ZXIud2VpZ2h0KSB7XG4gICAgICAgICAgcmV0dXJuIGZvbnRSZW5kZXJpbmcuY291bnRlci53ZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdpbmhlcml0JztcbiAgICAgIH0pO1xuXG4gICAgbGVhZlxuICAgICAgLmV4aXQoKSAvLyBFWElUIENZQ0xFXG4gICAgICAucmVtb3ZlKCk7XG5cbiAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIGcuZmlsdGVyKChkKSA9PiBzZWxlY3RlZC5pbmNsdWRlcyhkLmxlYWZVaWQpKSAvLyBhcHBlbmQgJ1gnIGljb24gLy8gb25seSBmb3Igc2VsZWN0ZWQgYnViYmxlc1xuICAgICAgICAuYXBwZW5kKCdwYXRoJylcbiAgICAgICAgLmF0dHIoJ2QnLCBjbG9zZUljb25QYXRoKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnY2xvc2UtaWNvbicpXG4gICAgICAgIC5hdHRyKCdmaWxsJywgKGQpID0+IHtcbiAgICAgICAgICBpZiAoZC5yIC8gNCA+IDIuNSkge1xuICAgICAgICAgICAgcmV0dXJuICcjZmZmJztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCc7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4ge1xuICAgICAgICAgIGlmIChkLnIgLyA0ID4gMykge1xuICAgICAgICAgICAgcmV0dXJuIGBzY2FsZSguMDgpIHRyYW5zbGF0ZSgwLCAke2QuciAqIDEwIC0gODB9KWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAnc2NhbGUoLjA4KSc7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGNvbW11bmljYXRlIGVuZCBvZiBkcmF3XG4gICAgdGhpcy5lbWl0KCdkM2VuZCcsIGRhdGEpO1xuICB9O1xufVxuIiwiPGRpdiAqbmdJZj1cImRhdGFcIiBjbGFzcz1cIm43LWJ1YmJsZS1jaGFydCB7eyBkYXRhLmNsYXNzZXMgfHwgJycgfX1cIj5cbiAgICA8c3ZnICNidWJibGVDaGFydCBpZD1cInt7ZGF0YS5jb250YWluZXJJZH19XCI+PC9zdmc+XG48L2Rpdj4iXX0=
@@ -1,26 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "../anchor-wrapper/anchor-wrapper";
5
- import * as i3 from "../icon/icon";
6
- import * as i4 from "../loader/loader";
7
- export class ButtonComponent {
8
- onClick(value) {
9
- if (!this.emit)
10
- return;
11
- if (this.data.isDisabled)
12
- return;
13
- this.emit('click', value);
14
- }
15
- }
16
- ButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17
- ButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ButtonComponent, selector: "n7-button", inputs: { data: "data", emit: "emit" }, ngImport: i0, template: "<ng-container *ngIf=\"data && data.anchor\">\n <n7-anchor-wrapper [data]=\"data.anchor\"\n (clicked)=\"onClick($event)\">\n <button class=\"n7-btn\"\n [ngClass]=\"data.classes\"\n [disabled]=\"data.isDisabled\"\n [class.is-disabled]=\"data.isDisabled\"\n [class.is-loading]=\"data.isLoading\">\n <!-- loader -->\n <n7-loader [data]=\"{classes: 'n7-btn__loader'}\"\n *ngIf=\"data.isLoading\"></n7-loader>\n <!-- icon left -->\n <n7-icon [data]=\"data.iconLeft\"\n *ngIf=\"data.iconLeft\">\n </n7-icon>\n <!-- button label -->\n <span *ngIf=\"data.text\"\n class=\"n7-btn__text\">{{ data.text }}</span>\n <!-- icon right -->\n <n7-icon [data]=\"data.iconRight\"\n *ngIf=\"data.iconRight\">\n </n7-icon>\n </button>\n </n7-anchor-wrapper>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.AnchorWrapperComponent, selector: "n7-anchor-wrapper", inputs: ["data", "classes"], outputs: ["clicked"] }, { kind: "component", type: i3.IconComponent, selector: "n7-icon", inputs: ["data", "emit"] }, { kind: "component", type: i4.LoaderComponent, selector: "n7-loader", inputs: ["data"] }] });
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonComponent, decorators: [{
19
- type: Component,
20
- args: [{ selector: 'n7-button', template: "<ng-container *ngIf=\"data && data.anchor\">\n <n7-anchor-wrapper [data]=\"data.anchor\"\n (clicked)=\"onClick($event)\">\n <button class=\"n7-btn\"\n [ngClass]=\"data.classes\"\n [disabled]=\"data.isDisabled\"\n [class.is-disabled]=\"data.isDisabled\"\n [class.is-loading]=\"data.isLoading\">\n <!-- loader -->\n <n7-loader [data]=\"{classes: 'n7-btn__loader'}\"\n *ngIf=\"data.isLoading\"></n7-loader>\n <!-- icon left -->\n <n7-icon [data]=\"data.iconLeft\"\n *ngIf=\"data.iconLeft\">\n </n7-icon>\n <!-- button label -->\n <span *ngIf=\"data.text\"\n class=\"n7-btn__text\">{{ data.text }}</span>\n <!-- icon right -->\n <n7-icon [data]=\"data.iconRight\"\n *ngIf=\"data.iconRight\">\n </n7-icon>\n </button>\n </n7-anchor-wrapper>\n</ng-container>\n" }]
21
- }], propDecorators: { data: [{
22
- type: Input
23
- }], emit: [{
24
- type: Input
25
- }] } });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHYtY29tcG9uZW50cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2J1dHRvbi9idXR0b24udHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kdi1jb21wb25lbnRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFjakQsTUFBTSxPQUFPLGVBQWU7SUFLMUIsT0FBTyxDQUFDLEtBQUs7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ3ZCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDOzs0R0FUVSxlQUFlO2dHQUFmLGVBQWUseUZDZDVCLHVoQ0F5QkE7MkZEWGEsZUFBZTtrQkFKM0IsU0FBUzsrQkFDRSxXQUFXOzhCQUlaLElBQUk7c0JBQVosS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCdXR0b24sIEljb24gfSBmcm9tICcuLi8uLi9zaGFyZWQtaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnV0dG9uRGF0YSBleHRlbmRzIEJ1dHRvbiB7XG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICBpY29uTGVmdD86IEljb247XG4gIGljb25SaWdodD86IEljb247XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ243LWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24uaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQnV0dG9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZGF0YTogQnV0dG9uRGF0YTtcblxuICBASW5wdXQoKSBlbWl0OiAodHlwZTogc3RyaW5nLCBwYXlsb2FkPzogdW5rbm93bikgPT4gdm9pZDtcblxuICBvbkNsaWNrKHZhbHVlKSB7XG4gICAgaWYgKCF0aGlzLmVtaXQpIHJldHVybjtcbiAgICBpZiAodGhpcy5kYXRhLmlzRGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLmVtaXQoJ2NsaWNrJywgdmFsdWUpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YSAmJiBkYXRhLmFuY2hvclwiPlxuICAgIDxuNy1hbmNob3Itd3JhcHBlciBbZGF0YV09XCJkYXRhLmFuY2hvclwiXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cIm9uQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibjctYnRuXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkYXRhLmNsYXNzZXNcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkYXRhLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1kaXNhYmxlZF09XCJkYXRhLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1sb2FkaW5nXT1cImRhdGEuaXNMb2FkaW5nXCI+XG4gICAgICAgICAgICA8IS0tIGxvYWRlciAtLT5cbiAgICAgICAgICAgIDxuNy1sb2FkZXIgW2RhdGFdPVwie2NsYXNzZXM6ICduNy1idG5fX2xvYWRlcid9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmlzTG9hZGluZ1wiPjwvbjctbG9hZGVyPlxuICAgICAgICAgICAgPCEtLSBpY29uIGxlZnQgLS0+XG4gICAgICAgICAgICA8bjctaWNvbiBbZGF0YV09XCJkYXRhLmljb25MZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5pY29uTGVmdFwiPlxuICAgICAgICAgICAgPC9uNy1pY29uPlxuICAgICAgICAgICAgPCEtLSBidXR0b24gbGFiZWwgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGEudGV4dFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm43LWJ0bl9fdGV4dFwiPnt7IGRhdGEudGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwhLS0gaWNvbiByaWdodCAtLT5cbiAgICAgICAgICAgIDxuNy1pY29uIFtkYXRhXT1cImRhdGEuaWNvblJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5pY29uUmlnaHRcIj5cbiAgICAgICAgICAgIDwvbjctaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uNy1hbmNob3Itd3JhcHBlcj5cbjwvbmctY29udGFpbmVyPlxuIl19