@tolle_/tolle-ui 18.2.28 → 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 +63 -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 +16457 -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 +27 -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 +8497 -1553
  177. package/registry/llms-full.txt +2679 -318
  178. package/registry/llms.txt +43 -4
  179. package/registry/manifest.json +9093 -1739
  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,418 @@
1
+ import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
4
+ import { cva } from 'class-variance-authority';
5
+ import { cn } from './utils/cn';
6
+ import * as i0 from "@angular/core";
7
+ const inputGroupVariants = cva('group/input-group relative flex w-full items-center rounded-md border border-input bg-background shadow-sm transition-colors ' +
8
+ 'focus-within:border-primary/80 focus-within:ring-4 focus-within:ring-ring/30 ' +
9
+ 'has-[input:disabled]:cursor-not-allowed has-[input:disabled]:opacity-50', {
10
+ variants: {
11
+ size: {
12
+ xs: 'h-8 gap-1 px-1.5 text-xs',
13
+ sm: 'h-9 gap-1.5 px-2 text-sm',
14
+ default: 'h-10 gap-2 px-2 text-sm',
15
+ lg: 'h-11 gap-2 px-3 text-base',
16
+ },
17
+ invalid: {
18
+ true: 'border-destructive focus-within:border-destructive/80 focus-within:ring-destructive/30',
19
+ false: '',
20
+ },
21
+ // `block-start` / `block-end` addons stack, so the group can no longer be a
22
+ // fixed-height row.
23
+ stacked: {
24
+ true: 'h-auto flex-col items-stretch gap-0 px-0 py-0',
25
+ false: '',
26
+ },
27
+ },
28
+ defaultVariants: { size: 'default', invalid: false, stacked: false },
29
+ });
30
+ /**
31
+ * Wraps an input with leading/trailing addons — icons, text, buttons or a
32
+ * spinner — inside a single bordered control that shows one shared focus ring.
33
+ *
34
+ * Put a `tolle-input-group-input` (or `tolle-input-group-textarea`) inside,
35
+ * alongside any number of `tolle-input-group-addon` elements.
36
+ * @new
37
+ */
38
+ export class InputGroupComponent {
39
+ /** Height and text size of the group; match it to the input inside. @default 'default' */
40
+ size = 'default';
41
+ /** Applies the destructive border and focus ring. @default false */
42
+ invalid = false;
43
+ /** Switches to a stacked column layout for `block-start`/`block-end` addons. @default false */
44
+ stacked = false;
45
+ /** Extra Tailwind classes merged onto the group via `cn()` (last-wins). */
46
+ class = '';
47
+ get computedClass() {
48
+ return cn(inputGroupVariants({ size: this.size, invalid: this.invalid, stacked: this.stacked }), this.class);
49
+ }
50
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
51
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InputGroupComponent, isStandalone: true, selector: "tolle-input-group", inputs: { size: "size", invalid: "invalid", stacked: "stacked", class: "class" }, ngImport: i0, template: `<div [class]="computedClass"><ng-content></ng-content></div>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
52
+ }
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputGroupComponent, decorators: [{
54
+ type: Component,
55
+ args: [{ selector: 'tolle-input-group', standalone: true, imports: [CommonModule], template: `<div [class]="computedClass"><ng-content></ng-content></div>`, styles: [":host{display:block}\n"] }]
56
+ }], propDecorators: { size: [{
57
+ type: Input
58
+ }], invalid: [{
59
+ type: Input
60
+ }], stacked: [{
61
+ type: Input
62
+ }], class: [{
63
+ type: Input
64
+ }] } });
65
+ const inputGroupAddonVariants = cva('flex shrink-0 items-center gap-1.5 text-muted-foreground', {
66
+ variants: {
67
+ align: {
68
+ 'inline-start': 'order-first',
69
+ 'inline-end': 'order-last',
70
+ 'block-start': 'order-first w-full border-b border-border px-3 py-1.5',
71
+ 'block-end': 'order-last w-full border-t border-border px-3 py-1.5',
72
+ },
73
+ },
74
+ defaultVariants: { align: 'inline-start' },
75
+ });
76
+ /**
77
+ * A slot beside (or above/below) the input for icons, text or buttons.
78
+ * Use `block-start` / `block-end` together with the group's `stacked` input.
79
+ */
80
+ export class InputGroupAddonComponent {
81
+ /** Where the addon sits relative to the input. @default 'inline-start' */
82
+ align = 'inline-start';
83
+ /** Extra Tailwind classes merged onto the addon via `cn()` (last-wins). */
84
+ class = '';
85
+ get computedClass() {
86
+ return cn(inputGroupAddonVariants({ align: this.align }), this.class);
87
+ }
88
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputGroupAddonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
89
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InputGroupAddonComponent, isStandalone: true, selector: "tolle-input-group-addon", inputs: { align: "align", class: "class" }, ngImport: i0, template: `<div [class]="computedClass"><ng-content></ng-content></div>`, isInline: true, styles: [":host{display:inline-flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
90
+ }
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputGroupAddonComponent, decorators: [{
92
+ type: Component,
93
+ args: [{ selector: 'tolle-input-group-addon', standalone: true, imports: [CommonModule], template: `<div [class]="computedClass"><ng-content></ng-content></div>`, styles: [":host{display:inline-flex}\n"] }]
94
+ }], propDecorators: { align: [{
95
+ type: Input
96
+ }], class: [{
97
+ type: Input
98
+ }] } });
99
+ const inputGroupButtonVariants = cva('inline-flex shrink-0 items-center justify-center gap-1 rounded font-medium transition-colors ' +
100
+ 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 ' +
101
+ 'disabled:pointer-events-none disabled:opacity-50', {
102
+ variants: {
103
+ variant: {
104
+ default: 'bg-primary text-primary-foreground hover:bg-primary/90',
105
+ secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
106
+ outline: 'border border-border bg-transparent hover:bg-accent hover:text-accent-foreground',
107
+ ghost: 'bg-transparent hover:bg-accent hover:text-accent-foreground',
108
+ destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',
109
+ },
110
+ size: {
111
+ xs: 'h-6 px-2 text-xs',
112
+ sm: 'h-7 px-2.5 text-sm',
113
+ 'icon-xs': 'h-6 w-6 p-0 text-xs',
114
+ 'icon-sm': 'h-7 w-7 p-0 text-sm',
115
+ },
116
+ },
117
+ defaultVariants: { variant: 'ghost', size: 'icon-sm' },
118
+ });
119
+ /** A compact button sized to sit inside an input group addon. */
120
+ export class InputGroupButtonComponent {
121
+ /** Visual style of the button. @default 'ghost' */
122
+ variant = 'ghost';
123
+ /** Size of the button; the `icon-*` sizes render a square. @default 'icon-sm' */
124
+ size = 'icon-sm';
125
+ /** Native button type. @default 'button' */
126
+ type = 'button';
127
+ /** Disables the button. @default false */
128
+ disabled = false;
129
+ /** Accessible name — required when the button shows only an icon. @default '' */
130
+ ariaLabel = '';
131
+ /** Extra Tailwind classes merged onto the button via `cn()` (last-wins). */
132
+ class = '';
133
+ /** Emitted with the click event when the button is pressed. */
134
+ clicked = new EventEmitter();
135
+ get computedClass() {
136
+ return cn(inputGroupButtonVariants({ variant: this.variant, size: this.size }), this.class);
137
+ }
138
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputGroupButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
139
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InputGroupButtonComponent, isStandalone: true, selector: "tolle-input-group-button", inputs: { variant: "variant", size: "size", type: "type", disabled: "disabled", ariaLabel: "ariaLabel", class: "class" }, outputs: { clicked: "clicked" }, ngImport: i0, template: `
140
+ <button
141
+ [type]="type"
142
+ [disabled]="disabled"
143
+ [attr.aria-label]="ariaLabel || null"
144
+ [class]="computedClass"
145
+ (click)="clicked.emit($event)"
146
+ >
147
+ <ng-content></ng-content>
148
+ </button>
149
+ `, isInline: true, styles: [":host{display:inline-flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
150
+ }
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputGroupButtonComponent, decorators: [{
152
+ type: Component,
153
+ args: [{ selector: 'tolle-input-group-button', standalone: true, imports: [CommonModule], template: `
154
+ <button
155
+ [type]="type"
156
+ [disabled]="disabled"
157
+ [attr.aria-label]="ariaLabel || null"
158
+ [class]="computedClass"
159
+ (click)="clicked.emit($event)"
160
+ >
161
+ <ng-content></ng-content>
162
+ </button>
163
+ `, styles: [":host{display:inline-flex}\n"] }]
164
+ }], propDecorators: { variant: [{
165
+ type: Input
166
+ }], size: [{
167
+ type: Input
168
+ }], type: [{
169
+ type: Input
170
+ }], disabled: [{
171
+ type: Input
172
+ }], ariaLabel: [{
173
+ type: Input
174
+ }], class: [{
175
+ type: Input
176
+ }], clicked: [{
177
+ type: Output
178
+ }] } });
179
+ /** Plain text inside an addon — a unit, prefix, or character counter. */
180
+ export class InputGroupTextComponent {
181
+ /** Extra Tailwind classes merged onto the text via `cn()` (last-wins). */
182
+ class = '';
183
+ cn = cn;
184
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputGroupTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
185
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InputGroupTextComponent, isStandalone: true, selector: "tolle-input-group-text", inputs: { class: "class" }, ngImport: i0, template: `<span [class]="cn('select-none whitespace-nowrap text-sm text-muted-foreground', class)"><ng-content></ng-content></span>`, isInline: true, styles: [":host{display:inline-flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
186
+ }
187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputGroupTextComponent, decorators: [{
188
+ type: Component,
189
+ args: [{ selector: 'tolle-input-group-text', standalone: true, imports: [CommonModule], template: `<span [class]="cn('select-none whitespace-nowrap text-sm text-muted-foreground', class)"><ng-content></ng-content></span>`, styles: [":host{display:inline-flex}\n"] }]
190
+ }], propDecorators: { class: [{
191
+ type: Input
192
+ }] } });
193
+ /**
194
+ * The input inside a `tolle-input-group`. Deliberately borderless and
195
+ * unfocusable-looking — the surrounding group owns the border and focus ring.
196
+ */
197
+ export class InputGroupInputComponent {
198
+ cdr;
199
+ /** Id applied to the underlying `<input>`. */
200
+ id = `input-group-input-${Math.random().toString(36).slice(2, 11)}`;
201
+ /** Native input type. @default 'text' */
202
+ type = 'text';
203
+ /** Placeholder text. @default '' */
204
+ placeholder = '';
205
+ /** Disables the input. @default false */
206
+ disabled = false;
207
+ /** Makes the input read-only. @default false */
208
+ readonly = false;
209
+ /** Id of the element describing this input, for `aria-describedby`. @default '' */
210
+ ariaDescribedby = '';
211
+ /** Extra Tailwind classes merged onto the input via `cn()` (last-wins). */
212
+ class = '';
213
+ /** Emitted with the new value on every keystroke. */
214
+ valueChange = new EventEmitter();
215
+ value = '';
216
+ onChange = () => { };
217
+ onTouched = () => { };
218
+ constructor(cdr) {
219
+ this.cdr = cdr;
220
+ }
221
+ get computedClass() {
222
+ return cn('min-w-0 flex-1 border-none bg-transparent p-0 text-foreground outline-none', 'placeholder:text-muted-foreground', 'focus:outline-none focus:ring-0 focus:shadow-none', 'disabled:cursor-not-allowed', this.class);
223
+ }
224
+ onInputChange(event) {
225
+ if (this.readonly || this.disabled)
226
+ return;
227
+ const next = event.target.value;
228
+ this.value = next;
229
+ this.onChange(next);
230
+ this.valueChange.emit(next);
231
+ }
232
+ writeValue(value) {
233
+ this.value = value;
234
+ this.cdr.markForCheck();
235
+ }
236
+ registerOnChange(fn) {
237
+ this.onChange = fn;
238
+ }
239
+ registerOnTouched(fn) {
240
+ this.onTouched = fn;
241
+ }
242
+ setDisabledState(isDisabled) {
243
+ this.disabled = isDisabled;
244
+ this.cdr.markForCheck();
245
+ }
246
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputGroupInputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
247
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InputGroupInputComponent, isStandalone: true, selector: "tolle-input-group-input", inputs: { id: "id", type: "type", placeholder: "placeholder", disabled: "disabled", readonly: "readonly", ariaDescribedby: "ariaDescribedby", class: "class" }, outputs: { valueChange: "valueChange" }, providers: [
248
+ {
249
+ provide: NG_VALUE_ACCESSOR,
250
+ useExisting: forwardRef(() => InputGroupInputComponent),
251
+ multi: true,
252
+ },
253
+ ], ngImport: i0, template: `
254
+ <input
255
+ [id]="id"
256
+ [type]="type"
257
+ [placeholder]="placeholder"
258
+ [disabled]="disabled"
259
+ [readOnly]="readonly"
260
+ [value]="value ?? ''"
261
+ [attr.aria-describedby]="ariaDescribedby || null"
262
+ [class]="computedClass"
263
+ (input)="onInputChange($event)"
264
+ (blur)="onTouched()"
265
+ />
266
+ `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }] });
267
+ }
268
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputGroupInputComponent, decorators: [{
269
+ type: Component,
270
+ args: [{ selector: 'tolle-input-group-input', standalone: true, imports: [CommonModule, FormsModule], providers: [
271
+ {
272
+ provide: NG_VALUE_ACCESSOR,
273
+ useExisting: forwardRef(() => InputGroupInputComponent),
274
+ multi: true,
275
+ },
276
+ ], template: `
277
+ <input
278
+ [id]="id"
279
+ [type]="type"
280
+ [placeholder]="placeholder"
281
+ [disabled]="disabled"
282
+ [readOnly]="readonly"
283
+ [value]="value ?? ''"
284
+ [attr.aria-describedby]="ariaDescribedby || null"
285
+ [class]="computedClass"
286
+ (input)="onInputChange($event)"
287
+ (blur)="onTouched()"
288
+ />
289
+ `, styles: [":host{display:block}\n"] }]
290
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { id: [{
291
+ type: Input
292
+ }], type: [{
293
+ type: Input
294
+ }], placeholder: [{
295
+ type: Input
296
+ }], disabled: [{
297
+ type: Input
298
+ }], readonly: [{
299
+ type: Input
300
+ }], ariaDescribedby: [{
301
+ type: Input
302
+ }], class: [{
303
+ type: Input
304
+ }], valueChange: [{
305
+ type: Output
306
+ }] } });
307
+ /** The textarea equivalent of `tolle-input-group-input`. */
308
+ export class InputGroupTextareaComponent {
309
+ cdr;
310
+ /** Id applied to the underlying `<textarea>`. */
311
+ id = `input-group-textarea-${Math.random().toString(36).slice(2, 11)}`;
312
+ /** Visible rows. @default 3 */
313
+ rows = 3;
314
+ /** Placeholder text. @default '' */
315
+ placeholder = '';
316
+ /** Disables the textarea. @default false */
317
+ disabled = false;
318
+ /** Makes the textarea read-only. @default false */
319
+ readonly = false;
320
+ /** Id of the element describing this textarea, for `aria-describedby`. @default '' */
321
+ ariaDescribedby = '';
322
+ /** Extra Tailwind classes merged onto the textarea via `cn()` (last-wins). */
323
+ class = '';
324
+ /** Emitted with the new value on every keystroke. */
325
+ valueChange = new EventEmitter();
326
+ value = '';
327
+ onChange = () => { };
328
+ onTouched = () => { };
329
+ constructor(cdr) {
330
+ this.cdr = cdr;
331
+ }
332
+ get computedClass() {
333
+ return cn('min-w-0 flex-1 resize-none border-none bg-transparent p-0 py-2 text-foreground outline-none', 'placeholder:text-muted-foreground', 'focus:outline-none focus:ring-0 focus:shadow-none', 'disabled:cursor-not-allowed', this.class);
334
+ }
335
+ onInputChange(event) {
336
+ if (this.readonly || this.disabled)
337
+ return;
338
+ const next = event.target.value;
339
+ this.value = next;
340
+ this.onChange(next);
341
+ this.valueChange.emit(next);
342
+ }
343
+ writeValue(value) {
344
+ this.value = value;
345
+ this.cdr.markForCheck();
346
+ }
347
+ registerOnChange(fn) {
348
+ this.onChange = fn;
349
+ }
350
+ registerOnTouched(fn) {
351
+ this.onTouched = fn;
352
+ }
353
+ setDisabledState(isDisabled) {
354
+ this.disabled = isDisabled;
355
+ this.cdr.markForCheck();
356
+ }
357
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputGroupTextareaComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
358
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InputGroupTextareaComponent, isStandalone: true, selector: "tolle-input-group-textarea", inputs: { id: "id", rows: "rows", placeholder: "placeholder", disabled: "disabled", readonly: "readonly", ariaDescribedby: "ariaDescribedby", class: "class" }, outputs: { valueChange: "valueChange" }, providers: [
359
+ {
360
+ provide: NG_VALUE_ACCESSOR,
361
+ useExisting: forwardRef(() => InputGroupTextareaComponent),
362
+ multi: true,
363
+ },
364
+ ], ngImport: i0, template: `
365
+ <textarea
366
+ [id]="id"
367
+ [rows]="rows"
368
+ [placeholder]="placeholder"
369
+ [disabled]="disabled"
370
+ [readOnly]="readonly"
371
+ [value]="value ?? ''"
372
+ [attr.aria-describedby]="ariaDescribedby || null"
373
+ [class]="computedClass"
374
+ (input)="onInputChange($event)"
375
+ (blur)="onTouched()"
376
+ ></textarea>
377
+ `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }] });
378
+ }
379
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputGroupTextareaComponent, decorators: [{
380
+ type: Component,
381
+ args: [{ selector: 'tolle-input-group-textarea', standalone: true, imports: [CommonModule, FormsModule], providers: [
382
+ {
383
+ provide: NG_VALUE_ACCESSOR,
384
+ useExisting: forwardRef(() => InputGroupTextareaComponent),
385
+ multi: true,
386
+ },
387
+ ], template: `
388
+ <textarea
389
+ [id]="id"
390
+ [rows]="rows"
391
+ [placeholder]="placeholder"
392
+ [disabled]="disabled"
393
+ [readOnly]="readonly"
394
+ [value]="value ?? ''"
395
+ [attr.aria-describedby]="ariaDescribedby || null"
396
+ [class]="computedClass"
397
+ (input)="onInputChange($event)"
398
+ (blur)="onTouched()"
399
+ ></textarea>
400
+ `, styles: [":host{display:block}\n"] }]
401
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { id: [{
402
+ type: Input
403
+ }], rows: [{
404
+ type: Input
405
+ }], placeholder: [{
406
+ type: Input
407
+ }], disabled: [{
408
+ type: Input
409
+ }], readonly: [{
410
+ type: Input
411
+ }], ariaDescribedby: [{
412
+ type: Input
413
+ }], class: [{
414
+ type: Input
415
+ }], valueChange: [{
416
+ type: Output
417
+ }] } });
418
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9pbnB1dC1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxHQUFHLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFFaEMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQzVCLCtIQUErSDtJQUM3SCwrRUFBK0U7SUFDL0UseUVBQXlFLEVBQzNFO0lBQ0UsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFO1lBQ0osRUFBRSxFQUFFLDBCQUEwQjtZQUM5QixFQUFFLEVBQUUsMEJBQTBCO1lBQzlCLE9BQU8sRUFBRSx5QkFBeUI7WUFDbEMsRUFBRSxFQUFFLDJCQUEyQjtTQUNoQztRQUNELE9BQU8sRUFBRTtZQUNQLElBQUksRUFBRSx3RkFBd0Y7WUFDOUYsS0FBSyxFQUFFLEVBQUU7U0FDVjtRQUNELDRFQUE0RTtRQUM1RSxvQkFBb0I7UUFDcEIsT0FBTyxFQUFFO1lBQ1AsSUFBSSxFQUFFLCtDQUErQztZQUNyRCxLQUFLLEVBQUUsRUFBRTtTQUNWO0tBQ0Y7SUFDRCxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtDQUNyRSxDQUNGLENBQUM7QUFJRjs7Ozs7OztHQU9HO0FBUUgs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RUFBRSxXQUFXLENBQUMsYUFDekI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsNEJBQTRCLENBQUM7NEJBQzFELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGLFlBQ1M7Ozs7Ozs7Ozs7Ozs7R0FhVDtzRkFJUSxFQUFFO3NCQUFWLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUdJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY3ZhLCB0eXBlIFZhcmlhbnRQcm9wcyB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG5jb25zdCBpbnB1dEdyb3VwVmFyaWFudHMgPSBjdmEoXG4gICdncm91cC9pbnB1dC1ncm91cCByZWxhdGl2ZSBmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgc2hhZG93LXNtIHRyYW5zaXRpb24tY29sb3JzICcgK1xuICAgICdmb2N1cy13aXRoaW46Ym9yZGVyLXByaW1hcnkvODAgZm9jdXMtd2l0aGluOnJpbmctNCBmb2N1cy13aXRoaW46cmluZy1yaW5nLzMwICcgK1xuICAgICdoYXMtW2lucHV0OmRpc2FibGVkXTpjdXJzb3Itbm90LWFsbG93ZWQgaGFzLVtpbnB1dDpkaXNhYmxlZF06b3BhY2l0eS01MCcsXG4gIHtcbiAgICB2YXJpYW50czoge1xuICAgICAgc2l6ZToge1xuICAgICAgICB4czogJ2gtOCBnYXAtMSBweC0xLjUgdGV4dC14cycsXG4gICAgICAgIHNtOiAnaC05IGdhcC0xLjUgcHgtMiB0ZXh0LXNtJyxcbiAgICAgICAgZGVmYXVsdDogJ2gtMTAgZ2FwLTIgcHgtMiB0ZXh0LXNtJyxcbiAgICAgICAgbGc6ICdoLTExIGdhcC0yIHB4LTMgdGV4dC1iYXNlJyxcbiAgICAgIH0sXG4gICAgICBpbnZhbGlkOiB7XG4gICAgICAgIHRydWU6ICdib3JkZXItZGVzdHJ1Y3RpdmUgZm9jdXMtd2l0aGluOmJvcmRlci1kZXN0cnVjdGl2ZS84MCBmb2N1cy13aXRoaW46cmluZy1kZXN0cnVjdGl2ZS8zMCcsXG4gICAgICAgIGZhbHNlOiAnJyxcbiAgICAgIH0sXG4gICAgICAvLyBgYmxvY2stc3RhcnRgIC8gYGJsb2NrLWVuZGAgYWRkb25zIHN0YWNrLCBzbyB0aGUgZ3JvdXAgY2FuIG5vIGxvbmdlciBiZSBhXG4gICAgICAvLyBmaXhlZC1oZWlnaHQgcm93LlxuICAgICAgc3RhY2tlZDoge1xuICAgICAgICB0cnVlOiAnaC1hdXRvIGZsZXgtY29sIGl0ZW1zLXN0cmV0Y2ggZ2FwLTAgcHgtMCBweS0wJyxcbiAgICAgICAgZmFsc2U6ICcnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRlZmF1bHRWYXJpYW50czogeyBzaXplOiAnZGVmYXVsdCcsIGludmFsaWQ6IGZhbHNlLCBzdGFja2VkOiBmYWxzZSB9LFxuICB9XG4pO1xuXG5leHBvcnQgdHlwZSBJbnB1dEdyb3VwUHJvcHMgPSBWYXJpYW50UHJvcHM8dHlwZW9mIGlucHV0R3JvdXBWYXJpYW50cz47XG5cbi8qKlxuICogV3JhcHMgYW4gaW5wdXQgd2l0aCBsZWFkaW5nL3RyYWlsaW5nIGFkZG9ucyDigJQgaWNvbnMsIHRleHQsIGJ1dHRvbnMgb3IgYVxuICogc3Bpbm5lciDigJQgaW5zaWRlIGEgc2luZ2xlIGJvcmRlcmVkIGNvbnRyb2wgdGhhdCBzaG93cyBvbmUgc2hhcmVkIGZvY3VzIHJpbmcuXG4gKlxuICogUHV0IGEgYHRvbGxlLWlucHV0LWdyb3VwLWlucHV0YCAob3IgYHRvbGxlLWlucHV0LWdyb3VwLXRleHRhcmVhYCkgaW5zaWRlLFxuICogYWxvbmdzaWRlIGFueSBudW1iZXIgb2YgYHRvbGxlLWlucHV0LWdyb3VwLWFkZG9uYCBlbGVtZW50cy5cbiAqIEBuZXdcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtaW5wdXQtZ3JvdXAnLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGA8ZGl2IFtjbGFzc109XCJjb21wdXRlZENsYXNzXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PmAsXG59KVxuZXhwb3J0IGNsYXNzIElucHV0R3JvdXBDb21wb25lbnQge1xuICAvKiogSGVpZ2h0IGFuZCB0ZXh0IHNpemUgb2YgdGhlIGdyb3VwOyBtYXRjaCBpdCB0byB0aGUgaW5wdXQgaW5zaWRlLiBAZGVmYXVsdCAnZGVmYXVsdCcgKi9cbiAgQElucHV0KCkgc2l6ZTogSW5wdXRHcm91cFByb3BzWydzaXplJ10gPSAnZGVmYXVsdCc7XG4gIC8qKiBBcHBsaWVzIHRoZSBkZXN0cnVjdGl2ZSBib3JkZXIgYW5kIGZvY3VzIHJpbmcuIEBkZWZhdWx0IGZhbHNlICovXG4gIEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcbiAgLyoqIFN3aXRjaGVzIHRvIGEgc3RhY2tlZCBjb2x1bW4gbGF5b3V0IGZvciBgYmxvY2stc3RhcnRgL2BibG9jay1lbmRgIGFkZG9ucy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgQElucHV0KCkgc3RhY2tlZCA9IGZhbHNlO1xuICAvKiogRXh0cmEgVGFpbHdpbmQgY2xhc3NlcyBtZXJnZWQgb250byB0aGUgZ3JvdXAgdmlhIGBjbigpYCAobGFzdC13aW5zKS4gKi9cbiAgQElucHV0KCkgY2xhc3MgPSAnJztcblxuICBnZXQgY29tcHV0ZWRDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICBpbnB1dEdyb3VwVmFyaWFudHMoeyBzaXplOiB0aGlzLnNpemUsIGludmFsaWQ6IHRoaXMuaW52YWxpZCwgc3RhY2tlZDogdGhpcy5zdGFja2VkIH0pLFxuICAgICAgdGhpcy5jbGFzc1xuICAgICk7XG4gIH1cbn1cblxuY29uc3QgaW5wdXRHcm91cEFkZG9uVmFyaWFudHMgPSBjdmEoJ2ZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGdhcC0xLjUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJywge1xuICB2YXJpYW50czoge1xuICAgIGFsaWduOiB7XG4gICAgICAnaW5saW5lLXN0YXJ0JzogJ29yZGVyLWZpcnN0JyxcbiAgICAgICdpbmxpbmUtZW5kJzogJ29yZGVyLWxhc3QnLFxuICAgICAgJ2Jsb2NrLXN0YXJ0JzogJ29yZGVyLWZpcnN0IHctZnVsbCBib3JkZXItYiBib3JkZXItYm9yZGVyIHB4LTMgcHktMS41JyxcbiAgICAgICdibG9jay1lbmQnOiAnb3JkZXItbGFzdCB3LWZ1bGwgYm9yZGVyLXQgYm9yZGVyLWJvcmRlciBweC0zIHB5LTEuNScsXG4gICAgfSxcbiAgfSxcbiAgZGVmYXVsdFZhcmlhbnRzOiB7IGFsaWduOiAnaW5saW5lLXN0YXJ0JyB9LFxufSk7XG5cbmV4cG9ydCB0eXBlIElucHV0R3JvdXBBZGRvblByb3BzID0gVmFyaWFudFByb3BzPHR5cGVvZiBpbnB1dEdyb3VwQWRkb25WYXJpYW50cz47XG5cbi8qKlxuICogQSBzbG90IGJlc2lkZSAob3IgYWJvdmUvYmVsb3cpIHRoZSBpbnB1dCBmb3IgaWNvbnMsIHRleHQgb3IgYnV0dG9ucy5cbiAqIFVzZSBgYmxvY2stc3RhcnRgIC8gYGJsb2NrLWVuZGAgdG9nZXRoZXIgd2l0aCB0aGUgZ3JvdXAncyBgc3RhY2tlZGAgaW5wdXQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWlucHV0LWdyb3VwLWFkZG9uJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogaW5saW5lLWZsZXg7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgPGRpdiBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzc1wiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj5gLFxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dEdyb3VwQWRkb25Db21wb25lbnQge1xuICAvKiogV2hlcmUgdGhlIGFkZG9uIHNpdHMgcmVsYXRpdmUgdG8gdGhlIGlucHV0LiBAZGVmYXVsdCAnaW5saW5lLXN0YXJ0JyAqL1xuICBASW5wdXQoKSBhbGlnbjogSW5wdXRHcm91cEFkZG9uUHJvcHNbJ2FsaWduJ10gPSAnaW5saW5lLXN0YXJ0JztcbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIGFkZG9uIHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG5cbiAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKGlucHV0R3JvdXBBZGRvblZhcmlhbnRzKHsgYWxpZ246IHRoaXMuYWxpZ24gfSksIHRoaXMuY2xhc3MpO1xuICB9XG59XG5cbmNvbnN0IGlucHV0R3JvdXBCdXR0b25WYXJpYW50cyA9IGN2YShcbiAgJ2lubGluZS1mbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSByb3VuZGVkIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzICcgK1xuICAgICdmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTEgJyArXG4gICAgJ2Rpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG4gIHtcbiAgICB2YXJpYW50czoge1xuICAgICAgdmFyaWFudDoge1xuICAgICAgICBkZWZhdWx0OiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcbiAgICAgICAgc2Vjb25kYXJ5OiAnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgaG92ZXI6Ymctc2Vjb25kYXJ5LzgwJyxcbiAgICAgICAgb3V0bGluZTogJ2JvcmRlciBib3JkZXItYm9yZGVyIGJnLXRyYW5zcGFyZW50IGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgZ2hvc3Q6ICdiZy10cmFuc3BhcmVudCBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG4gICAgICAgIGRlc3RydWN0aXZlOiAnYmctZGVzdHJ1Y3RpdmUgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIGhvdmVyOmJnLWRlc3RydWN0aXZlLzkwJyxcbiAgICAgIH0sXG4gICAgICBzaXplOiB7XG4gICAgICAgIHhzOiAnaC02IHB4LTIgdGV4dC14cycsXG4gICAgICAgIHNtOiAnaC03IHB4LTIuNSB0ZXh0LXNtJyxcbiAgICAgICAgJ2ljb24teHMnOiAnaC02IHctNiBwLTAgdGV4dC14cycsXG4gICAgICAgICdpY29uLXNtJzogJ2gtNyB3LTcgcC0wIHRleHQtc20nLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRlZmF1bHRWYXJpYW50czogeyB2YXJpYW50OiAnZ2hvc3QnLCBzaXplOiAnaWNvbi1zbScgfSxcbiAgfVxuKTtcblxuZXhwb3J0IHR5cGUgSW5wdXRHcm91cEJ1dHRvblByb3BzID0gVmFyaWFudFByb3BzPHR5cGVvZiBpbnB1dEdyb3VwQnV0dG9uVmFyaWFudHM+O1xuXG4vKiogQSBjb21wYWN0IGJ1dHRvbiBzaXplZCB0byBzaXQgaW5zaWRlIGFuIGlucHV0IGdyb3VwIGFkZG9uLiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtaW5wdXQtZ3JvdXAtYnV0dG9uJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogaW5saW5lLWZsZXg7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGJ1dHRvblxuICAgICAgW3R5cGVdPVwidHlwZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgfHwgbnVsbFwiXG4gICAgICBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzc1wiXG4gICAgICAoY2xpY2spPVwiY2xpY2tlZC5lbWl0KCRldmVudClcIlxuICAgID5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2J1dHRvbj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRHcm91cEJ1dHRvbkNvbXBvbmVudCB7XG4gIC8qKiBWaXN1YWwgc3R5bGUgb2YgdGhlIGJ1dHRvbi4gQGRlZmF1bHQgJ2dob3N0JyAqL1xuICBASW5wdXQoKSB2YXJpYW50OiBJbnB1dEdyb3VwQnV0dG9uUHJvcHNbJ3ZhcmlhbnQnXSA9ICdnaG9zdCc7XG4gIC8qKiBTaXplIG9mIHRoZSBidXR0b247IHRoZSBgaWNvbi0qYCBzaXplcyByZW5kZXIgYSBzcXVhcmUuIEBkZWZhdWx0ICdpY29uLXNtJyAqL1xuICBASW5wdXQoKSBzaXplOiBJbnB1dEdyb3VwQnV0dG9uUHJvcHNbJ3NpemUnXSA9ICdpY29uLXNtJztcbiAgLyoqIE5hdGl2ZSBidXR0b24gdHlwZS4gQGRlZmF1bHQgJ2J1dHRvbicgKi9cbiAgQElucHV0KCkgdHlwZTogJ2J1dHRvbicgfCAnc3VibWl0JyB8ICdyZXNldCcgPSAnYnV0dG9uJztcbiAgLyoqIERpc2FibGVzIHRoZSBidXR0b24uIEBkZWZhdWx0IGZhbHNlICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIC8qKiBBY2Nlc3NpYmxlIG5hbWUg4oCUIHJlcXVpcmVkIHdoZW4gdGhlIGJ1dHRvbiBzaG93cyBvbmx5IGFuIGljb24uIEBkZWZhdWx0ICcnICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbCA9ICcnO1xuICAvKiogRXh0cmEgVGFpbHdpbmQgY2xhc3NlcyBtZXJnZWQgb250byB0aGUgYnV0dG9uIHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG5cbiAgLyoqIEVtaXR0ZWQgd2l0aCB0aGUgY2xpY2sgZXZlbnQgd2hlbiB0aGUgYnV0dG9uIGlzIHByZXNzZWQuICovXG4gIEBPdXRwdXQoKSBjbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuXG4gIGdldCBjb21wdXRlZENsYXNzKCkge1xuICAgIHJldHVybiBjbihpbnB1dEdyb3VwQnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiB0aGlzLnZhcmlhbnQsIHNpemU6IHRoaXMuc2l6ZSB9KSwgdGhpcy5jbGFzcyk7XG4gIH1cbn1cblxuLyoqIFBsYWluIHRleHQgaW5zaWRlIGFuIGFkZG9uIOKAlCBhIHVuaXQsIHByZWZpeCwgb3IgY2hhcmFjdGVyIGNvdW50ZXIuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1pbnB1dC1ncm91cC10ZXh0JyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogaW5saW5lLWZsZXg7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgPHNwYW4gW2NsYXNzXT1cImNuKCdzZWxlY3Qtbm9uZSB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsIGNsYXNzKVwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L3NwYW4+YCxcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRHcm91cFRleHRDb21wb25lbnQge1xuICAvKiogRXh0cmEgVGFpbHdpbmQgY2xhc3NlcyBtZXJnZWQgb250byB0aGUgdGV4dCB2aWEgYGNuKClgIChsYXN0LXdpbnMpLiAqL1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICBwcm90ZWN0ZWQgY24gPSBjbjtcbn1cblxuLyoqXG4gKiBUaGUgaW5wdXQgaW5zaWRlIGEgYHRvbGxlLWlucHV0LWdyb3VwYC4gRGVsaWJlcmF0ZWx5IGJvcmRlcmxlc3MgYW5kXG4gKiB1bmZvY3VzYWJsZS1sb29raW5nIOKAlCB0aGUgc3Vycm91bmRpbmcgZ3JvdXAgb3ducyB0aGUgYm9yZGVyIGFuZCBmb2N1cyByaW5nLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1pbnB1dC1ncm91cC1pbnB1dCcsXG4gIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9J10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dEdyb3VwSW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aW5wdXRcbiAgICAgIFtpZF09XCJpZFwiXG4gICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgIFt2YWx1ZV09XCJ2YWx1ZSA/PyAnJ1wiXG4gICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImFyaWFEZXNjcmliZWRieSB8fCBudWxsXCJcbiAgICAgIFtjbGFzc109XCJjb21wdXRlZENsYXNzXCJcbiAgICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgKGJsdXIpPVwib25Ub3VjaGVkKClcIlxuICAgIC8+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIElucHV0R3JvdXBJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgLyoqIElkIGFwcGxpZWQgdG8gdGhlIHVuZGVybHlpbmcgYDxpbnB1dD5gLiAqL1xuICBASW5wdXQoKSBpZCA9IGBpbnB1dC1ncm91cC1pbnB1dC0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDExKX1gO1xuICAvKiogTmF0aXZlIGlucHV0IHR5cGUuIEBkZWZhdWx0ICd0ZXh0JyAqL1xuICBASW5wdXQoKSB0eXBlID0gJ3RleHQnO1xuICAvKiogUGxhY2Vob2xkZXIgdGV4dC4gQGRlZmF1bHQgJycgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbiAgLyoqIERpc2FibGVzIHRoZSBpbnB1dC4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgLyoqIE1ha2VzIHRoZSBpbnB1dCByZWFkLW9ubHkuIEBkZWZhdWx0IGZhbHNlICovXG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gIC8qKiBJZCBvZiB0aGUgZWxlbWVudCBkZXNjcmliaW5nIHRoaXMgaW5wdXQsIGZvciBgYXJpYS1kZXNjcmliZWRieWAuIEBkZWZhdWx0ICcnICovXG4gIEBJbnB1dCgpIGFyaWFEZXNjcmliZWRieSA9ICcnO1xuICAvKiogRXh0cmEgVGFpbHdpbmQgY2xhc3NlcyBtZXJnZWQgb250byB0aGUgaW5wdXQgdmlhIGBjbigpYCAobGFzdC13aW5zKS4gKi9cbiAgQElucHV0KCkgY2xhc3MgPSAnJztcblxuICAvKiogRW1pdHRlZCB3aXRoIHRoZSBuZXcgdmFsdWUgb24gZXZlcnkga2V5c3Ryb2tlLiAqL1xuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICB2YWx1ZTogc3RyaW5nIHwgbnVsbCA9ICcnO1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIGdldCBjb21wdXRlZENsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgICdtaW4tdy0wIGZsZXgtMSBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCBwLTAgdGV4dC1mb3JlZ3JvdW5kIG91dGxpbmUtbm9uZScsXG4gICAgICAncGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICdmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOnNoYWRvdy1ub25lJyxcbiAgICAgICdkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQnLFxuICAgICAgdGhpcy5jbGFzc1xuICAgICk7XG4gIH1cblxuICBvbklucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gbmV4dDtcbiAgICB0aGlzLm9uQ2hhbmdlKG5leHQpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG5cbi8qKiBUaGUgdGV4dGFyZWEgZXF1aXZhbGVudCBvZiBgdG9sbGUtaW5wdXQtZ3JvdXAtaW5wdXRgLiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtaW5wdXQtZ3JvdXAtdGV4dGFyZWEnLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW5wdXRHcm91cFRleHRhcmVhQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPHRleHRhcmVhXG4gICAgICBbaWRdPVwiaWRcIlxuICAgICAgW3Jvd3NdPVwicm93c1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtyZWFkT25seV09XCJyZWFkb25seVwiXG4gICAgICBbdmFsdWVdPVwidmFsdWUgPz8gJydcIlxuICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVkYnkgfHwgbnVsbFwiXG4gICAgICBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzc1wiXG4gICAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICA+PC90ZXh0YXJlYT5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRHcm91cFRleHRhcmVhQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAvKiogSWQgYXBwbGllZCB0byB0aGUgdW5kZXJseWluZyBgPHRleHRhcmVhPmAuICovXG4gIEBJbnB1dCgpIGlkID0gYGlucHV0LWdyb3VwLXRleHRhcmVhLSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTEpfWA7XG4gIC8qKiBWaXNpYmxlIHJvd3MuIEBkZWZhdWx0IDMgKi9cbiAgQElucHV0KCkgcm93cyA9IDM7XG4gIC8qKiBQbGFjZWhvbGRlciB0ZXh0LiBAZGVmYXVsdCAnJyAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xuICAvKiogRGlzYWJsZXMgdGhlIHRleHRhcmVhLiBAZGVmYXVsdCBmYWxzZSAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAvKiogTWFrZXMgdGhlIHRleHRhcmVhIHJlYWQtb25seS4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgLyoqIElkIG9mIHRoZSBlbGVtZW50IGRlc2NyaWJpbmcgdGhpcyB0ZXh0YXJlYSwgZm9yIGBhcmlhLWRlc2NyaWJlZGJ5YC4gQGRlZmF1bHQgJycgKi9cbiAgQElucHV0KCkgYXJpYURlc2NyaWJlZGJ5ID0gJyc7XG4gIC8qKiBFeHRyYSBUYWlsd2luZCBjbGFzc2VzIG1lcmdlZCBvbnRvIHRoZSB0ZXh0YXJlYSB2aWEgYGNuKClgIChsYXN0LXdpbnMpLiAqL1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuXG4gIC8qKiBFbWl0dGVkIHdpdGggdGhlIG5ldyB2YWx1ZSBvbiBldmVyeSBrZXlzdHJva2UuICovXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsID0gJyc7XG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ21pbi13LTAgZmxleC0xIHJlc2l6ZS1ub25lIGJvcmRlci1ub25lIGJnLXRyYW5zcGFyZW50IHAtMCBweS0yIHRleHQtZm9yZWdyb3VuZCBvdXRsaW5lLW5vbmUnLFxuICAgICAgJ3BsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAnZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpzaGFkb3ctbm9uZScsXG4gICAgICAnZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkJyxcbiAgICAgIHRoaXMuY2xhc3NcbiAgICApO1xuICB9XG5cbiAgb25JbnB1dENoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9IChldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy52YWx1ZSA9IG5leHQ7XG4gICAgdGhpcy5vbkNoYW5nZShuZXh0KTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQobmV4dCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIl19
@@ -183,22 +183,17 @@ export class InputComponent {
183
183
  </p>
184
184
  </ng-container>
185
185
  </div>
186
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
186
+ `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
187
187
  }
188
188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputComponent, decorators: [{
189
189
  type: Component,
190
- args: [{
191
- selector: 'tolle-input',
192
- standalone: true,
193
- imports: [CommonModule, FormsModule],
194
- providers: [
190
+ args: [{ selector: 'tolle-input', standalone: true, imports: [CommonModule, FormsModule], providers: [
195
191
  {
196
192
  provide: NG_VALUE_ACCESSOR,
197
193
  useExisting: forwardRef(() => InputComponent),
198
194
  multi: true
199
195
  }
200
- ],
201
- template: `
196
+ ], template: `
202
197
  <div class="flex flex-col gap-1.5 w-full">
203
198
  <label
204
199
  *ngIf="label"
@@ -254,8 +249,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
254
249
  </p>
255
250
  </ng-container>
256
251
  </div>
257
- `,
258
- }]
252
+ `, styles: [":host{display:block}\n"] }]
259
253
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { inputElement: [{
260
254
  type: ViewChild,
261
255
  args: ['inputElement']
@@ -286,4 +280,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
286
280
  }], hideHintOnFocus: [{
287
281
  type: Input
288
282
  }] } });
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFpQyxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7QUF1RWhDLE1BQU0sT0FBTyxjQUFjO0lBMEJMO0lBekJPLFlBQVksQ0FBZ0M7SUFFOUQsRUFBRSxHQUFXLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDaEUsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNuQixJQUFJLEdBQVcsRUFBRSxDQUFDO0lBQ2xCLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsSUFBSSxHQUFXLE1BQU0sQ0FBQztJQUN0QixXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLElBQUksR0FBbUMsU0FBUyxDQUFDO0lBQ2pELGNBQWMsR0FBVyxFQUFFLENBQUM7SUFDNUIsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUU1QixhQUFhO0lBQ0osUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLEtBQUssR0FBWSxLQUFLLENBQUM7SUFFaEMsaUJBQWlCO0lBQ1IsZUFBZSxHQUFZLElBQUksQ0FBQztJQUV6QyxLQUFLLEdBQVEsRUFBRSxDQUFDO0lBQ2hCLFFBQVEsR0FBUSxHQUFH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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdEVCwyREFoRVMsWUFBWSxrSUFBRSxXQUFXOzs0RkFrRXhCLGNBQWM7a0JBckUxQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztvQkFDcEMsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQzs0QkFDN0MsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdEVDtpQkFDRjtzRkFFNEIsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUVoQixFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBmb3J3YXJkUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xLjUgdy1mdWxsXCI+XG4gICAgICA8bGFiZWxcbiAgICAgICAgKm5nSWY9XCJsYWJlbFwiXG4gICAgICAgIFtmb3JdPVwiaWRcIlxuICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRMYWJlbENsYXNzXCI+XG4gICAgICAgIHt7IGxhYmVsIH19XG4gICAgICA8L2xhYmVsPlxuXG4gICAgICA8ZGl2XG4gICAgICAgIFtjbGFzc109XCJjb21wdXRlZENvbnRhaW5lckNsYXNzXCJcbiAgICAgICAgKGNsaWNrKT1cImZvY3VzSW5wdXQoKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGdyb3VwLWZvY3VzLXdpdGhpbjp0ZXh0LXByaW1hcnkgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3ByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICNpbnB1dEVsZW1lbnRcbiAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbcmVhZE9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygpXCJcbiAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRJbnB1dENsYXNzXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiZXJyb3IgfHwgbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJlcnJvciAmJiBlcnJvck1lc3NhZ2UgPyBpZCArICctZXJyb3InIDogKGhpbnQgPyBpZCArICctaGludCcgOiBudWxsKVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LW11dGVkLWZvcmVncm91bmQgZ3JvdXAtZm9jdXMtd2l0aGluOnRleHQtcHJpbWFyeSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0yMDBcIj5cbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkaXNhYmxlZFwiPlxuICAgICAgICA8cFxuICAgICAgICAgICpuZ0lmPVwiaGludCAmJiAhZXJyb3JcIlxuICAgICAgICAgIFtpZF09XCJpZCArICctaGludCdcIlxuICAgICAgICAgIGNsYXNzPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgICBbY2xhc3Mub3BhY2l0eS0wXT1cImlzRm9jdXNlZCAmJiBoaWRlSGludE9uRm9jdXNcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgaGludCB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwXG4gICAgICAgICAgKm5nSWY9XCJlcnJvciAmJiBlcnJvck1lc3NhZ2VcIlxuICAgICAgICAgIFtpZF09XCJpZCArICctZXJyb3InXCJcbiAgICAgICAgICBjbGFzcz1cInRleHQteHMgdGV4dC1kZXN0cnVjdGl2ZSBweC0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgICAgICA8L3A+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ2lucHV0RWxlbWVudCcpIGlucHV0RWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgQElucHV0KCkgaWQ6IHN0cmluZyA9IGBpbnB1dC0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KX1gO1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGhpbnQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSB0eXBlOiBzdHJpbmcgPSAndGV4dCc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgc2l6ZTogJ3hzJyB8ICdzbScgfCAnZGVmYXVsdCcgfCAnbGcnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBjb250YWluZXJDbGFzczogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSAnJztcblxuICAvLyBOZXcgU3RhdGVzXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVycm9yOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gRm9jdXMgYmVoYXZpb3JcbiAgQElucHV0KCkgaGlkZUhpbnRPbkZvY3VzOiBib29sZWFuID0gdHJ1ZTtcblxuICB2YWx1ZTogYW55ID0gJyc7XG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xuICBpc0ZvY3VzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuaGFzQXR0cmlidXRlKCdhdXRvZm9jdXMnKSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCkpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQgeyB0aGlzLm9uQ2hhbmdlID0gZm47IH1cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQgeyB0aGlzLm9uVG91Y2hlZCA9IGZuOyB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbklucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCB2YWwgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWwpO1xuICB9XG5cbiAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgZm9jdXNJbnB1dCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY24gPSBjbjtcblxuICBnZXQgY29tcHV0ZWRMYWJlbENsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgIFwidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgbGVhZGluZy1ub25lIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDBcIixcbiAgICAgIHRoaXMuZGlzYWJsZWQgJiYgXCJvcGFjaXR5LTUwXCJcbiAgICApO1xuICB9XG5cbiAgZ2V0IGNvbXB1dGVkQ29udGFpbmVyQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgLy8gQmFzZSBzdHlsZXNcbiAgICAgIFwiZ3JvdXAgcmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMFwiLFxuICAgICAgXCJiZy1iYWNrZ3JvdW5kXCIsXG5cbiAgICAgIC8vIEJvcmRlciBhbmQgc2hhZG93XG4gICAgICBcImJvcmRlci1pbnB1dCBzaGFkb3ctc21cIixcblxuICAgICAgLy8gU2l6aW5nXG4gICAgICB0aGlzLnNpemUgPT09ICd4cycgJiYgXCJoLTggcHgtMiBnYXAtMS41IHRleHQteHNcIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3NtJyAmJiBcImgtOSBweC0zIGdhcC0yIHRleHQtc21cIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2RlZmF1bHQnICYmIFwiaC0xMCBweC0zIGdhcC0yIHRleHQtc21cIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2xnJyAmJiBcImgtMTEgcHgtNCBnYXAtMyB0ZXh0LWJhc2VcIixcblxuICAgICAgLy8gRm9jdXMgc3RhdGUgLSBTSU1QTEUgQU5EIEVMRUdBTlQgTElLRSBaQVJEVUlcbiAgICAgIC8vIFRoZSBtYWdpYyBoYXBwZW5zIGluIENTUzogYm9yZGVyIGRhcmtlbnMgYXV0b21hdGljYWxseSBvbiBmb2N1c1xuICAgICAgISh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQpICYmIFtcbiAgICAgICAgXCJmb2N1cy13aXRoaW46Ym9yZGVyLXByaW1hcnkvODBcIixcbiAgICAgICAgXCJmb2N1cy13aXRoaW46cmluZy00XCIsXG4gICAgICAgIFwiZm9jdXMtd2l0aGluOnJpbmctcmluZy8zMFwiLFxuICAgICAgICBcImZvY3VzLXdpdGhpbjpyaW5nLW9mZnNldC0wXCIsXG4gICAgICAgIFwiZm9jdXMtd2l0aGluOnNoYWRvdy1ub25lXCIsXG4gICAgICBdLFxuXG4gICAgICAvLyBFcnJvciBzdGF0ZVxuICAgICAgdGhpcy5lcnJvciAmJiBbXG4gICAgICAgIFwiYm9yZGVyLWRlc3RydWN0aXZlXCIsXG4gICAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiBbXG4gICAgICAgICAgXCJmb2N1cy13aXRoaW46Ym9yZGVyLWRlc3RydWN0aXZlLzgwXCIsXG4gICAgICAgICAgXCJmb2N1cy13aXRoaW46cmluZy1kZXN0cnVjdGl2ZS8zMFwiXG4gICAgICAgIF1cbiAgICAgIF0sXG5cbiAgICAgIC8vIERpc2FibGVkIHN0YXRlXG4gICAgICB0aGlzLmRpc2FibGVkICYmIFtcbiAgICAgICAgXCJjdXJzb3Itbm90LWFsbG93ZWQgb3BhY2l0eS01MFwiLFxuICAgICAgICBcImJvcmRlci1vcGFjaXR5LTUwXCJcbiAgICAgIF0sXG5cbiAgICAgIC8vIFJlYWRvbmx5IHN0YXRlXG4gICAgICB0aGlzLnJlYWRvbmx5ICYmIFtcbiAgICAgICAgXCJjdXJzb3ItZGVmYXVsdFwiLFxuICAgICAgICBcImJvcmRlci1kYXNoZWRcIixcbiAgICAgICAgIXRoaXMuZGlzYWJsZWQgJiYgXCJmb2N1cy13aXRoaW46cmluZy0wIGZvY3VzLXdpdGhpbjpib3JkZXItb3BhY2l0eS0xMDBcIlxuICAgICAgXSxcblxuICAgICAgdGhpcy5jb250YWluZXJDbGFzc1xuICAgICk7XG4gIH1cblxuICBnZXQgY29tcHV0ZWRJbnB1dENsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgIC8vIEJhc2Ugc3R5bGVzXG4gICAgICBcImZsZXgtMSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSBwLTBcIixcbiAgICAgIFwicGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCIsXG5cbiAgICAgIC8vIFJlbW92ZSBhbGwgZGVmYXVsdCBmb2N1cyBzdHlsZXNcbiAgICAgIFwiZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpzaGFkb3ctbm9uZVwiLFxuXG4gICAgICAvLyBUZXh0IHNpemluZ1xuICAgICAgdGhpcy5zaXplID09PSAneHMnICYmIFwidGV4dC14c1wiLFxuICAgICAgdGhpcy5zaXplID09PSAnc20nICYmIFwidGV4dC1zbVwiLFxuICAgICAgdGhpcy5zaXplID09PSAnZGVmYXVsdCcgJiYgXCJ0ZXh0LXNtXCIsXG4gICAgICB0aGlzLnNpemUgPT09ICdsZycgJiYgXCJ0ZXh0LWJhc2VcIixcblxuICAgICAgLy8gQ3Vyc29yIHN0YXRlc1xuICAgICAgdGhpcy5kaXNhYmxlZCAmJiBcImN1cnNvci1ub3QtYWxsb3dlZFwiLFxuICAgICAgdGhpcy5yZWFkb25seSAmJiBcImN1cnNvci1kZWZhdWx0XCIsXG5cbiAgICAgIC8vIFRleHQgY29sb3JcbiAgICAgIFwidGV4dC1mb3JlZ3JvdW5kXCIsXG5cbiAgICAgIC8vIFNlbGVjdGlvbiBjb2xvclxuICAgICAgXCJzZWxlY3Rpb246YmctcHJpbWFyeS8yMCBzZWxlY3Rpb246dGV4dC1mb3JlZ3JvdW5kXCIsXG5cbiAgICAgIHRoaXMuY2xhc3NcbiAgICApO1xuICB9XG59XG4iXX0=
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFpQyxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7QUF3RWhDLE1BQU0sT0FBTyxjQUFjO0lBMEJMO0lBekJPLFlBQVksQ0FBZ0M7SUFFOUQsRUFBRSxHQUFXLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDaEUsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNuQixJQUFJLEdBQVcsRUFBRSxDQUFDO0lBQ2xCLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsSUFBSSxHQUFXLE1BQU0sQ0FBQztJQUN0QixXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLElBQUksR0FBbUMsU0FBUyxDQUFDO0lBQ2pELGNBQWMsR0FBVyxFQUFFLENBQUM7SUFDNUIsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUU1QixhQUFhO0lBQ0osUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLEtBQUssR0FBWSxLQUFLLENBQUM7SUFFaEMsaUJBQWlCO0lBQ1IsZUFBZSxHQUFZLElBQUksQ0FBQztJQUV6QyxLQUFLLEdBQVEsRUFBRSxDQUFDO0lBQ2hCLFFBQVEsR0FBUSxHQUFH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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdEVCwrRkFoRVMsWUFBWSxrSUFBRSxXQUFXOzs0RkFrRXhCLGNBQWM7a0JBdEUxQixTQUFTOytCQUNFLGFBQWEsY0FFWCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLGFBQ3pCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQzs0QkFDN0MsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3RFQ7c0ZBRzBCLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFFaEIsRUFBRTtzQkFBVixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgZm9yd2FyZFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1pbnB1dCcsXG4gIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9J10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMS41IHctZnVsbFwiPlxuICAgICAgPGxhYmVsXG4gICAgICAgICpuZ0lmPVwibGFiZWxcIlxuICAgICAgICBbZm9yXT1cImlkXCJcbiAgICAgICAgW2NsYXNzXT1cImNvbXB1dGVkTGFiZWxDbGFzc1wiPlxuICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPGRpdlxuICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRDb250YWluZXJDbGFzc1wiXG4gICAgICAgIChjbGljayk9XCJmb2N1c0lucHV0KClcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBncm91cC1mb2N1cy13aXRoaW46dGV4dC1wcmltYXJ5IHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTIwMFwiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltwcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAjaW5wdXRFbGVtZW50XG4gICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXG4gICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW2NsYXNzXT1cImNvbXB1dGVkSW5wdXRDbGFzc1wiXG4gICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImVycm9yIHx8IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZXJyb3IgJiYgZXJyb3JNZXNzYWdlID8gaWQgKyAnLWVycm9yJyA6IChoaW50ID8gaWQgKyAnLWhpbnQnIDogbnVsbClcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGdyb3VwLWZvY3VzLXdpdGhpbjp0ZXh0LXByaW1hcnkgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3N1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZGlzYWJsZWRcIj5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cImhpbnQgJiYgIWVycm9yXCJcbiAgICAgICAgICBbaWRdPVwiaWQgKyAnLWhpbnQnXCJcbiAgICAgICAgICBjbGFzcz1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTEgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMFwiXG4gICAgICAgICAgW2NsYXNzLm9wYWNpdHktMF09XCJpc0ZvY3VzZWQgJiYgaGlkZUhpbnRPbkZvY3VzXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGhpbnQgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cFxuICAgICAgICAgICpuZ0lmPVwiZXJyb3IgJiYgZXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICBbaWRdPVwiaWQgKyAnLWVycm9yJ1wiXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtZGVzdHJ1Y3RpdmUgcHgtMVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnKSBpbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmcgPSBgaW5wdXQtJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDtcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBoaW50OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgdHlwZTogc3RyaW5nID0gJ3RleHQnO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNpemU6ICd4cycgfCAnc20nIHwgJ2RlZmF1bHQnIHwgJ2xnJyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgY29udGFpbmVyQ2xhc3M6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBjbGFzczogc3RyaW5nID0gJyc7XG5cbiAgLy8gTmV3IFN0YXRlc1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBlcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEZvY3VzIGJlaGF2aW9yXG4gIEBJbnB1dCgpIGhpZGVIaW50T25Gb2N1czogYm9vbGVhbiA9IHRydWU7XG5cbiAgdmFsdWU6IGFueSA9ICcnO1xuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcbiAgaXNGb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuaW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnYXV0b2ZvY3VzJykpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKTtcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25JbnB1dENoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgY29uc3QgdmFsID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgIHRoaXMub25DaGFuZ2UodmFsKTtcbiAgfVxuXG4gIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICB9XG5cbiAgb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIGZvY3VzSW5wdXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmIHRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNuID0gY247XG5cbiAgZ2V0IGNvbXB1dGVkTGFiZWxDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICBcInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIGxlYWRpbmctbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwXCIsXG4gICAgICB0aGlzLmRpc2FibGVkICYmIFwib3BhY2l0eS01MFwiXG4gICAgKTtcbiAgfVxuXG4gIGdldCBjb21wdXRlZENvbnRhaW5lckNsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgIC8vIEJhc2Ugc3R5bGVzXG4gICAgICBcImdyb3VwIHJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDBcIixcbiAgICAgIFwiYmctYmFja2dyb3VuZFwiLFxuXG4gICAgICAvLyBCb3JkZXIgYW5kIHNoYWRvd1xuICAgICAgXCJib3JkZXItaW5wdXQgc2hhZG93LXNtXCIsXG5cbiAgICAgIC8vIFNpemluZ1xuICAgICAgdGhpcy5zaXplID09PSAneHMnICYmIFwiaC04IHB4LTIgZ2FwLTEuNSB0ZXh0LXhzXCIsXG4gICAgICB0aGlzLnNpemUgPT09ICdzbScgJiYgXCJoLTkgcHgtMyBnYXAtMiB0ZXh0LXNtXCIsXG4gICAgICB0aGlzLnNpemUgPT09ICdkZWZhdWx0JyAmJiBcImgtMTAgcHgtMyBnYXAtMiB0ZXh0LXNtXCIsXG4gICAgICB0aGlzLnNpemUgPT09ICdsZycgJiYgXCJoLTExIHB4LTQgZ2FwLTMgdGV4dC1iYXNlXCIsXG5cbiAgICAgIC8vIEZvY3VzIHN0YXRlIC0gU0lNUExFIEFORCBFTEVHQU5UIExJS0UgWkFSRFVJXG4gICAgICAvLyBUaGUgbWFnaWMgaGFwcGVucyBpbiBDU1M6IGJvcmRlciBkYXJrZW5zIGF1dG9tYXRpY2FsbHkgb24gZm9jdXNcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiBbXG4gICAgICAgIFwiZm9jdXMtd2l0aGluOmJvcmRlci1wcmltYXJ5LzgwXCIsXG4gICAgICAgIFwiZm9jdXMtd2l0aGluOnJpbmctNFwiLFxuICAgICAgICBcImZvY3VzLXdpdGhpbjpyaW5nLXJpbmcvMzBcIixcbiAgICAgICAgXCJmb2N1cy13aXRoaW46cmluZy1vZmZzZXQtMFwiLFxuICAgICAgICBcImZvY3VzLXdpdGhpbjpzaGFkb3ctbm9uZVwiLFxuICAgICAgXSxcblxuICAgICAgLy8gRXJyb3Igc3RhdGVcbiAgICAgIHRoaXMuZXJyb3IgJiYgW1xuICAgICAgICBcImJvcmRlci1kZXN0cnVjdGl2ZVwiLFxuICAgICAgICAhKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgJiYgW1xuICAgICAgICAgIFwiZm9jdXMtd2l0aGluOmJvcmRlci1kZXN0cnVjdGl2ZS84MFwiLFxuICAgICAgICAgIFwiZm9jdXMtd2l0aGluOnJpbmctZGVzdHJ1Y3RpdmUvMzBcIlxuICAgICAgICBdXG4gICAgICBdLFxuXG4gICAgICAvLyBEaXNhYmxlZCBzdGF0ZVxuICAgICAgdGhpcy5kaXNhYmxlZCAmJiBbXG4gICAgICAgIFwiY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTBcIixcbiAgICAgICAgXCJib3JkZXItb3BhY2l0eS01MFwiXG4gICAgICBdLFxuXG4gICAgICAvLyBSZWFkb25seSBzdGF0ZVxuICAgICAgdGhpcy5yZWFkb25seSAmJiBbXG4gICAgICAgIFwiY3Vyc29yLWRlZmF1bHRcIixcbiAgICAgICAgXCJib3JkZXItZGFzaGVkXCIsXG4gICAgICAgICF0aGlzLmRpc2FibGVkICYmIFwiZm9jdXMtd2l0aGluOnJpbmctMCBmb2N1cy13aXRoaW46Ym9yZGVyLW9wYWNpdHktMTAwXCJcbiAgICAgIF0sXG5cbiAgICAgIHRoaXMuY29udGFpbmVyQ2xhc3NcbiAgICApO1xuICB9XG5cbiAgZ2V0IGNvbXB1dGVkSW5wdXRDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICAvLyBCYXNlIHN0eWxlc1xuICAgICAgXCJmbGV4LTEgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcC0wXCIsXG4gICAgICBcInBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiLFxuXG4gICAgICAvLyBSZW1vdmUgYWxsIGRlZmF1bHQgZm9jdXMgc3R5bGVzXG4gICAgICBcImZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6c2hhZG93LW5vbmVcIixcblxuICAgICAgLy8gVGV4dCBzaXppbmdcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyAmJiBcInRleHQteHNcIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3NtJyAmJiBcInRleHQtc21cIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2RlZmF1bHQnICYmIFwidGV4dC1zbVwiLFxuICAgICAgdGhpcy5zaXplID09PSAnbGcnICYmIFwidGV4dC1iYXNlXCIsXG5cbiAgICAgIC8vIEN1cnNvciBzdGF0ZXNcbiAgICAgIHRoaXMuZGlzYWJsZWQgJiYgXCJjdXJzb3Itbm90LWFsbG93ZWRcIixcbiAgICAgIHRoaXMucmVhZG9ubHkgJiYgXCJjdXJzb3ItZGVmYXVsdFwiLFxuXG4gICAgICAvLyBUZXh0IGNvbG9yXG4gICAgICBcInRleHQtZm9yZWdyb3VuZFwiLFxuXG4gICAgICAvLyBTZWxlY3Rpb24gY29sb3JcbiAgICAgIFwic2VsZWN0aW9uOmJnLXByaW1hcnkvMjAgc2VsZWN0aW9uOnRleHQtZm9yZWdyb3VuZFwiLFxuXG4gICAgICB0aGlzLmNsYXNzXG4gICAgKTtcbiAgfVxufVxuIl19