@tolle_/tolle-ui 18.2.29 → 18.2.30

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 (279) hide show
  1. package/esm2022/lib/accordion-item.component.mjs +5 -11
  2. package/esm2022/lib/accordion.component.mjs +4 -9
  3. package/esm2022/lib/alert-dialog-dynamic.component.mjs +5 -10
  4. package/esm2022/lib/alert-dialog.component.mjs +44 -59
  5. package/esm2022/lib/alert.component.mjs +5 -11
  6. package/esm2022/lib/aspect-ratio.component.mjs +119 -0
  7. package/esm2022/lib/attachment.component.mjs +334 -0
  8. package/esm2022/lib/avatar-fallback.component.mjs +3 -3
  9. package/esm2022/lib/avatar.component.mjs +4 -9
  10. package/esm2022/lib/badge.component.mjs +4 -9
  11. package/esm2022/lib/breadcrumb-item.component.mjs +3 -3
  12. package/esm2022/lib/breadcrumb-link.component.mjs +3 -3
  13. package/esm2022/lib/breadcrumb-separator.component.mjs +3 -3
  14. package/esm2022/lib/breadcrumb.component.mjs +3 -3
  15. package/esm2022/lib/bubble.component.mjs +301 -0
  16. package/esm2022/lib/button.component.mjs +5 -11
  17. package/esm2022/lib/calendar.component.mjs +5 -11
  18. package/esm2022/lib/card.component.mjs +14 -43
  19. package/esm2022/lib/carousel/carousel.component.mjs +5 -12
  20. package/esm2022/lib/chain-of-thought.component.mjs +380 -0
  21. package/esm2022/lib/chart-pie.component.mjs +386 -0
  22. package/esm2022/lib/chart.component.mjs +1146 -0
  23. package/esm2022/lib/chart.service.mjs +555 -0
  24. package/esm2022/lib/checkbox.component.mjs +5 -11
  25. package/esm2022/lib/checkpoint.component.mjs +134 -0
  26. package/esm2022/lib/collapsible.component.mjs +4 -11
  27. package/esm2022/lib/combobox.component.mjs +372 -0
  28. package/esm2022/lib/command-dialog.component.mjs +164 -0
  29. package/esm2022/lib/command.component.mjs +514 -0
  30. package/esm2022/lib/command.service.mjs +130 -0
  31. package/esm2022/lib/confirmation.component.mjs +219 -0
  32. package/esm2022/lib/context-menu-trigger.directive.mjs +36 -0
  33. package/esm2022/lib/context-menu.component.mjs +460 -0
  34. package/esm2022/lib/context-menu.service.mjs +121 -0
  35. package/esm2022/lib/context.component.mjs +377 -0
  36. package/esm2022/lib/conversation.component.mjs +442 -0
  37. package/esm2022/lib/country-selector.component.mjs +5 -11
  38. package/esm2022/lib/data-table.component.mjs +59 -12
  39. package/esm2022/lib/date-picker.component.mjs +251 -198
  40. package/esm2022/lib/date-range-picker.component.mjs +224 -116
  41. package/esm2022/lib/date-time-picker.component.mjs +506 -0
  42. package/esm2022/lib/direction.component.mjs +79 -0
  43. package/esm2022/lib/dropdown-item.component.mjs +3 -3
  44. package/esm2022/lib/dropdown-label.component.mjs +3 -3
  45. package/esm2022/lib/dropdown-menu.component.mjs +3 -3
  46. package/esm2022/lib/dropdown-separator.component.mjs +3 -3
  47. package/esm2022/lib/dropdown-trigger.directive.mjs +6 -4
  48. package/esm2022/lib/empty-state.component.mjs +4 -9
  49. package/esm2022/lib/field.component.mjs +394 -0
  50. package/esm2022/lib/hover-card.component.mjs +6 -16
  51. package/esm2022/lib/inline-citation.component.mjs +263 -0
  52. package/esm2022/lib/input-group.component.mjs +418 -0
  53. package/esm2022/lib/input.component.mjs +5 -11
  54. package/esm2022/lib/item.component.mjs +243 -0
  55. package/esm2022/lib/kbd.component.mjs +82 -0
  56. package/esm2022/lib/label.component.mjs +4 -9
  57. package/esm2022/lib/marker.component.mjs +135 -0
  58. package/esm2022/lib/masked-input.component.mjs +5 -11
  59. package/esm2022/lib/menubar.component.mjs +683 -0
  60. package/esm2022/lib/message-scroller.component.mjs +353 -0
  61. package/esm2022/lib/message-scroller.service.mjs +157 -0
  62. package/esm2022/lib/message.component.mjs +228 -0
  63. package/esm2022/lib/model-selector.component.mjs +310 -0
  64. package/esm2022/lib/multi-select.component.mjs +155 -72
  65. package/esm2022/lib/native-select.component.mjs +201 -0
  66. package/esm2022/lib/navigation-menu.component.mjs +642 -0
  67. package/esm2022/lib/otp-group.component.mjs +3 -3
  68. package/esm2022/lib/otp-slot.component.mjs +4 -9
  69. package/esm2022/lib/otp.component.mjs +5 -11
  70. package/esm2022/lib/pagination.component.mjs +7 -10
  71. package/esm2022/lib/plan.component.mjs +335 -0
  72. package/esm2022/lib/popover-content.component.mjs +4 -9
  73. package/esm2022/lib/popover.component.mjs +15 -13
  74. package/esm2022/lib/progress.component.mjs +4 -9
  75. package/esm2022/lib/prompt-input.component.mjs +526 -0
  76. package/esm2022/lib/queue.component.mjs +280 -0
  77. package/esm2022/lib/radio-group.component.mjs +6 -13
  78. package/esm2022/lib/radio-item.component.mjs +4 -9
  79. package/esm2022/lib/range-calendar.component.mjs +5 -11
  80. package/esm2022/lib/reasoning.component.mjs +335 -0
  81. package/esm2022/lib/resizable.component.mjs +219 -0
  82. package/esm2022/lib/segment.component.mjs +17 -7
  83. package/esm2022/lib/select-group.component.mjs +4 -8
  84. package/esm2022/lib/select-item.component.mjs +4 -9
  85. package/esm2022/lib/select-separator.component.mjs +4 -8
  86. package/esm2022/lib/select.component.mjs +133 -49
  87. package/esm2022/lib/separator.component.mjs +4 -9
  88. package/esm2022/lib/sheet.component.mjs +38 -56
  89. package/esm2022/lib/shimmer.component.mjs +84 -0
  90. package/esm2022/lib/sidebar.component.mjs +11 -1
  91. package/esm2022/lib/skeleton.component.mjs +4 -9
  92. package/esm2022/lib/sources.component.mjs +452 -0
  93. package/esm2022/lib/spinner.component.mjs +68 -0
  94. package/esm2022/lib/suggestion.component.mjs +207 -0
  95. package/esm2022/lib/switch.component.mjs +5 -11
  96. package/esm2022/lib/table.component.mjs +213 -0
  97. package/esm2022/lib/tabs.component.mjs +4 -11
  98. package/esm2022/lib/tag-input.component.mjs +5 -11
  99. package/esm2022/lib/task.component.mjs +359 -0
  100. package/esm2022/lib/textarea.component.mjs +5 -11
  101. package/esm2022/lib/theme.service.mjs +17 -6
  102. package/esm2022/lib/time-picker.component.mjs +923 -0
  103. package/esm2022/lib/toast.service.mjs +3 -2
  104. package/esm2022/lib/toaster.component.mjs +76 -39
  105. package/esm2022/lib/toggle-group.component.mjs +4 -9
  106. package/esm2022/lib/toggle.component.mjs +5 -11
  107. package/esm2022/lib/tool.component.mjs +462 -0
  108. package/esm2022/lib/typography.component.mjs +83 -0
  109. package/esm2022/lib/utils/color.mjs +140 -19
  110. package/esm2022/public-api.mjs +61 -1
  111. package/fesm2022/tolle-ui.mjs +16453 -1024
  112. package/fesm2022/tolle-ui.mjs.map +1 -1
  113. package/lib/alert-dialog.component.d.ts +10 -2
  114. package/lib/aspect-ratio.component.d.ts +20 -0
  115. package/lib/attachment.component.d.ts +101 -0
  116. package/lib/bubble.component.d.ts +112 -0
  117. package/lib/chain-of-thought.component.d.ts +166 -0
  118. package/lib/chart-pie.component.d.ts +108 -0
  119. package/lib/chart.component.d.ts +369 -0
  120. package/lib/chart.service.d.ts +222 -0
  121. package/lib/checkpoint.component.d.ts +51 -0
  122. package/lib/combobox.component.d.ts +90 -0
  123. package/lib/command-dialog.component.d.ts +53 -0
  124. package/lib/command.component.d.ts +189 -0
  125. package/lib/command.service.d.ts +67 -0
  126. package/lib/confirmation.component.d.ts +70 -0
  127. package/lib/context-menu-trigger.directive.d.ts +12 -0
  128. package/lib/context-menu.component.d.ts +41 -0
  129. package/lib/context-menu.service.d.ts +38 -0
  130. package/lib/context.component.d.ts +134 -0
  131. package/lib/conversation.component.d.ts +165 -0
  132. package/lib/data-table.component.d.ts +26 -1
  133. package/lib/date-picker.component.d.ts +72 -11
  134. package/lib/date-range-picker.component.d.ts +63 -6
  135. package/lib/date-time-picker.component.d.ts +119 -0
  136. package/lib/direction.component.d.ts +45 -0
  137. package/lib/field.component.d.ts +201 -0
  138. package/lib/inline-citation.component.d.ts +103 -0
  139. package/lib/input-group.component.d.ts +150 -0
  140. package/lib/item.component.d.ts +154 -0
  141. package/lib/kbd.component.d.ts +50 -0
  142. package/lib/marker.component.d.ts +58 -0
  143. package/lib/menubar.component.d.ts +247 -0
  144. package/lib/message-scroller.component.d.ts +159 -0
  145. package/lib/message-scroller.service.d.ts +73 -0
  146. package/lib/message.component.d.ts +128 -0
  147. package/lib/model-selector.component.d.ts +103 -0
  148. package/lib/multi-select.component.d.ts +66 -14
  149. package/lib/native-select.component.d.ts +57 -0
  150. package/lib/navigation-menu.component.d.ts +230 -0
  151. package/lib/plan.component.d.ts +120 -0
  152. package/lib/popover.component.d.ts +1 -0
  153. package/lib/prompt-input.component.d.ts +194 -0
  154. package/lib/queue.component.d.ts +106 -0
  155. package/lib/reasoning.component.d.ts +127 -0
  156. package/lib/resizable.component.d.ts +43 -0
  157. package/lib/segment.component.d.ts +13 -3
  158. package/lib/select.component.d.ts +37 -5
  159. package/lib/sheet.component.d.ts +3 -0
  160. package/lib/shimmer.component.d.ts +38 -0
  161. package/lib/sidebar.component.d.ts +2 -0
  162. package/lib/sources.component.d.ts +156 -0
  163. package/lib/spinner.component.d.ts +29 -0
  164. package/lib/suggestion.component.d.ts +96 -0
  165. package/lib/table.component.d.ts +106 -0
  166. package/lib/task.component.d.ts +151 -0
  167. package/lib/theme.service.d.ts +9 -0
  168. package/lib/time-picker.component.d.ts +243 -0
  169. package/lib/toast.service.d.ts +3 -1
  170. package/lib/toaster.component.d.ts +26 -9
  171. package/lib/tool.component.d.ts +158 -0
  172. package/lib/typography.component.d.ts +32 -0
  173. package/lib/utils/color.d.ts +19 -5
  174. package/package.json +1 -1
  175. package/public-api.d.ts +50 -0
  176. package/registry/docs-content.json +8480 -1542
  177. package/registry/llms-full.txt +2679 -319
  178. package/registry/llms.txt +43 -4
  179. package/registry/manifest.json +9090 -1742
  180. package/registry/r/accordion-item.json +1 -1
  181. package/registry/r/accordion.json +1 -1
  182. package/registry/r/alert-dialog-dynamic.json +1 -1
  183. package/registry/r/alert-dialog.json +1 -1
  184. package/registry/r/alert.json +1 -1
  185. package/registry/r/attachment.json +23 -0
  186. package/registry/r/avatar-fallback.json +1 -1
  187. package/registry/r/avatar.json +1 -1
  188. package/registry/r/badge.json +1 -1
  189. package/registry/r/breadcrumb-item.json +1 -1
  190. package/registry/r/breadcrumb-link.json +1 -1
  191. package/registry/r/breadcrumb-separator.json +1 -1
  192. package/registry/r/breadcrumb.json +1 -1
  193. package/registry/r/bubble.json +23 -0
  194. package/registry/r/button.json +1 -1
  195. package/registry/r/calendar.json +1 -1
  196. package/registry/r/card.json +1 -1
  197. package/registry/r/carousel.json +1 -1
  198. package/registry/r/chain-of-thought.json +23 -0
  199. package/registry/r/chart-pie.json +30 -0
  200. package/registry/r/chart.json +28 -0
  201. package/registry/r/checkbox.json +1 -1
  202. package/registry/r/checkpoint.json +23 -0
  203. package/registry/r/collapsible.json +1 -1
  204. package/registry/r/combobox.json +31 -0
  205. package/registry/r/command-dialog.json +21 -0
  206. package/registry/r/command.json +26 -0
  207. package/registry/r/confirmation.json +23 -0
  208. package/registry/r/context.json +26 -0
  209. package/registry/r/conversation.json +23 -0
  210. package/registry/r/country-selector.json +1 -1
  211. package/registry/r/data-table.json +1 -1
  212. package/registry/r/date-picker.json +4 -4
  213. package/registry/r/date-range-picker.json +3 -3
  214. package/registry/r/date-time-picker.json +28 -0
  215. package/registry/r/direction.json +16 -0
  216. package/registry/r/dropdown-item.json +1 -1
  217. package/registry/r/dropdown-label.json +1 -1
  218. package/registry/r/dropdown-menu.json +1 -1
  219. package/registry/r/dropdown-separator.json +1 -1
  220. package/registry/r/dropdown-trigger.json +1 -1
  221. package/registry/r/empty-state.json +1 -1
  222. package/registry/r/field.json +23 -0
  223. package/registry/r/hover-card.json +1 -1
  224. package/registry/r/inline-citation.json +26 -0
  225. package/registry/r/input-group.json +23 -0
  226. package/registry/r/input.json +1 -1
  227. package/registry/r/item.json +23 -0
  228. package/registry/r/kbd.json +23 -0
  229. package/registry/r/label.json +1 -1
  230. package/registry/r/marker.json +23 -0
  231. package/registry/r/masked-input.json +1 -1
  232. package/registry/r/menubar.json +24 -0
  233. package/registry/r/message-scroller.json +26 -0
  234. package/registry/r/message.json +23 -0
  235. package/registry/r/model-selector.json +32 -0
  236. package/registry/r/multi-select.json +2 -2
  237. package/registry/r/native-select.json +23 -0
  238. package/registry/r/navigation-menu.json +24 -0
  239. package/registry/r/otp-group.json +1 -1
  240. package/registry/r/otp-slot.json +1 -1
  241. package/registry/r/otp.json +1 -1
  242. package/registry/r/pagination.json +3 -2
  243. package/registry/r/plan.json +23 -0
  244. package/registry/r/popover-content.json +1 -1
  245. package/registry/r/popover.json +1 -1
  246. package/registry/r/progress.json +1 -1
  247. package/registry/r/prompt-input.json +23 -0
  248. package/registry/r/queue.json +23 -0
  249. package/registry/r/radio-group.json +1 -1
  250. package/registry/r/radio-item.json +1 -1
  251. package/registry/r/range-calendar.json +1 -1
  252. package/registry/r/reasoning.json +23 -0
  253. package/registry/r/segment.json +1 -1
  254. package/registry/r/select-group.json +1 -1
  255. package/registry/r/select-item.json +1 -1
  256. package/registry/r/select-separator.json +1 -1
  257. package/registry/r/select.json +4 -3
  258. package/registry/r/separator.json +1 -1
  259. package/registry/r/sheet.json +1 -1
  260. package/registry/r/shimmer.json +23 -0
  261. package/registry/r/sidebar.json +1 -1
  262. package/registry/r/skeleton.json +1 -1
  263. package/registry/r/sources.json +23 -0
  264. package/registry/r/spinner.json +23 -0
  265. package/registry/r/suggestion.json +23 -0
  266. package/registry/r/switch.json +1 -1
  267. package/registry/r/table.json +21 -0
  268. package/registry/r/tabs.json +1 -1
  269. package/registry/r/tag-input.json +1 -1
  270. package/registry/r/task.json +23 -0
  271. package/registry/r/textarea.json +1 -1
  272. package/registry/r/time-picker.json +24 -0
  273. package/registry/r/toaster.json +2 -2
  274. package/registry/r/toggle-group.json +1 -1
  275. package/registry/r/toggle.json +1 -1
  276. package/registry/r/tool.json +23 -0
  277. package/registry/r/typography.json +23 -0
  278. package/registry/registry.json +915 -22
  279. package/theme.css +109 -8
@@ -0,0 +1,394 @@
1
+ import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef, inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { cva } from 'class-variance-authority';
4
+ import { cn } from './utils/cn';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ const fieldVariants = cva('group/field flex w-full gap-2 data-[invalid=true]:text-destructive', {
8
+ variants: {
9
+ orientation: {
10
+ vertical: 'flex-col',
11
+ horizontal: 'flex-row items-center justify-between',
12
+ // shadcn uses container queries here, but this preset is Tailwind 3.4 with no
13
+ // container-queries plugin — `@md/...` classes would be silently dropped and the
14
+ // field would never go horizontal. Viewport breakpoints work with the stack we have.
15
+ responsive: 'flex-col md:flex-row md:items-center md:justify-between',
16
+ },
17
+ },
18
+ defaultVariants: { orientation: 'vertical' },
19
+ });
20
+ /**
21
+ * Wraps a label, a control and its help/error text into one accessible form
22
+ * field. Composes *around* the existing controls (`tolle-input`,
23
+ * `tolle-select`, …) — it does not replace them.
24
+ *
25
+ * Use `tolle-item` instead when displaying content rather than a form control.
26
+ * @new
27
+ */
28
+ export class FieldComponent {
29
+ cdr = inject(ChangeDetectorRef);
30
+ /**
31
+ * Angular writes a bound `class` input through its styling path, which does
32
+ * not mark an OnPush component dirty — without this hook the component keeps
33
+ * rendering the class it was born with.
34
+ */
35
+ ngOnChanges() {
36
+ this.cdr.markForCheck();
37
+ }
38
+ /** Layout direction; `responsive` goes horizontal at the `@md` container width. @default 'vertical' */
39
+ orientation = 'vertical';
40
+ /** Marks the field invalid, turning on the destructive styling for descendants. @default false */
41
+ invalid = false;
42
+ /** Extra Tailwind classes merged onto the field via `cn()` (last-wins). */
43
+ class = '';
44
+ get computedClass() {
45
+ return cn(fieldVariants({ orientation: this.orientation }), this.class);
46
+ }
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldComponent, isStandalone: true, selector: "tolle-field", inputs: { orientation: "orientation", invalid: "invalid", class: "class" }, usesOnChanges: true, ngImport: i0, template: `
49
+ <div role="group" [attr.data-invalid]="invalid || null" [class]="computedClass">
50
+ <ng-content></ng-content>
51
+ </div>
52
+ `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldComponent, decorators: [{
55
+ type: Component,
56
+ args: [{ selector: 'tolle-field', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
57
+ <div role="group" [attr.data-invalid]="invalid || null" [class]="computedClass">
58
+ <ng-content></ng-content>
59
+ </div>
60
+ `, styles: [":host{display:block}\n"] }]
61
+ }], propDecorators: { orientation: [{
62
+ type: Input
63
+ }], invalid: [{
64
+ type: Input
65
+ }], class: [{
66
+ type: Input
67
+ }] } });
68
+ /**
69
+ * Label for a field's control. Set `for` to the control's `id` so clicking the
70
+ * label focuses it.
71
+ */
72
+ export class FieldLabelComponent {
73
+ cdr = inject(ChangeDetectorRef);
74
+ /**
75
+ * Angular writes a bound `class` input through its styling path, which does
76
+ * not mark an OnPush component dirty — without this hook the component keeps
77
+ * rendering the class it was born with.
78
+ */
79
+ ngOnChanges() {
80
+ this.cdr.markForCheck();
81
+ }
82
+ /** Id of the control this label describes; wire it to the control's `id`. @default '' */
83
+ for = '';
84
+ /** Appends a required marker (*) after the label text. @default false */
85
+ required = false;
86
+ /** Extra Tailwind classes merged onto the label via `cn()` (last-wins). */
87
+ class = '';
88
+ cn = cn;
89
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
90
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldLabelComponent, isStandalone: true, selector: "tolle-field-label", inputs: { for: "for", required: "required", class: "class" }, usesOnChanges: true, ngImport: i0, template: `
91
+ <label
92
+ [attr.for]="for || null"
93
+ [class]="cn(
94
+ 'flex items-center gap-2 text-sm font-medium leading-none text-foreground',
95
+ 'group-data-[invalid=true]/field:text-destructive',
96
+ 'peer-disabled:cursor-not-allowed peer-disabled:opacity-50',
97
+ class
98
+ )"
99
+ >
100
+ <ng-content></ng-content>
101
+ <span *ngIf="required" class="text-destructive" aria-hidden="true">*</span>
102
+ </label>
103
+ `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
104
+ }
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldLabelComponent, decorators: [{
106
+ type: Component,
107
+ args: [{ selector: 'tolle-field-label', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
108
+ <label
109
+ [attr.for]="for || null"
110
+ [class]="cn(
111
+ 'flex items-center gap-2 text-sm font-medium leading-none text-foreground',
112
+ 'group-data-[invalid=true]/field:text-destructive',
113
+ 'peer-disabled:cursor-not-allowed peer-disabled:opacity-50',
114
+ class
115
+ )"
116
+ >
117
+ <ng-content></ng-content>
118
+ <span *ngIf="required" class="text-destructive" aria-hidden="true">*</span>
119
+ </label>
120
+ `, styles: [":host{display:block}\n"] }]
121
+ }], propDecorators: { for: [{
122
+ type: Input
123
+ }], required: [{
124
+ type: Input
125
+ }], class: [{
126
+ type: Input
127
+ }] } });
128
+ /** Column that groups the control with its description and error text. */
129
+ export class FieldContentComponent {
130
+ cdr = inject(ChangeDetectorRef);
131
+ /**
132
+ * Angular writes a bound `class` input through its styling path, which does
133
+ * not mark an OnPush component dirty — without this hook the component keeps
134
+ * rendering the class it was born with.
135
+ */
136
+ ngOnChanges() {
137
+ this.cdr.markForCheck();
138
+ }
139
+ /** Extra Tailwind classes merged onto the content column via `cn()` (last-wins). */
140
+ class = '';
141
+ cn = cn;
142
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
143
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldContentComponent, isStandalone: true, selector: "tolle-field-content", inputs: { class: "class" }, usesOnChanges: true, ngImport: i0, template: `<div [class]="cn('flex flex-1 flex-col gap-1.5', class)"><ng-content></ng-content></div>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
144
+ }
145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldContentComponent, decorators: [{
146
+ type: Component,
147
+ args: [{ selector: 'tolle-field-content', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `<div [class]="cn('flex flex-1 flex-col gap-1.5', class)"><ng-content></ng-content></div>`, styles: [":host{display:block}\n"] }]
148
+ }], propDecorators: { class: [{
149
+ type: Input
150
+ }] } });
151
+ /**
152
+ * Helper text below a control. Give it an `id` and point the control's
153
+ * `aria-describedby` at it.
154
+ */
155
+ export class FieldDescriptionComponent {
156
+ cdr = inject(ChangeDetectorRef);
157
+ /**
158
+ * Angular writes a bound `class` input through its styling path, which does
159
+ * not mark an OnPush component dirty — without this hook the component keeps
160
+ * rendering the class it was born with.
161
+ */
162
+ ngOnChanges() {
163
+ this.cdr.markForCheck();
164
+ }
165
+ /** Id to reference from the control's `aria-describedby`. @default '' */
166
+ id = '';
167
+ /** Extra Tailwind classes merged onto the description via `cn()` (last-wins). */
168
+ class = '';
169
+ cn = cn;
170
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldDescriptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
171
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldDescriptionComponent, isStandalone: true, selector: "tolle-field-description", inputs: { id: "id", class: "class" }, usesOnChanges: true, ngImport: i0, template: `
172
+ <p [id]="id || null" [class]="cn('text-balance text-xs text-muted-foreground', class)">
173
+ <ng-content></ng-content>
174
+ </p>
175
+ `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
176
+ }
177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldDescriptionComponent, decorators: [{
178
+ type: Component,
179
+ args: [{ selector: 'tolle-field-description', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
180
+ <p [id]="id || null" [class]="cn('text-balance text-xs text-muted-foreground', class)">
181
+ <ng-content></ng-content>
182
+ </p>
183
+ `, styles: [":host{display:block}\n"] }]
184
+ }], propDecorators: { id: [{
185
+ type: Input
186
+ }], class: [{
187
+ type: Input
188
+ }] } });
189
+ /**
190
+ * Error text for a field. Renders nothing when there is no error, so it is safe
191
+ * to leave in the template permanently. Announces via `role="alert"`.
192
+ */
193
+ export class FieldErrorComponent {
194
+ cdr = inject(ChangeDetectorRef);
195
+ /**
196
+ * Angular writes a bound `class` input through its styling path, which does
197
+ * not mark an OnPush component dirty — without this hook the component keeps
198
+ * rendering the class it was born with.
199
+ */
200
+ ngOnChanges() {
201
+ this.cdr.markForCheck();
202
+ }
203
+ /**
204
+ * Validation message(s). Accepts a single string, an array of strings, or an
205
+ * Angular `ValidationErrors`-style object whose values are messages.
206
+ * @default ''
207
+ */
208
+ errors = '';
209
+ /** Id to reference from the control's `aria-describedby`. @default '' */
210
+ id = '';
211
+ /** Extra Tailwind classes merged onto the error text via `cn()` (last-wins). */
212
+ class = '';
213
+ cn = cn;
214
+ /** Normalises the three accepted `errors` shapes to a flat list of strings. */
215
+ get messages() {
216
+ const e = this.errors;
217
+ if (!e)
218
+ return [];
219
+ if (typeof e === 'string')
220
+ return e ? [e] : [];
221
+ if (Array.isArray(e))
222
+ return e.filter(Boolean).map(String);
223
+ return Object.values(e)
224
+ .filter((v) => v !== false && v !== null && v !== undefined)
225
+ .map((v) => (typeof v === 'string' ? v : String(v)));
226
+ }
227
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
228
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldErrorComponent, isStandalone: true, selector: "tolle-field-error", inputs: { errors: "errors", id: "id", class: "class" }, usesOnChanges: true, ngImport: i0, template: `
229
+ <div
230
+ *ngIf="messages.length"
231
+ [id]="id || null"
232
+ role="alert"
233
+ [class]="cn('text-xs font-medium text-destructive', class)"
234
+ >
235
+ <ng-container *ngIf="messages.length === 1">{{ messages[0] }}</ng-container>
236
+ <ul *ngIf="messages.length > 1" class="ml-4 list-disc space-y-0.5">
237
+ <li *ngFor="let message of messages">{{ message }}</li>
238
+ </ul>
239
+ </div>
240
+ `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
241
+ }
242
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldErrorComponent, decorators: [{
243
+ type: Component,
244
+ args: [{ selector: 'tolle-field-error', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
245
+ <div
246
+ *ngIf="messages.length"
247
+ [id]="id || null"
248
+ role="alert"
249
+ [class]="cn('text-xs font-medium text-destructive', class)"
250
+ >
251
+ <ng-container *ngIf="messages.length === 1">{{ messages[0] }}</ng-container>
252
+ <ul *ngIf="messages.length > 1" class="ml-4 list-disc space-y-0.5">
253
+ <li *ngFor="let message of messages">{{ message }}</li>
254
+ </ul>
255
+ </div>
256
+ `, styles: [":host{display:block}\n"] }]
257
+ }], propDecorators: { errors: [{
258
+ type: Input
259
+ }], id: [{
260
+ type: Input
261
+ }], class: [{
262
+ type: Input
263
+ }] } });
264
+ /** Stacks several fields with consistent spacing. */
265
+ export class FieldGroupComponent {
266
+ cdr = inject(ChangeDetectorRef);
267
+ /**
268
+ * Angular writes a bound `class` input through its styling path, which does
269
+ * not mark an OnPush component dirty — without this hook the component keeps
270
+ * rendering the class it was born with.
271
+ */
272
+ ngOnChanges() {
273
+ this.cdr.markForCheck();
274
+ }
275
+ /** Extra Tailwind classes merged onto the group via `cn()` (last-wins). */
276
+ class = '';
277
+ cn = cn;
278
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
279
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldGroupComponent, isStandalone: true, selector: "tolle-field-group", inputs: { class: "class" }, usesOnChanges: true, ngImport: i0, template: `<div [class]="cn('flex w-full flex-col gap-6', class)"><ng-content></ng-content></div>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
280
+ }
281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldGroupComponent, decorators: [{
282
+ type: Component,
283
+ args: [{ selector: 'tolle-field-group', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `<div [class]="cn('flex w-full flex-col gap-6', class)"><ng-content></ng-content></div>`, styles: [":host{display:block}\n"] }]
284
+ }], propDecorators: { class: [{
285
+ type: Input
286
+ }] } });
287
+ /** Semantic `<fieldset>` grouping related fields under a legend. */
288
+ export class FieldSetComponent {
289
+ cdr = inject(ChangeDetectorRef);
290
+ /**
291
+ * Angular writes a bound `class` input through its styling path, which does
292
+ * not mark an OnPush component dirty — without this hook the component keeps
293
+ * rendering the class it was born with.
294
+ */
295
+ ngOnChanges() {
296
+ this.cdr.markForCheck();
297
+ }
298
+ /** Extra Tailwind classes merged onto the fieldset via `cn()` (last-wins). */
299
+ class = '';
300
+ cn = cn;
301
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldSetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
302
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldSetComponent, isStandalone: true, selector: "tolle-field-set", inputs: { class: "class" }, usesOnChanges: true, ngImport: i0, template: `<fieldset [class]="cn('flex w-full flex-col gap-4 border-0 p-0', class)"><ng-content></ng-content></fieldset>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
303
+ }
304
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldSetComponent, decorators: [{
305
+ type: Component,
306
+ args: [{ selector: 'tolle-field-set', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `<fieldset [class]="cn('flex w-full flex-col gap-4 border-0 p-0', class)"><ng-content></ng-content></fieldset>`, styles: [":host{display:block}\n"] }]
307
+ }], propDecorators: { class: [{
308
+ type: Input
309
+ }] } });
310
+ const fieldLegendVariants = cva('mb-1 font-medium text-foreground', {
311
+ variants: {
312
+ variant: {
313
+ legend: 'text-base',
314
+ label: 'text-sm leading-none',
315
+ },
316
+ },
317
+ defaultVariants: { variant: 'legend' },
318
+ });
319
+ /** `<legend>` for a `tolle-field-set`. */
320
+ export class FieldLegendComponent {
321
+ cdr = inject(ChangeDetectorRef);
322
+ /**
323
+ * Angular writes a bound `class` input through its styling path, which does
324
+ * not mark an OnPush component dirty — without this hook the component keeps
325
+ * rendering the class it was born with.
326
+ */
327
+ ngOnChanges() {
328
+ this.cdr.markForCheck();
329
+ }
330
+ /** Type scale of the legend. @default 'legend' */
331
+ variant = 'legend';
332
+ /** Extra Tailwind classes merged onto the legend via `cn()` (last-wins). */
333
+ class = '';
334
+ get computedClass() {
335
+ return cn(fieldLegendVariants({ variant: this.variant }), this.class);
336
+ }
337
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldLegendComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
338
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldLegendComponent, isStandalone: true, selector: "tolle-field-legend", inputs: { variant: "variant", class: "class" }, usesOnChanges: true, ngImport: i0, template: `<legend [class]="computedClass"><ng-content></ng-content></legend>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
339
+ }
340
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldLegendComponent, decorators: [{
341
+ type: Component,
342
+ args: [{ selector: 'tolle-field-legend', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `<legend [class]="computedClass"><ng-content></ng-content></legend>`, styles: [":host{display:block}\n"] }]
343
+ }], propDecorators: { variant: [{
344
+ type: Input
345
+ }], class: [{
346
+ type: Input
347
+ }] } });
348
+ /** Divider between sections of a form. */
349
+ export class FieldSeparatorComponent {
350
+ cdr = inject(ChangeDetectorRef);
351
+ /**
352
+ * Angular writes a bound `class` input through its styling path, which does
353
+ * not mark an OnPush component dirty — without this hook the component keeps
354
+ * rendering the class it was born with.
355
+ */
356
+ ngOnChanges() {
357
+ this.cdr.markForCheck();
358
+ }
359
+ /** Extra Tailwind classes merged onto the separator via `cn()` (last-wins). */
360
+ class = '';
361
+ cn = cn;
362
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldSeparatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
363
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldSeparatorComponent, isStandalone: true, selector: "tolle-field-separator", inputs: { class: "class" }, usesOnChanges: true, ngImport: i0, template: `<div role="separator" [class]="cn('h-px w-full bg-border', class)"></div>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
364
+ }
365
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldSeparatorComponent, decorators: [{
366
+ type: Component,
367
+ args: [{ selector: 'tolle-field-separator', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `<div role="separator" [class]="cn('h-px w-full bg-border', class)"></div>`, styles: [":host{display:block}\n"] }]
368
+ }], propDecorators: { class: [{
369
+ type: Input
370
+ }] } });
371
+ /** Title for a group of fields that is not a `<legend>`. */
372
+ export class FieldTitleComponent {
373
+ cdr = inject(ChangeDetectorRef);
374
+ /**
375
+ * Angular writes a bound `class` input through its styling path, which does
376
+ * not mark an OnPush component dirty — without this hook the component keeps
377
+ * rendering the class it was born with.
378
+ */
379
+ ngOnChanges() {
380
+ this.cdr.markForCheck();
381
+ }
382
+ /** Extra Tailwind classes merged onto the title via `cn()` (last-wins). */
383
+ class = '';
384
+ cn = cn;
385
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
386
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldTitleComponent, isStandalone: true, selector: "tolle-field-title", inputs: { class: "class" }, usesOnChanges: true, ngImport: i0, template: `<div [class]="cn('text-sm font-medium leading-none text-foreground', class)"><ng-content></ng-content></div>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
387
+ }
388
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldTitleComponent, decorators: [{
389
+ type: Component,
390
+ args: [{ selector: 'tolle-field-title', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `<div [class]="cn('text-sm font-medium leading-none text-foreground', class)"><ng-content></ng-content></div>`, styles: [":host{display:block}\n"] }]
391
+ }], propDecorators: { class: [{
392
+ type: Input
393
+ }] } });
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsR0FBRyxFQUFxQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7OztBQUVoQyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsb0VBQW9FLEVBQUU7SUFDOUYsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFO1lBQ1gsUUFBUSxFQUFFLFVBQVU7WUFDcEIsVUFBVSxFQUFFLHVDQUF1QztZQUNuRCw4RUFBOEU7WUFDOUUsaUZBQWlGO1lBQ2pGLHFGQUFxRjtZQUNyRixVQUFVLEVBQUUseURBQXlEO1NBQ3RFO0tBQ0Y7SUFDRCxlQUFlLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFO0NBQzdDLENBQUMsQ0FBQztBQUlIOzs7Ozs7O0dBT0c7QUFhSCxNQUFNLE9BQU8sY0FBYztJQUNSLEdBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUVqRDs7OztPQUlHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELHVHQUF1RztJQUM5RixXQUFXLEdBQThCLFVBQVUsQ0FBQztJQUM3RCxrR0FBa0c7SUFDekYsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN6QiwyRUFBMkU7SUFDbEUsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUVwQixJQUFJLGFBQWE7UUFDZixP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RWpEOzs7O09BSUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsK0VBQStFO0lBQ3RFLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDVixFQUFFLEdBQUcsRUFBRSxDQUFDO3dHQWRQLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLGtJQUZ4QiwyRUFBMkUsK0ZBRjNFLFlBQVk7OzRGQUlYLHVCQUF1QjtrQkFSbkMsU0FBUzsrQkFDRSx1QkFBdUIsY0FFckIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLG1CQUNOLHVCQUF1QixDQUFDLE1BQU0sWUFDckMsMkVBQTJFOzhCQWU1RSxLQUFLO3NCQUFiLEtBQUs7O0FBSVIsNERBQTREO0FBUzVELE1BQU0sT0FBTyxtQkFBbUI7SUFDYixHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFakQ7Ozs7T0FJRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCwyRUFBMkU7SUFDbEUsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNWLEVBQUUsR0FBRyxFQUFFLENBQUM7d0dBZFAsbUJBQW1COzRGQUFuQixtQkFBbUIsOEhBRnBCLDhHQUE4RywrRkFGOUcsWUFBWTs7NEZBSVgsbUJBQW1CO2tCQVIvQixTQUFTOytCQUNFLG1CQUFtQixjQUVqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBQ04sdUJBQXVCLENBQUMsTUFBTSxZQUNyQyw4R0FBOEc7OEJBZS9HLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25DaGFuZ2VzLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjdmEsIHR5cGUgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5cbmNvbnN0IGZpZWxkVmFyaWFudHMgPSBjdmEoJ2dyb3VwL2ZpZWxkIGZsZXggdy1mdWxsIGdhcC0yIGRhdGEtW2ludmFsaWQ9dHJ1ZV06dGV4dC1kZXN0cnVjdGl2ZScsIHtcbiAgdmFyaWFudHM6IHtcbiAgICBvcmllbnRhdGlvbjoge1xuICAgICAgdmVydGljYWw6ICdmbGV4LWNvbCcsXG4gICAgICBob3Jpem9udGFsOiAnZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbicsXG4gICAgICAvLyBzaGFkY24gdXNlcyBjb250YWluZXIgcXVlcmllcyBoZXJlLCBidXQgdGhpcyBwcmVzZXQgaXMgVGFpbHdpbmQgMy40IHdpdGggbm9cbiAgICAgIC8vIGNvbnRhaW5lci1xdWVyaWVzIHBsdWdpbiDigJQgYEBtZC8uLi5gIGNsYXNzZXMgd291bGQgYmUgc2lsZW50bHkgZHJvcHBlZCBhbmQgdGhlXG4gICAgICAvLyBmaWVsZCB3b3VsZCBuZXZlciBnbyBob3Jpem9udGFsLiBWaWV3cG9ydCBicmVha3BvaW50cyB3b3JrIHdpdGggdGhlIHN0YWNrIHdlIGhhdmUuXG4gICAgICByZXNwb25zaXZlOiAnZmxleC1jb2wgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlbicsXG4gICAgfSxcbiAgfSxcbiAgZGVmYXVsdFZhcmlhbnRzOiB7IG9yaWVudGF0aW9uOiAndmVydGljYWwnIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgRmllbGRQcm9wcyA9IFZhcmlhbnRQcm9wczx0eXBlb2YgZmllbGRWYXJpYW50cz47XG5cbi8qKlxuICogV3JhcHMgYSBsYWJlbCwgYSBjb250cm9sIGFuZCBpdHMgaGVscC9lcnJvciB0ZXh0IGludG8gb25lIGFjY2Vzc2libGUgZm9ybVxuICogZmllbGQuIENvbXBvc2VzICphcm91bmQqIHRoZSBleGlzdGluZyBjb250cm9scyAoYHRvbGxlLWlucHV0YCxcbiAqIGB0b2xsZS1zZWxlY3RgLCDigKYpIOKAlCBpdCBkb2VzIG5vdCByZXBsYWNlIHRoZW0uXG4gKlxuICogVXNlIGB0b2xsZS1pdGVtYCBpbnN0ZWFkIHdoZW4gZGlzcGxheWluZyBjb250ZW50IHJhdGhlciB0aGFuIGEgZm9ybSBjb250cm9sLlxuICogQG5ld1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1maWVsZCcsXG4gIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9J10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IHJvbGU9XCJncm91cFwiIFthdHRyLmRhdGEtaW52YWxpZF09XCJpbnZhbGlkIHx8IG51bGxcIiBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzc1wiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZENvbXBvbmVudCAgaW1wbGVtZW50cyBPbkNoYW5nZXN7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKipcbiAgICogQW5ndWxhciB3cml0ZXMgYSBib3VuZCBgY2xhc3NgIGlucHV0IHRocm91Z2ggaXRzIHN0eWxpbmcgcGF0aCwgd2hpY2ggZG9lc1xuICAgKiBub3QgbWFyayBhbiBPblB1c2ggY29tcG9uZW50IGRpcnR5IOKAlCB3aXRob3V0IHRoaXMgaG9vayB0aGUgY29tcG9uZW50IGtlZXBzXG4gICAqIHJlbmRlcmluZyB0aGUgY2xhc3MgaXQgd2FzIGJvcm4gd2l0aC5cbiAgICovXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIExheW91dCBkaXJlY3Rpb247IGByZXNwb25zaXZlYCBnb2VzIGhvcml6b250YWwgYXQgdGhlIGBAbWRgIGNvbnRhaW5lciB3aWR0aC4gQGRlZmF1bHQgJ3ZlcnRpY2FsJyAqL1xuICBASW5wdXQoKSBvcmllbnRhdGlvbjogRmllbGRQcm9wc1snb3JpZW50YXRpb24nXSA9ICd2ZXJ0aWNhbCc7XG4gIC8qKiBNYXJrcyB0aGUgZmllbGQgaW52YWxpZCwgdHVybmluZyBvbiB0aGUgZGVzdHJ1Y3RpdmUgc3R5bGluZyBmb3IgZGVzY2VuZGFudHMuIEBkZWZhdWx0IGZhbHNlICovXG4gIEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIGZpZWxkIHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG5cbiAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKGZpZWxkVmFyaWFudHMoeyBvcmllbnRhdGlvbjogdGhpcy5vcmllbnRhdGlvbiB9KSwgdGhpcy5jbGFzcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBMYWJlbCBmb3IgYSBmaWVsZCdzIGNvbnRyb2wuIFNldCBgZm9yYCB0byB0aGUgY29udHJvbCdzIGBpZGAgc28gY2xpY2tpbmcgdGhlXG4gKiBsYWJlbCBmb2N1c2VzIGl0LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1maWVsZC1sYWJlbCcsXG4gIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9J10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bGFiZWxcbiAgICAgIFthdHRyLmZvcl09XCJmb3IgfHwgbnVsbFwiXG4gICAgICBbY2xhc3NdPVwiY24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIGxlYWRpbmctbm9uZSB0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgICAnZ3JvdXAtZGF0YS1baW52YWxpZD10cnVlXS9maWVsZDp0ZXh0LWRlc3RydWN0aXZlJyxcbiAgICAgICAgJ3BlZXItZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHBlZXItZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG4gICAgICAgIGNsYXNzXG4gICAgICApXCJcbiAgICA+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8c3BhbiAqbmdJZj1cInJlcXVpcmVkXCIgY2xhc3M9XCJ0ZXh0LWRlc3RydWN0aXZlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZExhYmVsQ29tcG9uZW50ICBpbXBsZW1lbnRzIE9uQ2hhbmdlc3tcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIC8qKlxuICAgKiBBbmd1bGFyIHdyaXRlcyBhIGJvdW5kIGBjbGFzc2AgaW5wdXQgdGhyb3VnaCBpdHMgc3R5bGluZyBwYXRoLCB3aGljaCBkb2VzXG4gICAqIG5vdCBtYXJrIGFuIE9uUHVzaCBjb21wb25lbnQgZGlydHkg4oCUIHdpdGhvdXQgdGhpcyBob29rIHRoZSBjb21wb25lbnQga2VlcHNcbiAgICogcmVuZGVyaW5nIHRoZSBjbGFzcyBpdCB3YXMgYm9ybiB3aXRoLlxuICAgKi9cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogSWQgb2YgdGhlIGNvbnRyb2wgdGhpcyBsYWJlbCBkZXNjcmliZXM7IHdpcmUgaXQgdG8gdGhlIGNvbnRyb2wncyBgaWRgLiBAZGVmYXVsdCAnJyAqL1xuICBASW5wdXQoKSBmb3IgPSAnJztcbiAgLyoqIEFwcGVuZHMgYSByZXF1aXJlZCBtYXJrZXIgKCopIGFmdGVyIHRoZSBsYWJlbCB0ZXh0LiBAZGVmYXVsdCBmYWxzZSAqL1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICAvKiogRXh0cmEgVGFpbHdpbmQgY2xhc3NlcyBtZXJnZWQgb250byB0aGUgbGFiZWwgdmlhIGBjbigpYCAobGFzdC13aW5zKS4gKi9cbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgcHJvdGVjdGVkIGNuID0gY247XG59XG5cbi8qKiBDb2x1bW4gdGhhdCBncm91cHMgdGhlIGNvbnRyb2wgd2l0aCBpdHMgZGVzY3JpcHRpb24gYW5kIGVycm9yIHRleHQuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1maWVsZC1jb250ZW50JyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYDxkaXYgW2NsYXNzXT1cImNuKCdmbGV4IGZsZXgtMSBmbGV4LWNvbCBnYXAtMS41JywgY2xhc3MpXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PmAsXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkQ29udGVudENvbXBvbmVudCAgaW1wbGVtZW50cyBPbkNoYW5nZXN7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKipcbiAgICogQW5ndWxhciB3cml0ZXMgYSBib3VuZCBgY2xhc3NgIGlucHV0IHRocm91Z2ggaXRzIHN0eWxpbmcgcGF0aCwgd2hpY2ggZG9lc1xuICAgKiBub3QgbWFyayBhbiBPblB1c2ggY29tcG9uZW50IGRpcnR5IOKAlCB3aXRob3V0IHRoaXMgaG9vayB0aGUgY29tcG9uZW50IGtlZXBzXG4gICAqIHJlbmRlcmluZyB0aGUgY2xhc3MgaXQgd2FzIGJvcm4gd2l0aC5cbiAgICovXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIGNvbnRlbnQgY29sdW1uIHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG4gIHByb3RlY3RlZCBjbiA9IGNuO1xufVxuXG4vKipcbiAqIEhlbHBlciB0ZXh0IGJlbG93IGEgY29udHJvbC4gR2l2ZSBpdCBhbiBgaWRgIGFuZCBwb2ludCB0aGUgY29udHJvbCdzXG4gKiBgYXJpYS1kZXNjcmliZWRieWAgYXQgaXQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWZpZWxkLWRlc2NyaXB0aW9uJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxwIFtpZF09XCJpZCB8fCBudWxsXCIgW2NsYXNzXT1cImNuKCd0ZXh0LWJhbGFuY2UgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQnLCBjbGFzcylcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L3A+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkRGVzY3JpcHRpb25Db21wb25lbnQgIGltcGxlbWVudHMgT25DaGFuZ2Vze1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgd3JpdGVzIGEgYm91bmQgYGNsYXNzYCBpbnB1dCB0aHJvdWdoIGl0cyBzdHlsaW5nIHBhdGgsIHdoaWNoIGRvZXNcbiAgICogbm90IG1hcmsgYW4gT25QdXNoIGNvbXBvbmVudCBkaXJ0eSDigJQgd2l0aG91dCB0aGlzIGhvb2sgdGhlIGNvbXBvbmVudCBrZWVwc1xuICAgKiByZW5kZXJpbmcgdGhlIGNsYXNzIGl0IHdhcyBib3JuIHdpdGguXG4gICAqL1xuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBJZCB0byByZWZlcmVuY2UgZnJvbSB0aGUgY29udHJvbCdzIGBhcmlhLWRlc2NyaWJlZGJ5YC4gQGRlZmF1bHQgJycgKi9cbiAgQElucHV0KCkgaWQgPSAnJztcbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIGRlc2NyaXB0aW9uIHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG4gIHByb3RlY3RlZCBjbiA9IGNuO1xufVxuXG4vKipcbiAqIEVycm9yIHRleHQgZm9yIGEgZmllbGQuIFJlbmRlcnMgbm90aGluZyB3aGVuIHRoZXJlIGlzIG5vIGVycm9yLCBzbyBpdCBpcyBzYWZlXG4gKiB0byBsZWF2ZSBpbiB0aGUgdGVtcGxhdGUgcGVybWFuZW50bHkuIEFubm91bmNlcyB2aWEgYHJvbGU9XCJhbGVydFwiYC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtZmllbGQtZXJyb3InLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJtZXNzYWdlcy5sZW5ndGhcIlxuICAgICAgW2lkXT1cImlkIHx8IG51bGxcIlxuICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgIFtjbGFzc109XCJjbigndGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWRlc3RydWN0aXZlJywgY2xhc3MpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZXMubGVuZ3RoID09PSAxXCI+e3sgbWVzc2FnZXNbMF0gfX08L25nLWNvbnRhaW5lcj5cbiAgICAgIDx1bCAqbmdJZj1cIm1lc3NhZ2VzLmxlbmd0aCA+IDFcIiBjbGFzcz1cIm1sLTQgbGlzdC1kaXNjIHNwYWNlLXktMC41XCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBtZXNzYWdlc1wiPnt7IG1lc3NhZ2UgfX08L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRFcnJvckNvbXBvbmVudCAgaW1wbGVtZW50cyBPbkNoYW5nZXN7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKipcbiAgICogQW5ndWxhciB3cml0ZXMgYSBib3VuZCBgY2xhc3NgIGlucHV0IHRocm91Z2ggaXRzIHN0eWxpbmcgcGF0aCwgd2hpY2ggZG9lc1xuICAgKiBub3QgbWFyayBhbiBPblB1c2ggY29tcG9uZW50IGRpcnR5IOKAlCB3aXRob3V0IHRoaXMgaG9vayB0aGUgY29tcG9uZW50IGtlZXBzXG4gICAqIHJlbmRlcmluZyB0aGUgY2xhc3MgaXQgd2FzIGJvcm4gd2l0aC5cbiAgICovXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRpb24gbWVzc2FnZShzKS4gQWNjZXB0cyBhIHNpbmdsZSBzdHJpbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MsIG9yIGFuXG4gICAqIEFuZ3VsYXIgYFZhbGlkYXRpb25FcnJvcnNgLXN0eWxlIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIG1lc3NhZ2VzLlxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgQElucHV0KCkgZXJyb3JzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsID0gJyc7XG4gIC8qKiBJZCB0byByZWZlcmVuY2UgZnJvbSB0aGUgY29udHJvbCdzIGBhcmlhLWRlc2NyaWJlZGJ5YC4gQGRlZmF1bHQgJycgKi9cbiAgQElucHV0KCkgaWQgPSAnJztcbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIGVycm9yIHRleHQgdmlhIGBjbigpYCAobGFzdC13aW5zKS4gKi9cbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgcHJvdGVjdGVkIGNuID0gY247XG5cbiAgLyoqIE5vcm1hbGlzZXMgdGhlIHRocmVlIGFjY2VwdGVkIGBlcnJvcnNgIHNoYXBlcyB0byBhIGZsYXQgbGlzdCBvZiBzdHJpbmdzLiAqL1xuICBnZXQgbWVzc2FnZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGUgPSB0aGlzLmVycm9ycztcbiAgICBpZiAoIWUpIHJldHVybiBbXTtcbiAgICBpZiAodHlwZW9mIGUgPT09ICdzdHJpbmcnKSByZXR1cm4gZSA/IFtlXSA6IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSByZXR1cm4gZS5maWx0ZXIoQm9vbGVhbikubWFwKFN0cmluZyk7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZSlcbiAgICAgIC5maWx0ZXIoKHYpID0+IHYgIT09IGZhbHNlICYmIHYgIT09IG51bGwgJiYgdiAhPT0gdW5kZWZpbmVkKVxuICAgICAgLm1hcCgodikgPT4gKHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiBTdHJpbmcodikpKTtcbiAgfVxufVxuXG4vKiogU3RhY2tzIHNldmVyYWwgZmllbGRzIHdpdGggY29uc2lzdGVudCBzcGFjaW5nLiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtZmllbGQtZ3JvdXAnLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgPGRpdiBbY2xhc3NdPVwiY24oJ2ZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC02JywgY2xhc3MpXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PmAsXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkR3JvdXBDb21wb25lbnQgIGltcGxlbWVudHMgT25DaGFuZ2Vze1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgd3JpdGVzIGEgYm91bmQgYGNsYXNzYCBpbnB1dCB0aHJvdWdoIGl0cyBzdHlsaW5nIHBhdGgsIHdoaWNoIGRvZXNcbiAgICogbm90IG1hcmsgYW4gT25QdXNoIGNvbXBvbmVudCBkaXJ0eSDigJQgd2l0aG91dCB0aGlzIGhvb2sgdGhlIGNvbXBvbmVudCBrZWVwc1xuICAgKiByZW5kZXJpbmcgdGhlIGNsYXNzIGl0IHdhcyBib3JuIHdpdGguXG4gICAqL1xuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBFeHRyYSBUYWlsd2luZCBjbGFzc2VzIG1lcmdlZCBvbnRvIHRoZSBncm91cCB2aWEgYGNuKClgIChsYXN0LXdpbnMpLiAqL1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICBwcm90ZWN0ZWQgY24gPSBjbjtcbn1cblxuLyoqIFNlbWFudGljIGA8ZmllbGRzZXQ+YCBncm91cGluZyByZWxhdGVkIGZpZWxkcyB1bmRlciBhIGxlZ2VuZC4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWZpZWxkLXNldCcsXG4gIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9J10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGA8ZmllbGRzZXQgW2NsYXNzXT1cImNuKCdmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAtNCBib3JkZXItMCBwLTAnLCBjbGFzcylcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9maWVsZHNldD5gLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZFNldENvbXBvbmVudCAgaW1wbGVtZW50cyBPbkNoYW5nZXN7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKipcbiAgICogQW5ndWxhciB3cml0ZXMgYSBib3VuZCBgY2xhc3NgIGlucHV0IHRocm91Z2ggaXRzIHN0eWxpbmcgcGF0aCwgd2hpY2ggZG9lc1xuICAgKiBub3QgbWFyayBhbiBPblB1c2ggY29tcG9uZW50IGRpcnR5IOKAlCB3aXRob3V0IHRoaXMgaG9vayB0aGUgY29tcG9uZW50IGtlZXBzXG4gICAqIHJlbmRlcmluZyB0aGUgY2xhc3MgaXQgd2FzIGJvcm4gd2l0aC5cbiAgICovXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIGZpZWxkc2V0IHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG4gIHByb3RlY3RlZCBjbiA9IGNuO1xufVxuXG5jb25zdCBmaWVsZExlZ2VuZFZhcmlhbnRzID0gY3ZhKCdtYi0xIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCcsIHtcbiAgdmFyaWFudHM6IHtcbiAgICB2YXJpYW50OiB7XG4gICAgICBsZWdlbmQ6ICd0ZXh0LWJhc2UnLFxuICAgICAgbGFiZWw6ICd0ZXh0LXNtIGxlYWRpbmctbm9uZScsXG4gICAgfSxcbiAgfSxcbiAgZGVmYXVsdFZhcmlhbnRzOiB7IHZhcmlhbnQ6ICdsZWdlbmQnIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgRmllbGRMZWdlbmRQcm9wcyA9IFZhcmlhbnRQcm9wczx0eXBlb2YgZmllbGRMZWdlbmRWYXJpYW50cz47XG5cbi8qKiBgPGxlZ2VuZD5gIGZvciBhIGB0b2xsZS1maWVsZC1zZXRgLiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtZmllbGQtbGVnZW5kJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYDxsZWdlbmQgW2NsYXNzXT1cImNvbXB1dGVkQ2xhc3NcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9sZWdlbmQ+YCxcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRMZWdlbmRDb21wb25lbnQgIGltcGxlbWVudHMgT25DaGFuZ2Vze1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgd3JpdGVzIGEgYm91bmQgYGNsYXNzYCBpbnB1dCB0aHJvdWdoIGl0cyBzdHlsaW5nIHBhdGgsIHdoaWNoIGRvZXNcbiAgICogbm90IG1hcmsgYW4gT25QdXNoIGNvbXBvbmVudCBkaXJ0eSDigJQgd2l0aG91dCB0aGlzIGhvb2sgdGhlIGNvbXBvbmVudCBrZWVwc1xuICAgKiByZW5kZXJpbmcgdGhlIGNsYXNzIGl0IHdhcyBib3JuIHdpdGguXG4gICAqL1xuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBUeXBlIHNjYWxlIG9mIHRoZSBsZWdlbmQuIEBkZWZhdWx0ICdsZWdlbmQnICovXG4gIEBJbnB1dCgpIHZhcmlhbnQ6IEZpZWxkTGVnZW5kUHJvcHNbJ3ZhcmlhbnQnXSA9ICdsZWdlbmQnO1xuICAvKiogRXh0cmEgVGFpbHdpbmQgY2xhc3NlcyBtZXJnZWQgb250byB0aGUgbGVnZW5kIHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG5cbiAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKGZpZWxkTGVnZW5kVmFyaWFudHMoeyB2YXJpYW50OiB0aGlzLnZhcmlhbnQgfSksIHRoaXMuY2xhc3MpO1xuICB9XG59XG5cbi8qKiBEaXZpZGVyIGJldHdlZW4gc2VjdGlvbnMgb2YgYSBmb3JtLiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtZmllbGQtc2VwYXJhdG9yJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYDxkaXYgcm9sZT1cInNlcGFyYXRvclwiIFtjbGFzc109XCJjbignaC1weCB3LWZ1bGwgYmctYm9yZGVyJywgY2xhc3MpXCI+PC9kaXY+YCxcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRTZXBhcmF0b3JDb21wb25lbnQgIGltcGxlbWVudHMgT25DaGFuZ2Vze1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgd3JpdGVzIGEgYm91bmQgYGNsYXNzYCBpbnB1dCB0aHJvdWdoIGl0cyBzdHlsaW5nIHBhdGgsIHdoaWNoIGRvZXNcbiAgICogbm90IG1hcmsgYW4gT25QdXNoIGNvbXBvbmVudCBkaXJ0eSDigJQgd2l0aG91dCB0aGlzIGhvb2sgdGhlIGNvbXBvbmVudCBrZWVwc1xuICAgKiByZW5kZXJpbmcgdGhlIGNsYXNzIGl0IHdhcyBib3JuIHdpdGguXG4gICAqL1xuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBFeHRyYSBUYWlsd2luZCBjbGFzc2VzIG1lcmdlZCBvbnRvIHRoZSBzZXBhcmF0b3IgdmlhIGBjbigpYCAobGFzdC13aW5zKS4gKi9cbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgcHJvdGVjdGVkIGNuID0gY247XG59XG5cbi8qKiBUaXRsZSBmb3IgYSBncm91cCBvZiBmaWVsZHMgdGhhdCBpcyBub3QgYSBgPGxlZ2VuZD5gLiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtZmllbGQtdGl0bGUnLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgPGRpdiBbY2xhc3NdPVwiY24oJ3RleHQtc20gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHRleHQtZm9yZWdyb3VuZCcsIGNsYXNzKVwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj5gLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZFRpdGxlQ29tcG9uZW50ICBpbXBsZW1lbnRzIE9uQ2hhbmdlc3tcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIC8qKlxuICAgKiBBbmd1bGFyIHdyaXRlcyBhIGJvdW5kIGBjbGFzc2AgaW5wdXQgdGhyb3VnaCBpdHMgc3R5bGluZyBwYXRoLCB3aGljaCBkb2VzXG4gICAqIG5vdCBtYXJrIGFuIE9uUHVzaCBjb21wb25lbnQgZGlydHkg4oCUIHdpdGhvdXQgdGhpcyBob29rIHRoZSBjb21wb25lbnQga2VlcHNcbiAgICogcmVuZGVyaW5nIHRoZSBjbGFzcyBpdCB3YXMgYm9ybiB3aXRoLlxuICAgKi9cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogRXh0cmEgVGFpbHdpbmQgY2xhc3NlcyBtZXJnZWQgb250byB0aGUgdGl0bGUgdmlhIGBjbigpYCAobGFzdC13aW5zKS4gKi9cbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgcHJvdGVjdGVkIGNuID0gY247XG59XG4iXX0=
@@ -54,16 +54,11 @@ export class HoverCardComponent {
54
54
  clearTimeout(this.closeTimeout);
55
55
  }
56
56
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HoverCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
57
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: HoverCardComponent, isStandalone: true, selector: "tolle-hover-card", inputs: { openDelay: "openDelay", closeDelay: "closeDelay", placement: "placement" }, queries: [{ propertyName: "contentComponent", first: true, predicate: i0.forwardRef(() => HoverCardContentComponent), descendants: true }], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
57
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: HoverCardComponent, isStandalone: true, selector: "tolle-hover-card", inputs: { openDelay: "openDelay", closeDelay: "closeDelay", placement: "placement" }, queries: [{ propertyName: "contentComponent", first: true, predicate: i0.forwardRef(() => HoverCardContentComponent), descendants: true }], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
58
58
  }
59
59
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HoverCardComponent, decorators: [{
60
60
  type: Component,
61
- args: [{
62
- selector: 'tolle-hover-card',
63
- standalone: true,
64
- imports: [CommonModule],
65
- template: `<ng-content></ng-content>`
66
- }]
61
+ args: [{ selector: 'tolle-hover-card', standalone: true, imports: [CommonModule], template: `<ng-content></ng-content>`, styles: [":host{display:block}\n"] }]
67
62
  }], propDecorators: { openDelay: [{
68
63
  type: Input
69
64
  }], closeDelay: [{
@@ -160,15 +155,11 @@ export class HoverCardContentComponent {
160
155
  (mouseleave)="onMouseLeave()">
161
156
  <ng-content></ng-content>
162
157
  </div>
163
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
158
+ `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
164
159
  }
165
160
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HoverCardContentComponent, decorators: [{
166
161
  type: Component,
167
- args: [{
168
- selector: 'tolle-hover-card-content',
169
- standalone: true,
170
- imports: [CommonModule],
171
- template: `
162
+ args: [{ selector: 'tolle-hover-card-content', standalone: true, imports: [CommonModule], template: `
172
163
  <div *ngIf="isVisible"
173
164
  #content
174
165
  [class]="computedClass"
@@ -176,12 +167,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
176
167
  (mouseleave)="onMouseLeave()">
177
168
  <ng-content></ng-content>
178
169
  </div>
179
- `
180
- }]
170
+ `, styles: [":host{display:block}\n"] }]
181
171
  }], propDecorators: { class: [{
182
172
  type: Input
183
173
  }], contentEl: [{
184
174
  type: ViewChild,
185
175
  args: ['content']
186
176
  }] } });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2hvdmVyLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWUsU0FBUyxFQUErQixZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekwsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBUWhDLE1BQU0sT0FBTyxrQkFBa0I7SUFDbEIsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUNoQixVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLFNBQVMsR0FBd0MsUUFBUSxDQUFDO0lBRTNELFdBQVcsQ0FBTztJQUNsQixZQUFZLENBQU87SUFFM0IsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUU0QyxnQkFBZ0IsQ0FBNkI7SUFFeEcsSUFBSSxDQUFDLGNBQTJCO1FBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXhCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlCLENBQUMsRUFBRSxJQUFJLENB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QUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7b0JBQ3pCLFFBQVEsRUFBRSxPQUFPO29CQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7b0JBQ2QsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJO29CQUNiLE1BQU0sRUFBRSxNQUFNO2lCQUNqQixDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksYUFBYTtRQUNiLE9BQU8sRUFBRSxDQUNMLHFOQUFxTixFQUNyTixJQUFJLENBQUMsS0FBSyxDQUNiLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQzt3R0ExRFEseUJBQXlCOzRGQUF6Qix5QkFBeUIsc05BVnhCOzs7Ozs7OztHQVFYLDJEQVRXLFlBQVk7OzRGQVdiLHlCQUF5QjtrQkFkckMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixRQUFRLEVBQUU7Ozs7Ozs7O0dBUVg7aUJBQ0Y7OEJBRVksS0FBSztzQkFBYixLQUFLO2dCQUNnQixTQUFTO3NCQUE5QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBPbkRlc3Ryb3ksIENvbnRlbnRDaGlsZCwgZm9yd2FyZFJlZiwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGNvbXB1dGVQb3NpdGlvbiwgZmxpcCwgc2hpZnQsIG9mZnNldCwgYXV0b1VwZGF0ZSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0b2xsZS1ob3Zlci1jYXJkJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmBcbn0pXG5leHBvcnQgY2xhc3MgSG92ZXJDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBvcGVuRGVsYXkgPSA3MDA7XG4gICAgQElucHV0KCkgY2xvc2VEZWxheSA9IDMwMDtcbiAgICBASW5wdXQoKSBwbGFjZW1lbnQ6ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnID0gJ2JvdHRvbSc7XG5cbiAgICBwcml2YXRlIG9wZW5UaW1lb3V0PzogYW55O1xuICAgIHByaXZhdGUgY2xvc2VUaW1lb3V0PzogYW55O1xuXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSG92ZXJDYXJkQ29udGVudENvbXBvbmVudCkpIGNvbnRlbnRDb21wb25lbnQ/OiBIb3ZlckNhcmRDb250ZW50Q29tcG9uZW50O1xuXG4gICAgb3Blbih0cmlnZ2VyRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZVRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcblxuICAgICAgICB0aGlzLm9wZW5UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3codHJpZ2dlckVsZW1lbnQpO1xuICAgICAgICB9LCB0aGlzLm9wZW5EZWxheSk7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wZW5UaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5vcGVuVGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLm9wZW5UaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9LCB0aGlzLmNsb3NlRGVsYXkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvdyh0cmlnZ2VyRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRDb21wb25lbnQuc2hvdyh0cmlnZ2VyRWxlbWVudCwgdGhpcy5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGUoKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudENvbXBvbmVudC5oaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIGlmICh0aGlzLm9wZW5UaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5vcGVuVGltZW91dCk7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlVGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VUaW1lb3V0KTtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndG9sbGUtaG92ZXItY2FyZC10cmlnZ2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXG4gICAgaG9zdDoge1xuICAgICAgICAnKG1vdXNlZW50ZXIpJzogJ29uTW91c2VFbnRlcigpJyxcbiAgICAgICAgJyhtb3VzZWxlYXZlKSc6ICdvbk1vdXNlTGVhdmUoKScsXG4gICAgICAgICcoZm9jdXNpbiknOiAnb25Nb3VzZUVudGVyKCknLFxuICAgICAgICAnKGZvY3Vzb3V0KSc6ICdvbk1vdXNlTGVhdmUoKScsXG4gICAgICAgICdbY2xhc3NdJzogJ1wiY3Vyc29yLWRlZmF1bHQgaW5saW5lLWJsb2NrXCInXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBIb3ZlckNhcmRUcmlnZ2VyQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIGhvdmVyQ2FyZCA9IGluamVjdChIb3ZlckNhcmRDb21wb25lbnQpO1xuICAgIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIG9uTW91c2VFbnRlcigpIHtcbiAgICAgICAgdGhpcy5ob3ZlckNhcmQub3Blbih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgb25Nb3VzZUxlYXZlKCkge1xuICAgICAgICB0aGlzLmhvdmVyQ2FyZC5jbG9zZSgpO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0b2xsZS1ob3Zlci1jYXJkLWNvbnRlbnQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICpuZ0lmPVwiaXNWaXNpYmxlXCJcbiAgICAgICAgICNjb250ZW50XG4gICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzc1wiXG4gICAgICAgICAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXIoKVwiXG4gICAgICAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmUoKVwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIEhvdmVyQ2FyZENvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSAnJztcbiAgICBAVmlld0NoaWxkKCdjb250ZW50JykgY29udGVudEVsPzogRWxlbWVudFJlZjtcblxuICAgIGlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgY2xlYW51cD86ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBob3ZlckNhcmQgPSBpbmplY3QoSG92ZXJDYXJkQ29tcG9uZW50KTtcblxuICAgIHNob3codHJpZ2dlckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwbGFjZW1lbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGVudEVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbih0cmlnZ2VyRWxlbWVudCwgdGhpcy5jb250ZW50RWwubmF0aXZlRWxlbWVudCwgcGxhY2VtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGlkZSgpIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYW51cCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uKHRyaWdnZXI6IEhUTUxFbGVtZW50LCBjb250ZW50OiBIVE1MRWxlbWVudCwgcGxhY2VtZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwID0gYXV0b1VwZGF0ZSh0cmlnZ2VyLCBjb250ZW50LCAoKSA9PiB7XG4gICAgICAgICAgICBjb21wdXRlUG9zaXRpb24odHJpZ2dlciwgY29udGVudCwge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgICAgICAgICBtaWRkbGV3YXJlOiBbb2Zmc2V0KDgpLCBmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogOCB9KV0sXG4gICAgICAgICAgICB9KS50aGVuKCh7IHgsIHkgfSkgPT4ge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29udGVudC5zdHlsZSwge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogYCR7eH1weGAsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogYCR7eX1weGAsXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogJzk5OTknXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Nb3VzZUVudGVyKCkge1xuICAgICAgICB0aGlzLmhvdmVyQ2FyZC5vcGVuKG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICAgIHRoaXMuaG92ZXJDYXJkLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiBjbihcbiAgICAgICAgICAgIFwidy02NCByb3VuZGVkLW1kIGJvcmRlciBiZy1wb3BvdmVyIHAtNCB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctbWQgb3V0bGluZS1ub25lIGFuaW1hdGUtaW4gZmFkZS1pbi0wIHpvb20taW4tOTUgZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NVwiLFxuICAgICAgICAgICAgdGhpcy5jbGFzc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5jbGVhbnVwKSB0aGlzLmNsZWFudXAoKTtcbiAgICB9XG59XG4iXX0=
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2hvdmVyLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWUsU0FBUyxFQUErQixZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekwsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBU2hDLE1BQU0sT0FBTyxrQkFBa0I7SUFDbEIsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUNoQixVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLFNBQVMsR0FBd0MsUUFBUSxDQUFDO0lBRTNELFdBQVcsQ0FBTztJQUNsQixZQUFZLENBQU87SUFFM0IsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUU0QyxnQkFBZ0IsQ0FBNkI7SUFFeEcsSUFBSSxDQUFDLGNBQTJCO1FBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXhCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlCLENBQUMsRUFBRSxJQUFJLENB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QUFPO29CQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7b0JBQ2QsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJO29CQUNiLE1BQU0sRUFBRSxNQUFNO2lCQUNqQixDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksYUFBYTtRQUNiLE9BQU8sRUFBRSxDQUNMLHFOQUFxTixFQUNyTixJQUFJLENBQUMsS0FBSyxDQUNiLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQzt3R0ExRFEseUJBQXlCOzRGQUF6Qix5QkFBeUIsc05BVnhCOzs7Ozs7OztHQVFYLCtGQVRXLFlBQVk7OzRGQVdiLHlCQUF5QjtrQkFmckMsU0FBUzsrQkFDSSwwQkFBMEIsY0FFeEIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLFlBQ2I7Ozs7Ozs7O0dBUVg7OEJBR1UsS0FBSztzQkFBYixLQUFLO2dCQUNnQixTQUFTO3NCQUE5QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBPbkRlc3Ryb3ksIENvbnRlbnRDaGlsZCwgZm9yd2FyZFJlZiwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGNvbXB1dGVQb3NpdGlvbiwgZmxpcCwgc2hpZnQsIG9mZnNldCwgYXV0b1VwZGF0ZSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0b2xsZS1ob3Zlci1jYXJkJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmBcbn0pXG5leHBvcnQgY2xhc3MgSG92ZXJDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBvcGVuRGVsYXkgPSA3MDA7XG4gICAgQElucHV0KCkgY2xvc2VEZWxheSA9IDMwMDtcbiAgICBASW5wdXQoKSBwbGFjZW1lbnQ6ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnID0gJ2JvdHRvbSc7XG5cbiAgICBwcml2YXRlIG9wZW5UaW1lb3V0PzogYW55O1xuICAgIHByaXZhdGUgY2xvc2VUaW1lb3V0PzogYW55O1xuXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSG92ZXJDYXJkQ29udGVudENvbXBvbmVudCkpIGNvbnRlbnRDb21wb25lbnQ/OiBIb3ZlckNhcmRDb250ZW50Q29tcG9uZW50O1xuXG4gICAgb3Blbih0cmlnZ2VyRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZVRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcblxuICAgICAgICB0aGlzLm9wZW5UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3codHJpZ2dlckVsZW1lbnQpO1xuICAgICAgICB9LCB0aGlzLm9wZW5EZWxheSk7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wZW5UaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5vcGVuVGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLm9wZW5UaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9LCB0aGlzLmNsb3NlRGVsYXkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvdyh0cmlnZ2VyRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRDb21wb25lbnQuc2hvdyh0cmlnZ2VyRWxlbWVudCwgdGhpcy5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGUoKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudENvbXBvbmVudC5oaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIGlmICh0aGlzLm9wZW5UaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5vcGVuVGltZW91dCk7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlVGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VUaW1lb3V0KTtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndG9sbGUtaG92ZXItY2FyZC10cmlnZ2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXG4gICAgaG9zdDoge1xuICAgICAgICAnKG1vdXNlZW50ZXIpJzogJ29uTW91c2VFbnRlcigpJyxcbiAgICAgICAgJyhtb3VzZWxlYXZlKSc6ICdvbk1vdXNlTGVhdmUoKScsXG4gICAgICAgICcoZm9jdXNpbiknOiAnb25Nb3VzZUVudGVyKCknLFxuICAgICAgICAnKGZvY3Vzb3V0KSc6ICdvbk1vdXNlTGVhdmUoKScsXG4gICAgICAgICdbY2xhc3NdJzogJ1wiY3Vyc29yLWRlZmF1bHQgaW5saW5lLWJsb2NrXCInXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBIb3ZlckNhcmRUcmlnZ2VyQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIGhvdmVyQ2FyZCA9IGluamVjdChIb3ZlckNhcmRDb21wb25lbnQpO1xuICAgIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIG9uTW91c2VFbnRlcigpIHtcbiAgICAgICAgdGhpcy5ob3ZlckNhcmQub3Blbih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgb25Nb3VzZUxlYXZlKCkge1xuICAgICAgICB0aGlzLmhvdmVyQ2FyZC5jbG9zZSgpO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0b2xsZS1ob3Zlci1jYXJkLWNvbnRlbnQnLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICpuZ0lmPVwiaXNWaXNpYmxlXCJcbiAgICAgICAgICNjb250ZW50XG4gICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzc1wiXG4gICAgICAgICAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXIoKVwiXG4gICAgICAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmUoKVwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIEhvdmVyQ2FyZENvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSAnJztcbiAgICBAVmlld0NoaWxkKCdjb250ZW50JykgY29udGVudEVsPzogRWxlbWVudFJlZjtcblxuICAgIGlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgY2xlYW51cD86ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBob3ZlckNhcmQgPSBpbmplY3QoSG92ZXJDYXJkQ29tcG9uZW50KTtcblxuICAgIHNob3codHJpZ2dlckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwbGFjZW1lbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGVudEVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbih0cmlnZ2VyRWxlbWVudCwgdGhpcy5jb250ZW50RWwubmF0aXZlRWxlbWVudCwgcGxhY2VtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGlkZSgpIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYW51cCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uKHRyaWdnZXI6IEhUTUxFbGVtZW50LCBjb250ZW50OiBIVE1MRWxlbWVudCwgcGxhY2VtZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwID0gYXV0b1VwZGF0ZSh0cmlnZ2VyLCBjb250ZW50LCAoKSA9PiB7XG4gICAgICAgICAgICBjb21wdXRlUG9zaXRpb24odHJpZ2dlciwgY29udGVudCwge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgICAgICAgICBtaWRkbGV3YXJlOiBbb2Zmc2V0KDgpLCBmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogOCB9KV0sXG4gICAgICAgICAgICB9KS50aGVuKCh7IHgsIHkgfSkgPT4ge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29udGVudC5zdHlsZSwge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogYCR7eH1weGAsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogYCR7eX1weGAsXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogJzk5OTknXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Nb3VzZUVudGVyKCkge1xuICAgICAgICB0aGlzLmhvdmVyQ2FyZC5vcGVuKG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICAgIHRoaXMuaG92ZXJDYXJkLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiBjbihcbiAgICAgICAgICAgIFwidy02NCByb3VuZGVkLW1kIGJvcmRlciBiZy1wb3BvdmVyIHAtNCB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctbWQgb3V0bGluZS1ub25lIGFuaW1hdGUtaW4gZmFkZS1pbi0wIHpvb20taW4tOTUgZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NVwiLFxuICAgICAgICAgICAgdGhpcy5jbGFzc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5jbGVhbnVwKSB0aGlzLmNsZWFudXAoKTtcbiAgICB9XG59XG4iXX0=