@tolle_/tolle-ui 18.2.30 → 18.3.1

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 (55) hide show
  1. package/esm2022/lib/alert-dialog-dynamic.component.mjs +8 -3
  2. package/esm2022/lib/alert-dialog.component.mjs +39 -6
  3. package/esm2022/lib/alert-dialog.service.mjs +38 -6
  4. package/esm2022/lib/bar-list.component.mjs +95 -0
  5. package/esm2022/lib/category-bar.component.mjs +130 -0
  6. package/esm2022/lib/chart-spark.component.mjs +120 -0
  7. package/esm2022/lib/chart.component.mjs +131 -45
  8. package/esm2022/lib/chart.service.mjs +33 -8
  9. package/esm2022/lib/context-menu.service.mjs +11 -7
  10. package/esm2022/lib/modal-ref.mjs +36 -7
  11. package/esm2022/lib/modal.component.mjs +42 -28
  12. package/esm2022/lib/modal.mjs +2 -29
  13. package/esm2022/lib/modal.service.mjs +26 -4
  14. package/esm2022/lib/progress-circle.component.mjs +138 -0
  15. package/esm2022/lib/resizable-panel.component.mjs +5 -5
  16. package/esm2022/lib/segment.component.mjs +3 -3
  17. package/esm2022/lib/tracker.component.mjs +84 -0
  18. package/esm2022/public-api.mjs +6 -1
  19. package/fesm2022/tolle-ui.mjs +900 -139
  20. package/fesm2022/tolle-ui.mjs.map +1 -1
  21. package/lib/alert-dialog-dynamic.component.d.ts +5 -0
  22. package/lib/alert-dialog.component.d.ts +13 -0
  23. package/lib/bar-list.component.d.ts +39 -0
  24. package/lib/category-bar.component.d.ts +49 -0
  25. package/lib/chart-spark.component.d.ts +49 -0
  26. package/lib/chart.component.d.ts +68 -9
  27. package/lib/chart.service.d.ts +25 -5
  28. package/lib/modal-ref.d.ts +6 -1
  29. package/lib/modal.component.d.ts +7 -4
  30. package/lib/modal.d.ts +9 -3
  31. package/lib/progress-circle.component.d.ts +35 -0
  32. package/lib/tracker.component.d.ts +39 -0
  33. package/package.json +3 -2
  34. package/preset.js +7 -1
  35. package/public-api.d.ts +5 -0
  36. package/registry/docs-content.json +330 -2
  37. package/registry/llms-full.txt +98 -2
  38. package/registry/llms.txt +5 -0
  39. package/registry/manifest.json +380 -3
  40. package/registry/r/alert-dialog-dynamic.json +1 -1
  41. package/registry/r/alert-dialog.json +1 -1
  42. package/registry/r/bar-list.json +21 -0
  43. package/registry/r/category-bar.json +21 -0
  44. package/registry/r/chart-pie.json +1 -1
  45. package/registry/r/chart-spark.json +30 -0
  46. package/registry/r/chart.json +2 -2
  47. package/registry/r/context-menu-trigger.json +1 -1
  48. package/registry/r/context-menu.json +1 -1
  49. package/registry/r/modal.json +3 -3
  50. package/registry/r/progress-circle.json +21 -0
  51. package/registry/r/resizable-panel.json +1 -1
  52. package/registry/r/segment.json +1 -1
  53. package/registry/r/tracker.json +25 -0
  54. package/registry/registry.json +112 -0
  55. package/theme.css +15 -3
@@ -0,0 +1,120 @@
1
+ import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef, inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ChartComponent, ChartLineComponent, ChartAreaComponent, ChartBarComponent, } from './chart.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ /**
7
+ * A minimal inline chart: one series, no grid, no axes, no legend — sized to
8
+ * sit next to a number in a table cell or a stat card. A thin composition
9
+ * over `tolle-chart`; it draws nothing of its own and inherits `--chart-1`
10
+ * the same way any other single-series chart in this library does.
11
+ * @new
12
+ */
13
+ export class ChartSparkComponent {
14
+ /**
15
+ * Angular writes a bound `class` input through its styling path, which does
16
+ * not mark an OnPush component dirty — without this hook the component keeps
17
+ * rendering the class it was born with.
18
+ */
19
+ ngOnChanges() {
20
+ this.cdr.markForCheck();
21
+ }
22
+ /** Rows to plot, in x order. @default [] */
23
+ data = [];
24
+ /** Row key holding each row's numeric value. @default 'value' */
25
+ valueKey = 'value';
26
+ /** Row key holding each row's x position. Only matters once `hover` is on. @default '' */
27
+ xKey = '';
28
+ /** Which mark to draw. @default 'line' */
29
+ type = 'line';
30
+ /** Interpolation for line/area. @default 'linear' */
31
+ curve = 'linear';
32
+ /** Largest bar thickness in px, used when `type` is 'bar'. @default 6 */
33
+ maxBarWidth = 6;
34
+ /** Height in px. @default 32 */
35
+ height = 32;
36
+ /** Renders the crosshair, hit layer and tooltip. @default false */
37
+ hover = false;
38
+ /** Shows the data table instead of leaving it visually hidden. @default false */
39
+ showTable = false;
40
+ /** Accessible name, used as the svg <title>. @default '' */
41
+ ariaLabel = '';
42
+ /** Longer summary used as the svg <desc>. Falls back to `ariaLabel`. @default '' */
43
+ description = '';
44
+ /** Space reserved around the plot — a sparkline has no axis labels to fit. @default { top: 2, right: 2, bottom: 2, left: 2 } */
45
+ margin = { top: 2, right: 2, bottom: 2, left: 2 };
46
+ /** Extra Tailwind classes merged onto the chart via `cn()` (last-wins). */
47
+ class = '';
48
+ cdr = inject(ChangeDetectorRef);
49
+ /** Always exactly one series, reading `valueKey` off each row. */
50
+ get series() {
51
+ return [{ key: this.valueKey, label: this.ariaLabel || this.valueKey }];
52
+ }
53
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartSparkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
54
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ChartSparkComponent, isStandalone: true, selector: "tolle-chart-spark", inputs: { data: "data", valueKey: "valueKey", xKey: "xKey", type: "type", curve: "curve", maxBarWidth: "maxBarWidth", height: "height", hover: "hover", showTable: "showTable", ariaLabel: "ariaLabel", description: "description", margin: "margin", class: "class" }, usesOnChanges: true, ngImport: i0, template: `
55
+ <tolle-chart
56
+ [class]="class"
57
+ [data]="data"
58
+ [series]="series"
59
+ [xKey]="xKey"
60
+ [height]="height"
61
+ [margin]="margin"
62
+ [hover]="hover"
63
+ [showTable]="showTable"
64
+ [ariaLabel]="ariaLabel"
65
+ [description]="description"
66
+ >
67
+ <svg:g *ngIf="type === 'line'" tolle-chart-line [seriesKey]="valueKey" [curve]="curve"></svg:g>
68
+ <svg:g *ngIf="type === 'area'" tolle-chart-area [seriesKey]="valueKey" [curve]="curve"></svg:g>
69
+ <svg:g *ngIf="type === 'bar'" tolle-chart-bar [seriesKey]="valueKey" [maxWidth]="maxBarWidth"></svg:g>
70
+ </tolle-chart>
71
+ `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ChartComponent, selector: "tolle-chart", inputs: ["data", "series", "xKey", "height", "margin", "ariaLabel", "description", "stacked", "orientation", "hover", "showTable", "xHeader", "variant", "density", "class"], outputs: ["activeIndexChange"] }, { kind: "component", type: ChartLineComponent, selector: "svg:g[tolle-chart-line]", inputs: ["seriesKey", "curve", "showDots", "dotRadius", "class"] }, { kind: "component", type: ChartAreaComponent, selector: "svg:g[tolle-chart-area]", inputs: ["seriesKey", "curve", "fillOpacity", "class"] }, { kind: "component", type: ChartBarComponent, selector: "svg:g[tolle-chart-bar]", inputs: ["seriesKey", "radius", "maxWidth", "gap", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
72
+ }
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartSparkComponent, decorators: [{
74
+ type: Component,
75
+ args: [{ selector: 'tolle-chart-spark', standalone: true, imports: [CommonModule, ChartComponent, ChartLineComponent, ChartAreaComponent, ChartBarComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
76
+ <tolle-chart
77
+ [class]="class"
78
+ [data]="data"
79
+ [series]="series"
80
+ [xKey]="xKey"
81
+ [height]="height"
82
+ [margin]="margin"
83
+ [hover]="hover"
84
+ [showTable]="showTable"
85
+ [ariaLabel]="ariaLabel"
86
+ [description]="description"
87
+ >
88
+ <svg:g *ngIf="type === 'line'" tolle-chart-line [seriesKey]="valueKey" [curve]="curve"></svg:g>
89
+ <svg:g *ngIf="type === 'area'" tolle-chart-area [seriesKey]="valueKey" [curve]="curve"></svg:g>
90
+ <svg:g *ngIf="type === 'bar'" tolle-chart-bar [seriesKey]="valueKey" [maxWidth]="maxBarWidth"></svg:g>
91
+ </tolle-chart>
92
+ `, styles: [":host{display:block}\n"] }]
93
+ }], propDecorators: { data: [{
94
+ type: Input
95
+ }], valueKey: [{
96
+ type: Input
97
+ }], xKey: [{
98
+ type: Input
99
+ }], type: [{
100
+ type: Input
101
+ }], curve: [{
102
+ type: Input
103
+ }], maxBarWidth: [{
104
+ type: Input
105
+ }], height: [{
106
+ type: Input
107
+ }], hover: [{
108
+ type: Input
109
+ }], showTable: [{
110
+ type: Input
111
+ }], ariaLabel: [{
112
+ type: Input
113
+ }], description: [{
114
+ type: Input
115
+ }], margin: [{
116
+ type: Input
117
+ }], class: [{
118
+ type: Input
119
+ }] } });
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtc3BhcmsuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9jaGFydC1zcGFyay5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsaUJBQWlCLEdBR2xCLE1BQU0sbUJBQW1CLENBQUM7OztBQUUzQjs7Ozs7O0dBTUc7QUEwQkgsTUFBTSxPQUFPLG1CQUFtQjtJQUM5Qjs7OztPQUlHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELDRDQUE0QztJQUNuQyxJQUFJLEdBQTBCLEVBQUUsQ0FBQztJQUMxQyxpRUFBaUU7SUFDeEQsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUM1QiwwRkFBMEY7SUFDakYsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNuQiwwQ0FBMEM7SUFDakMsSUFBSSxHQUE0QixNQUFNLENBQUM7SUFDaEQscURBQXFEO0lBQzVDLEtBQUssR0FBd0IsUUFBUSxDQUFDO0lBQy9DLHlFQUF5RTtJQUNoRSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLGdDQUFnQztJQUN2QixNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLG1FQUFtRTtJQUMxRCxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLGlGQUFpRjtJQUN4RSxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzNCLDREQUE0RDtJQUNuRCxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLG9GQUFvRjtJQUMzRSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQzFCLGdJQUFnSTtJQUN2SCxNQUFNLEdBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3hFLDJFQUEyRTtJQUNsRSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRUgsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRWpELGtFQUFrRTtJQUNsRSxJQUFJLE1BQU07UUFDUixPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO3dHQTFDVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiwwV0FuQnBCOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCVCwrRkFuQlMsWUFBWSxtSUFBRSxjQUFjLHNRQUFFLGtCQUFrQixzSUFBRSxrQkFBa0IsNEhBQUUsaUJBQWlCOzs0RkFxQnRGLG1CQUFtQjtrQkF6Qi9CLFNBQVM7K0JBQ0UsbUJBQW1CLGNBRWpCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsbUJBQ2pGLHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJUOzhCQWFRLElBQUk7c0JBQVosS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBPbkNoYW5nZXMsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYXJ0Q29tcG9uZW50LFxuICBDaGFydExpbmVDb21wb25lbnQsXG4gIENoYXJ0QXJlYUNvbXBvbmVudCxcbiAgQ2hhcnRCYXJDb21wb25lbnQsXG4gIHR5cGUgQ2hhcnRNYXJnaW4sXG4gIHR5cGUgQ2hhcnRTZXJpZXMsXG59IGZyb20gJy4vY2hhcnQuY29tcG9uZW50JztcblxuLyoqXG4gKiBBIG1pbmltYWwgaW5saW5lIGNoYXJ0OiBvbmUgc2VyaWVzLCBubyBncmlkLCBubyBheGVzLCBubyBsZWdlbmQg4oCUIHNpemVkIHRvXG4gKiBzaXQgbmV4dCB0byBhIG51bWJlciBpbiBhIHRhYmxlIGNlbGwgb3IgYSBzdGF0IGNhcmQuIEEgdGhpbiBjb21wb3NpdGlvblxuICogb3ZlciBgdG9sbGUtY2hhcnRgOyBpdCBkcmF3cyBub3RoaW5nIG9mIGl0cyBvd24gYW5kIGluaGVyaXRzIGAtLWNoYXJ0LTFgXG4gKiB0aGUgc2FtZSB3YXkgYW55IG90aGVyIHNpbmdsZS1zZXJpZXMgY2hhcnQgaW4gdGhpcyBsaWJyYXJ5IGRvZXMuXG4gKiBAbmV3XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWNoYXJ0LXNwYXJrJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ2hhcnRDb21wb25lbnQsIENoYXJ0TGluZUNvbXBvbmVudCwgQ2hhcnRBcmVhQ29tcG9uZW50LCBDaGFydEJhckNvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx0b2xsZS1jaGFydFxuICAgICAgW2NsYXNzXT1cImNsYXNzXCJcbiAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgW3Nlcmllc109XCJzZXJpZXNcIlxuICAgICAgW3hLZXldPVwieEtleVwiXG4gICAgICBbaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgICBbbWFyZ2luXT1cIm1hcmdpblwiXG4gICAgICBbaG92ZXJdPVwiaG92ZXJcIlxuICAgICAgW3Nob3dUYWJsZV09XCJzaG93VGFibGVcIlxuICAgICAgW2FyaWFMYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cImRlc2NyaXB0aW9uXCJcbiAgICA+XG4gICAgICA8c3ZnOmcgKm5nSWY9XCJ0eXBlID09PSAnbGluZSdcIiB0b2xsZS1jaGFydC1saW5lIFtzZXJpZXNLZXldPVwidmFsdWVLZXlcIiBbY3VydmVdPVwiY3VydmVcIj48L3N2ZzpnPlxuICAgICAgPHN2ZzpnICpuZ0lmPVwidHlwZSA9PT0gJ2FyZWEnXCIgdG9sbGUtY2hhcnQtYXJlYSBbc2VyaWVzS2V5XT1cInZhbHVlS2V5XCIgW2N1cnZlXT1cImN1cnZlXCI+PC9zdmc6Zz5cbiAgICAgIDxzdmc6ZyAqbmdJZj1cInR5cGUgPT09ICdiYXInXCIgdG9sbGUtY2hhcnQtYmFyIFtzZXJpZXNLZXldPVwidmFsdWVLZXlcIiBbbWF4V2lkdGhdPVwibWF4QmFyV2lkdGhcIj48L3N2ZzpnPlxuICAgIDwvdG9sbGUtY2hhcnQ+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0U3BhcmtDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICogQW5ndWxhciB3cml0ZXMgYSBib3VuZCBgY2xhc3NgIGlucHV0IHRocm91Z2ggaXRzIHN0eWxpbmcgcGF0aCwgd2hpY2ggZG9lc1xuICAgKiBub3QgbWFyayBhbiBPblB1c2ggY29tcG9uZW50IGRpcnR5IOKAlCB3aXRob3V0IHRoaXMgaG9vayB0aGUgY29tcG9uZW50IGtlZXBzXG4gICAqIHJlbmRlcmluZyB0aGUgY2xhc3MgaXQgd2FzIGJvcm4gd2l0aC5cbiAgICovXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIFJvd3MgdG8gcGxvdCwgaW4geCBvcmRlci4gQGRlZmF1bHQgW10gKi9cbiAgQElucHV0KCkgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PltdID0gW107XG4gIC8qKiBSb3cga2V5IGhvbGRpbmcgZWFjaCByb3cncyBudW1lcmljIHZhbHVlLiBAZGVmYXVsdCAndmFsdWUnICovXG4gIEBJbnB1dCgpIHZhbHVlS2V5ID0gJ3ZhbHVlJztcbiAgLyoqIFJvdyBrZXkgaG9sZGluZyBlYWNoIHJvdydzIHggcG9zaXRpb24uIE9ubHkgbWF0dGVycyBvbmNlIGBob3ZlcmAgaXMgb24uIEBkZWZhdWx0ICcnICovXG4gIEBJbnB1dCgpIHhLZXkgPSAnJztcbiAgLyoqIFdoaWNoIG1hcmsgdG8gZHJhdy4gQGRlZmF1bHQgJ2xpbmUnICovXG4gIEBJbnB1dCgpIHR5cGU6ICdsaW5lJyB8ICdhcmVhJyB8ICdiYXInID0gJ2xpbmUnO1xuICAvKiogSW50ZXJwb2xhdGlvbiBmb3IgbGluZS9hcmVhLiBAZGVmYXVsdCAnbGluZWFyJyAqL1xuICBASW5wdXQoKSBjdXJ2ZTogJ2xpbmVhcicgfCAnc21vb3RoJyA9ICdsaW5lYXInO1xuICAvKiogTGFyZ2VzdCBiYXIgdGhpY2tuZXNzIGluIHB4LCB1c2VkIHdoZW4gYHR5cGVgIGlzICdiYXInLiBAZGVmYXVsdCA2ICovXG4gIEBJbnB1dCgpIG1heEJhcldpZHRoID0gNjtcbiAgLyoqIEhlaWdodCBpbiBweC4gQGRlZmF1bHQgMzIgKi9cbiAgQElucHV0KCkgaGVpZ2h0ID0gMzI7XG4gIC8qKiBSZW5kZXJzIHRoZSBjcm9zc2hhaXIsIGhpdCBsYXllciBhbmQgdG9vbHRpcC4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgQElucHV0KCkgaG92ZXIgPSBmYWxzZTtcbiAgLyoqIFNob3dzIHRoZSBkYXRhIHRhYmxlIGluc3RlYWQgb2YgbGVhdmluZyBpdCB2aXN1YWxseSBoaWRkZW4uIEBkZWZhdWx0IGZhbHNlICovXG4gIEBJbnB1dCgpIHNob3dUYWJsZSA9IGZhbHNlO1xuICAvKiogQWNjZXNzaWJsZSBuYW1lLCB1c2VkIGFzIHRoZSBzdmcgPHRpdGxlPi4gQGRlZmF1bHQgJycgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsID0gJyc7XG4gIC8qKiBMb25nZXIgc3VtbWFyeSB1c2VkIGFzIHRoZSBzdmcgPGRlc2M+LiBGYWxscyBiYWNrIHRvIGBhcmlhTGFiZWxgLiBAZGVmYXVsdCAnJyAqL1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbiA9ICcnO1xuICAvKiogU3BhY2UgcmVzZXJ2ZWQgYXJvdW5kIHRoZSBwbG90IOKAlCBhIHNwYXJrbGluZSBoYXMgbm8gYXhpcyBsYWJlbHMgdG8gZml0LiBAZGVmYXVsdCB7IHRvcDogMiwgcmlnaHQ6IDIsIGJvdHRvbTogMiwgbGVmdDogMiB9ICovXG4gIEBJbnB1dCgpIG1hcmdpbjogQ2hhcnRNYXJnaW4gPSB7IHRvcDogMiwgcmlnaHQ6IDIsIGJvdHRvbTogMiwgbGVmdDogMiB9O1xuICAvKiogRXh0cmEgVGFpbHdpbmQgY2xhc3NlcyBtZXJnZWQgb250byB0aGUgY2hhcnQgdmlhIGBjbigpYCAobGFzdC13aW5zKS4gKi9cbiAgQElucHV0KCkgY2xhc3MgPSAnJztcblxuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqIEFsd2F5cyBleGFjdGx5IG9uZSBzZXJpZXMsIHJlYWRpbmcgYHZhbHVlS2V5YCBvZmYgZWFjaCByb3cuICovXG4gIGdldCBzZXJpZXMoKTogQ2hhcnRTZXJpZXNbXSB7XG4gICAgcmV0dXJuIFt7IGtleTogdGhpcy52YWx1ZUtleSwgbGFiZWw6IHRoaXMuYXJpYUxhYmVsIHx8IHRoaXMudmFsdWVLZXkgfV07XG4gIH1cbn1cbiJdfQ==