@datagrok-libraries/utils 0.1.2 → 0.2.9

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.
@@ -0,0 +1,70 @@
1
+ import * as rxjs from 'rxjs';
2
+ import * as DG from 'datagrok-api/dg';
3
+ import { FuncCall } from 'datagrok-api/dg';
4
+ import { FunctionView } from './function-view';
5
+ /**
6
+ * Base class for handling Compute models (see https://github.com/datagrok-ai/public/blob/master/help/compute/compute.md).
7
+ * In most cases, the computation is a simple {@link Func}
8
+ * Extend it in cases where a behavior or UI not supported by the {@link FunctionView} is needed.
9
+ *
10
+ * It provides the following functionality out-of-the-box, where each section could be customized:
11
+ * - a structured way to represent input and output parameters: {@link parameters}
12
+ * - generic way to generate UI for inputs, outputs, and interactivity (running the model, etc)
13
+ * - persisting historical results to the db (via {@link parameters})
14
+ * - export (to Excel and PDF): {@link export}
15
+ * - easy loading of historical runs
16
+ * - routing
17
+ * - entering the real, measured (as opposed to predicted) values manually
18
+ * - notifications for changing inputs, completion of computations, etc: {@link onInputChanged}
19
+ * */
20
+ export declare class ComputationView extends FunctionView {
21
+ lastCall?: DG.FuncCall;
22
+ _inputFields: Map<string, DG.InputBase>;
23
+ onViewInitialized: rxjs.Subject<void>;
24
+ onInputChanged: rxjs.Subject<void>;
25
+ onComputationStarted: rxjs.Subject<FuncCall>;
26
+ onComputationCompleted: rxjs.Subject<FuncCall>;
27
+ onComputationSucceeded: rxjs.Subject<FuncCall>;
28
+ onComputationError: rxjs.Subject<FuncCall>;
29
+ constructor(func: DG.Func);
30
+ /** All inputs that are bound to fields */
31
+ get inputFields(): Map<string, DG.InputBase>;
32
+ /** Saves the computation results to the historical results, returns its id. See also {@link loadRun}. */
33
+ saveRun(call: FuncCall): Promise<string>;
34
+ /** Loads the specified historical results. See also {@link saveRun}. */
35
+ loadRun(runId: string): Promise<void>;
36
+ /** The actual computation function. */
37
+ compute(call: FuncCall): Promise<void>;
38
+ /** Maps inputs to parameters, computes, and maps output parameters to the UI. */
39
+ run(): Promise<void>;
40
+ /** Override to provide custom initialization. {@link onViewInitialized} gets fired after that. */
41
+ init(func: DG.Func): Promise<void>;
42
+ /** Override to customize top menu*/
43
+ initTopMenu(menu: DG.Menu): void;
44
+ /** Override to customize ribbon panels */
45
+ initRibbonPanels(): void;
46
+ /** Builds the complete view. Override it if completely custom implementation is needed,
47
+ * otherwise consider overriding {@link buildInputBlock} and/or {@link buildOutputBlock} */
48
+ build(): HTMLElement;
49
+ /** Override to build completely custom input block (the one with inputs, usually on the left).
50
+ * If only specific field, consider overriding {@link buildCustomInputs}. */
51
+ buildInputBlock(): HTMLElement;
52
+ /** Custom inputs for the specified fields. Inputs for these fields will not be created by {@link buildInputBlock}. */
53
+ buildCustomInputs(): Map<String, DG.InputBase>;
54
+ /** Override to create output block. */
55
+ buildOutputBlock(): HTMLElement;
56
+ /** Override to create a custom input control. */
57
+ buildRibbonPanel(): HTMLElement;
58
+ /** Creates function parameters based on the data entered by the user. */
59
+ inputFieldsToParameters(call: FuncCall): void;
60
+ /** Visualizes computation results */
61
+ outputParametersToView(call: FuncCall): void;
62
+ /** Override to provide custom computation error handling. */
63
+ processComputationError(call: FuncCall): void;
64
+ /** Override to provide supported export formats.
65
+ * These formats are available under the "Export" popup on the ribbon panel. */
66
+ get supportedExportFormats(): string[];
67
+ /** Override to provide custom export. */
68
+ export(format: string): Promise<Blob>;
69
+ }
70
+ //# sourceMappingURL=computation-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computation-view.d.ts","sourceRoot":"","sources":["computation-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAY,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;KAcK;AACL,qBAAa,eAAgB,SAAQ,YAAY;IAE/C,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC;IACvB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,CAAmC;IAE1E,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAsB;IAC3D,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAsB;IACxD,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAsB;IAClE,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAsB;IACpE,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAsB;IACpE,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAsB;gBAEpD,IAAI,EAAE,EAAE,CAAC,IAAI;IAYzB,0CAA0C;IAC1C,IAAI,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,CAA8B;IAE1E,yGAAyG;IACnG,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAE9C,wEAAwE;IAClE,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3C,uCAAuC;IACjC,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAE5C,iFAAiF;IAC3E,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAc1B,kGAAkG;IAC5F,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAExC,oCAAoC;IACpC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;IAMzB,0CAA0C;IAC1C,gBAAgB;IAWhB;+FAC2F;IAC3F,KAAK,IAAI,WAAW;IAEpB;gFAC4E;IAC5E,eAAe,IAAI,WAAW;IAI9B,sHAAsH;IACtH,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC;IAE9C,uCAAuC;IACvC,gBAAgB,IAAI,WAAW;IAE/B,iDAAiD;IACjD,gBAAgB,IAAI,WAAW;IAK/B,yEAAyE;IACzE,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAE7C,qCAAqC;IACrC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAE5C,6DAA6D;IAC7D,uBAAuB,CAAC,IAAI,EAAE,QAAQ;IAEtC;mFAC+E;IAC/E,IAAI,sBAAsB,IAAI,MAAM,EAAE,CAAoC;IAE1E,yCAAyC;IACnC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK5C"}
@@ -0,0 +1,135 @@
1
+ /* eslint-disable */
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ import * as grok from 'datagrok-api/grok';
12
+ import * as rxjs from 'rxjs';
13
+ import * as ui from 'datagrok-api/ui';
14
+ import * as DG from 'datagrok-api/dg';
15
+ import { FunctionView } from './function-view';
16
+ /**
17
+ * Base class for handling Compute models (see https://github.com/datagrok-ai/public/blob/master/help/compute/compute.md).
18
+ * In most cases, the computation is a simple {@link Func}
19
+ * Extend it in cases where a behavior or UI not supported by the {@link FunctionView} is needed.
20
+ *
21
+ * It provides the following functionality out-of-the-box, where each section could be customized:
22
+ * - a structured way to represent input and output parameters: {@link parameters}
23
+ * - generic way to generate UI for inputs, outputs, and interactivity (running the model, etc)
24
+ * - persisting historical results to the db (via {@link parameters})
25
+ * - export (to Excel and PDF): {@link export}
26
+ * - easy loading of historical runs
27
+ * - routing
28
+ * - entering the real, measured (as opposed to predicted) values manually
29
+ * - notifications for changing inputs, completion of computations, etc: {@link onInputChanged}
30
+ * */
31
+ export class ComputationView extends FunctionView {
32
+ constructor(func) {
33
+ super(func);
34
+ this._inputFields = new Map();
35
+ this.onViewInitialized = new rxjs.Subject();
36
+ this.onInputChanged = new rxjs.Subject();
37
+ this.onComputationStarted = new rxjs.Subject();
38
+ this.onComputationCompleted = new rxjs.Subject();
39
+ this.onComputationSucceeded = new rxjs.Subject();
40
+ this.onComputationError = new rxjs.Subject();
41
+ if (func != null)
42
+ this.init(func).then((_) => {
43
+ this.root.appendChild(this.build());
44
+ this.initTopMenu(this.ribbonMenu);
45
+ this.initRibbonPanels();
46
+ return this.onViewInitialized.next();
47
+ });
48
+ }
49
+ /** All inputs that are bound to fields */
50
+ get inputFields() { return this._inputFields; }
51
+ /** Saves the computation results to the historical results, returns its id. See also {@link loadRun}. */
52
+ saveRun(call) {
53
+ return __awaiter(this, void 0, void 0, function* () { return 'xxx'; /* await grok.dapi.functions.calls.save(call);*/ });
54
+ }
55
+ /** Loads the specified historical results. See also {@link saveRun}. */
56
+ loadRun(runId) {
57
+ return __awaiter(this, void 0, void 0, function* () { });
58
+ }
59
+ /** The actual computation function. */
60
+ compute(call) {
61
+ return __awaiter(this, void 0, void 0, function* () { yield call.call(); });
62
+ }
63
+ /** Maps inputs to parameters, computes, and maps output parameters to the UI. */
64
+ run() {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ this.lastCall = this.call.clone();
67
+ this.inputFieldsToParameters(this.lastCall);
68
+ try {
69
+ yield this.compute(this.lastCall);
70
+ }
71
+ catch (e) {
72
+ this.onComputationError.next(this.lastCall);
73
+ }
74
+ this.outputParametersToView(this.lastCall);
75
+ });
76
+ }
77
+ /** Override to provide custom initialization. {@link onViewInitialized} gets fired after that. */
78
+ init(func) {
79
+ const _super = Object.create(null, {
80
+ init: { get: () => super.init }
81
+ });
82
+ return __awaiter(this, void 0, void 0, function* () { yield _super.init.call(this, func); });
83
+ }
84
+ /** Override to customize top menu*/
85
+ initTopMenu(menu) {
86
+ menu
87
+ .group(this.func.friendlyName)
88
+ .item('Run', () => this.run());
89
+ }
90
+ /** Override to customize ribbon panels */
91
+ initRibbonPanels() {
92
+ this.setRibbonPanels([[
93
+ ui.bigButton('RUN', () => this.run()),
94
+ ui.comboPopup(ui.icons.save(null, 'Export'), this.supportedExportFormats, (format) => __awaiter(this, void 0, void 0, function* () { return DG.Utils.download('output.csv', yield this.export(format)); })),
95
+ ]]);
96
+ }
97
+ /** Builds the complete view. Override it if completely custom implementation is needed,
98
+ * otherwise consider overriding {@link buildInputBlock} and/or {@link buildOutputBlock} */
99
+ build() { return ui.splitH([this.buildInputBlock(), this.buildOutputBlock()]); }
100
+ /** Override to build completely custom input block (the one with inputs, usually on the left).
101
+ * If only specific field, consider overriding {@link buildCustomInputs}. */
102
+ buildInputBlock() {
103
+ return super.buildInputBlock();
104
+ }
105
+ /** Custom inputs for the specified fields. Inputs for these fields will not be created by {@link buildInputBlock}. */
106
+ buildCustomInputs() { return new Map(); }
107
+ /** Override to create output block. */
108
+ buildOutputBlock() { return super.buildOutputBlock(); }
109
+ /** Override to create a custom input control. */
110
+ buildRibbonPanel() {
111
+ return ui.divH([
112
+ ui.button('RUN', () => { }),
113
+ ui.comboPopup('Export', this.supportedExportFormats, (format) => this.export(format))
114
+ ]);
115
+ }
116
+ /** Creates function parameters based on the data entered by the user. */
117
+ inputFieldsToParameters(call) { super.inputFieldsToParameters(call); }
118
+ /** Visualizes computation results */
119
+ outputParametersToView(call) { super.outputParametersToView(call); }
120
+ /** Override to provide custom computation error handling. */
121
+ processComputationError(call) { grok.shell.error(call.errorMessage); }
122
+ /** Override to provide supported export formats.
123
+ * These formats are available under the "Export" popup on the ribbon panel. */
124
+ get supportedExportFormats() { return ['Excel', 'PDF', 'CSV']; }
125
+ /** Override to provide custom export. */
126
+ export(format) {
127
+ var _a;
128
+ return __awaiter(this, void 0, void 0, function* () {
129
+ if (format == 'CSV')
130
+ return new Blob([((_a = this.lastCall) === null || _a === void 0 ? void 0 : _a.getOutputParamValue()).toCsv()]);
131
+ throw `Format "${format}" is not supported.`;
132
+ });
133
+ }
134
+ }
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0YXRpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbXB1dGF0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9COzs7Ozs7Ozs7O0FBRXBCLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3Qzs7Ozs7Ozs7Ozs7Ozs7S0FjSztBQUNMLE1BQU0sT0FBTyxlQUFnQixTQUFRLFlBQVk7SUFZL0MsWUFBWSxJQUFhO1FBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQVZkLGlCQUFZLEdBQThCLElBQUksR0FBRyxFQUF3QixDQUFDO1FBRTFFLHNCQUFpQixHQUF1QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzRCxtQkFBYyxHQUF1QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4RCx5QkFBb0IsR0FBMkIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEUsMkJBQXNCLEdBQTJCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BFLDJCQUFzQixHQUEyQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwRSx1QkFBa0IsR0FBMkIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFLOUQsSUFBSSxJQUFJLElBQUksSUFBSTtZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxJQUFJLFdBQVcsS0FBZ0MsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUUxRSx5R0FBeUc7SUFDbkcsT0FBTyxDQUFDLElBQWM7OERBQXFCLE9BQU8sS0FBSyxDQUFDLENBQUMsZ0RBQWdELENBQUMsQ0FBQztLQUFBO0lBRWpILHdFQUF3RTtJQUNsRSxPQUFPLENBQUMsS0FBYTs4REFBc0UsQ0FBQztLQUFBO0lBRWxHLHVDQUF1QztJQUNqQyxPQUFPLENBQUMsSUFBYzs4REFBbUIsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQUE7SUFFbkUsaUZBQWlGO0lBQzNFLEdBQUc7O1lBQ1AsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFNUMsSUFBSTtnQkFDRixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ25DO1lBQ0QsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDN0M7WUFFRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVELGtHQUFrRztJQUM1RixJQUFJLENBQUMsSUFBYTs7Ozs4REFBbUIsTUFBTSxPQUFNLElBQUksWUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FBQTtJQUVwRSxvQ0FBb0M7SUFDcEMsV0FBVyxDQUFDLElBQWE7UUFDdkIsSUFBSTthQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzthQUM3QixJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNwQixFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3JDLEVBQUUsQ0FBQyxVQUFVLENBQ1gsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUM3QixJQUFJLENBQUMsc0JBQXNCLEVBQzNCLENBQU8sTUFBTSxFQUFFLEVBQUUsZ0RBQUMsT0FBQSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsR0FBQSxDQUM3RTthQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVEOytGQUMyRjtJQUMzRixLQUFLLEtBQWlCLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDO0lBRTNGO2dGQUM0RTtJQUM1RSxlQUFlO1FBQ2IsT0FBTyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELHNIQUFzSDtJQUN0SCxpQkFBaUIsS0FBZ0MsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVwRSx1Q0FBdUM7SUFDdkMsZ0JBQWdCLEtBQWtCLE9BQU8sS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXBFLGlEQUFpRDtJQUNqRCxnQkFBZ0I7UUFBa0IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQy9DLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztZQUMxQixFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSx1QkFBdUIsQ0FBQyxJQUFjLElBQVUsS0FBSyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV0RixxQ0FBcUM7SUFDckMsc0JBQXNCLENBQUMsSUFBYyxJQUFVLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEYsNkRBQTZEO0lBQzdELHVCQUF1QixDQUFDLElBQWMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBYSxDQUFDLENBQUMsQ0FBRSxDQUFDO0lBRWxGO21GQUMrRTtJQUMvRSxJQUFJLHNCQUFzQixLQUFlLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUxRSx5Q0FBeUM7SUFDbkMsTUFBTSxDQUFDLE1BQWM7OztZQUN6QixJQUFJLE1BQU0sSUFBSSxLQUFLO2dCQUNqQixPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLG1CQUFtQixFQUFnQixDQUFBLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sV0FBVyxNQUFNLHFCQUFxQixDQUFDOztLQUM5QztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyByeGpzIGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge0RhdGFGcmFtZSwgRnVuY0NhbGx9IGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge0Z1bmN0aW9uVmlld30gZnJvbSAnLi9mdW5jdGlvbi12aWV3JztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBDb21wdXRlIG1vZGVscyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRhZ3Jvay1haS9wdWJsaWMvYmxvYi9tYXN0ZXIvaGVscC9jb21wdXRlL2NvbXB1dGUubWQpLlxuICogSW4gbW9zdCBjYXNlcywgdGhlIGNvbXB1dGF0aW9uIGlzIGEgc2ltcGxlIHtAbGluayBGdW5jfVxuICogRXh0ZW5kIGl0IGluIGNhc2VzIHdoZXJlIGEgYmVoYXZpb3Igb3IgVUkgbm90IHN1cHBvcnRlZCBieSB0aGUge0BsaW5rIEZ1bmN0aW9uVmlld30gaXMgbmVlZGVkLlxuICpcbiAqIEl0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbGl0eSBvdXQtb2YtdGhlLWJveCwgd2hlcmUgZWFjaCBzZWN0aW9uIGNvdWxkIGJlIGN1c3RvbWl6ZWQ6XG4gKiAtIGEgc3RydWN0dXJlZCB3YXkgdG8gcmVwcmVzZW50IGlucHV0IGFuZCBvdXRwdXQgcGFyYW1ldGVyczoge0BsaW5rIHBhcmFtZXRlcnN9XG4gKiAtIGdlbmVyaWMgd2F5IHRvIGdlbmVyYXRlIFVJIGZvciBpbnB1dHMsIG91dHB1dHMsIGFuZCBpbnRlcmFjdGl2aXR5IChydW5uaW5nIHRoZSBtb2RlbCwgZXRjKVxuICogICAtIHBlcnNpc3RpbmcgaGlzdG9yaWNhbCByZXN1bHRzIHRvIHRoZSBkYiAodmlhIHtAbGluayBwYXJhbWV0ZXJzfSlcbiAqIC0gZXhwb3J0ICh0byBFeGNlbCBhbmQgUERGKToge0BsaW5rIGV4cG9ydH1cbiAqIC0gZWFzeSBsb2FkaW5nIG9mIGhpc3RvcmljYWwgcnVuc1xuICogLSByb3V0aW5nXG4gKiAtIGVudGVyaW5nIHRoZSByZWFsLCBtZWFzdXJlZCAoYXMgb3Bwb3NlZCB0byBwcmVkaWN0ZWQpIHZhbHVlcyBtYW51YWxseVxuICogLSBub3RpZmljYXRpb25zIGZvciBjaGFuZ2luZyBpbnB1dHMsIGNvbXBsZXRpb24gb2YgY29tcHV0YXRpb25zLCBldGM6IHtAbGluayBvbklucHV0Q2hhbmdlZH1cbiAqICovXG5leHBvcnQgY2xhc3MgQ29tcHV0YXRpb25WaWV3IGV4dGVuZHMgRnVuY3Rpb25WaWV3IHtcblxuICBsYXN0Q2FsbD86IERHLkZ1bmNDYWxsO1xuICBfaW5wdXRGaWVsZHM6IE1hcDxzdHJpbmcsIERHLklucHV0QmFzZT4gPSBuZXcgTWFwPHN0cmluZywgREcuSW5wdXRCYXNlPigpO1xuXG4gIG9uVmlld0luaXRpYWxpemVkOiByeGpzLlN1YmplY3Q8dm9pZD4gPSBuZXcgcnhqcy5TdWJqZWN0KCk7XG4gIG9uSW5wdXRDaGFuZ2VkOiByeGpzLlN1YmplY3Q8dm9pZD4gPSBuZXcgcnhqcy5TdWJqZWN0KCk7XG4gIG9uQ29tcHV0YXRpb25TdGFydGVkOiByeGpzLlN1YmplY3Q8RnVuY0NhbGw+ID0gbmV3IHJ4anMuU3ViamVjdCgpO1xuICBvbkNvbXB1dGF0aW9uQ29tcGxldGVkOiByeGpzLlN1YmplY3Q8RnVuY0NhbGw+ID0gbmV3IHJ4anMuU3ViamVjdCgpO1xuICBvbkNvbXB1dGF0aW9uU3VjY2VlZGVkOiByeGpzLlN1YmplY3Q8RnVuY0NhbGw+ID0gbmV3IHJ4anMuU3ViamVjdCgpO1xuICBvbkNvbXB1dGF0aW9uRXJyb3I6IHJ4anMuU3ViamVjdDxGdW5jQ2FsbD4gPSBuZXcgcnhqcy5TdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoZnVuYzogREcuRnVuYykge1xuICAgIHN1cGVyKGZ1bmMpO1xuXG4gICAgaWYgKGZ1bmMgIT0gbnVsbClcbiAgICAgIHRoaXMuaW5pdChmdW5jKS50aGVuKChfKSA9PiB7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkKCkpO1xuICAgICAgICB0aGlzLmluaXRUb3BNZW51KHRoaXMucmliYm9uTWVudSk7XG4gICAgICAgIHRoaXMuaW5pdFJpYmJvblBhbmVscygpO1xuICAgICAgICByZXR1cm4gdGhpcy5vblZpZXdJbml0aWFsaXplZC5uZXh0KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKiBBbGwgaW5wdXRzIHRoYXQgYXJlIGJvdW5kIHRvIGZpZWxkcyAqL1xuICBnZXQgaW5wdXRGaWVsZHMoKTogTWFwPHN0cmluZywgREcuSW5wdXRCYXNlPiB7IHJldHVybiB0aGlzLl9pbnB1dEZpZWxkczsgfVxuXG4gIC8qKiBTYXZlcyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyB0byB0aGUgaGlzdG9yaWNhbCByZXN1bHRzLCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LiAqL1xuICBhc3luYyBzYXZlUnVuKGNhbGw6IEZ1bmNDYWxsKTogUHJvbWlzZTxzdHJpbmc+IHsgcmV0dXJuICd4eHgnOyAvKiBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbCk7Ki8gfVxuXG4gIC8qKiBMb2FkcyB0aGUgc3BlY2lmaWVkIGhpc3RvcmljYWwgcmVzdWx0cy4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LiAqL1xuICBhc3luYyBsb2FkUnVuKHJ1bklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHsgLyogYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5maW5kKGNhbGwuaWQpOyovfVxuXG4gIC8qKiBUaGUgYWN0dWFsIGNvbXB1dGF0aW9uIGZ1bmN0aW9uLiAqL1xuICBhc3luYyBjb21wdXRlKGNhbGw6IEZ1bmNDYWxsKTogUHJvbWlzZTx2b2lkPiB7IGF3YWl0IGNhbGwuY2FsbCgpOyB9XG5cbiAgLyoqIE1hcHMgaW5wdXRzIHRvIHBhcmFtZXRlcnMsIGNvbXB1dGVzLCBhbmQgbWFwcyBvdXRwdXQgcGFyYW1ldGVycyB0byB0aGUgVUkuICovXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxhc3RDYWxsID0gdGhpcy5jYWxsIS5jbG9uZSgpO1xuICAgIHRoaXMuaW5wdXRGaWVsZHNUb1BhcmFtZXRlcnModGhpcy5sYXN0Q2FsbCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb21wdXRlKHRoaXMubGFzdENhbGwpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5vbkNvbXB1dGF0aW9uRXJyb3IubmV4dCh0aGlzLmxhc3RDYWxsKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dHB1dFBhcmFtZXRlcnNUb1ZpZXcodGhpcy5sYXN0Q2FsbCk7XG4gIH1cblxuICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBjdXN0b20gaW5pdGlhbGl6YXRpb24uIHtAbGluayBvblZpZXdJbml0aWFsaXplZH0gZ2V0cyBmaXJlZCBhZnRlciB0aGF0LiAqL1xuICBhc3luYyBpbml0KGZ1bmM6IERHLkZ1bmMpOiBQcm9taXNlPHZvaWQ+IHsgYXdhaXQgc3VwZXIuaW5pdChmdW5jKTsgfVxuXG4gIC8qKiBPdmVycmlkZSB0byBjdXN0b21pemUgdG9wIG1lbnUqL1xuICBpbml0VG9wTWVudShtZW51OiBERy5NZW51KSB7XG4gICAgbWVudVxuICAgICAgLmdyb3VwKHRoaXMuZnVuYy5mcmllbmRseU5hbWUpXG4gICAgICAuaXRlbSgnUnVuJywgKCkgPT4gdGhpcy5ydW4oKSk7XG4gIH1cblxuICAvKiogT3ZlcnJpZGUgdG8gY3VzdG9taXplIHJpYmJvbiBwYW5lbHMgKi9cbiAgaW5pdFJpYmJvblBhbmVscygpIHtcbiAgICB0aGlzLnNldFJpYmJvblBhbmVscyhbW1xuICAgICAgdWkuYmlnQnV0dG9uKCdSVU4nLCAoKSA9PiB0aGlzLnJ1bigpKSxcbiAgICAgIHVpLmNvbWJvUG9wdXAoXG4gICAgICAgIHVpLmljb25zLnNhdmUobnVsbCwgJ0V4cG9ydCcpLFxuICAgICAgICB0aGlzLnN1cHBvcnRlZEV4cG9ydEZvcm1hdHMsXG4gICAgICAgIGFzeW5jIChmb3JtYXQpID0+IERHLlV0aWxzLmRvd25sb2FkKCdvdXRwdXQuY3N2JywgYXdhaXQgdGhpcy5leHBvcnQoZm9ybWF0KSksXG4gICAgICApLFxuICAgIF1dKTtcbiAgfVxuXG4gIC8qKiBCdWlsZHMgdGhlIGNvbXBsZXRlIHZpZXcuIE92ZXJyaWRlIGl0IGlmIGNvbXBsZXRlbHkgY3VzdG9tIGltcGxlbWVudGF0aW9uIGlzIG5lZWRlZCxcbiAgICogb3RoZXJ3aXNlIGNvbnNpZGVyIG92ZXJyaWRpbmcge0BsaW5rIGJ1aWxkSW5wdXRCbG9ja30gYW5kL29yIHtAbGluayBidWlsZE91dHB1dEJsb2NrfSAqL1xuICBidWlsZCgpOiBIVE1MRWxlbWVudCB7cmV0dXJuIHVpLnNwbGl0SChbdGhpcy5idWlsZElucHV0QmxvY2soKSwgdGhpcy5idWlsZE91dHB1dEJsb2NrKCldKTt9XG5cbiAgLyoqIE92ZXJyaWRlIHRvIGJ1aWxkIGNvbXBsZXRlbHkgY3VzdG9tIGlucHV0IGJsb2NrICh0aGUgb25lIHdpdGggaW5wdXRzLCB1c3VhbGx5IG9uIHRoZSBsZWZ0KS5cbiAgICogSWYgb25seSBzcGVjaWZpYyBmaWVsZCwgY29uc2lkZXIgb3ZlcnJpZGluZyB7QGxpbmsgYnVpbGRDdXN0b21JbnB1dHN9LiAqL1xuICBidWlsZElucHV0QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiBzdXBlci5idWlsZElucHV0QmxvY2soKTtcbiAgfVxuXG4gIC8qKiBDdXN0b20gaW5wdXRzIGZvciB0aGUgc3BlY2lmaWVkIGZpZWxkcy4gSW5wdXRzIGZvciB0aGVzZSBmaWVsZHMgd2lsbCBub3QgYmUgY3JlYXRlZCBieSB7QGxpbmsgYnVpbGRJbnB1dEJsb2NrfS4gKi9cbiAgYnVpbGRDdXN0b21JbnB1dHMoKTogTWFwPFN0cmluZywgREcuSW5wdXRCYXNlPiB7IHJldHVybiBuZXcgTWFwKCk7IH1cblxuICAvKiogT3ZlcnJpZGUgdG8gY3JlYXRlIG91dHB1dCBibG9jay4gKi9cbiAgYnVpbGRPdXRwdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7IHJldHVybiBzdXBlci5idWlsZE91dHB1dEJsb2NrKCk7IH1cblxuICAvKiogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIGlucHV0IGNvbnRyb2wuICovXG4gIGJ1aWxkUmliYm9uUGFuZWwoKTogSFRNTEVsZW1lbnQgeyByZXR1cm4gdWkuZGl2SChbXG4gICAgdWkuYnV0dG9uKCdSVU4nLCAoKSA9PiB7fSksXG4gICAgdWkuY29tYm9Qb3B1cCgnRXhwb3J0JywgdGhpcy5zdXBwb3J0ZWRFeHBvcnRGb3JtYXRzLCAoZm9ybWF0KSA9PiB0aGlzLmV4cG9ydChmb3JtYXQpKV0pO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgZnVuY3Rpb24gcGFyYW1ldGVycyBiYXNlZCBvbiB0aGUgZGF0YSBlbnRlcmVkIGJ5IHRoZSB1c2VyLiAqL1xuICBpbnB1dEZpZWxkc1RvUGFyYW1ldGVycyhjYWxsOiBGdW5jQ2FsbCk6IHZvaWQgeyBzdXBlci5pbnB1dEZpZWxkc1RvUGFyYW1ldGVycyhjYWxsKTsgfVxuXG4gIC8qKiBWaXN1YWxpemVzIGNvbXB1dGF0aW9uIHJlc3VsdHMgKi9cbiAgb3V0cHV0UGFyYW1ldGVyc1RvVmlldyhjYWxsOiBGdW5jQ2FsbCk6IHZvaWQgeyBzdXBlci5vdXRwdXRQYXJhbWV0ZXJzVG9WaWV3KGNhbGwpOyB9XG5cbiAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGNvbXB1dGF0aW9uIGVycm9yIGhhbmRsaW5nLiAqL1xuICBwcm9jZXNzQ29tcHV0YXRpb25FcnJvcihjYWxsOiBGdW5jQ2FsbCkgeyBncm9rLnNoZWxsLmVycm9yKGNhbGwuZXJyb3JNZXNzYWdlISk7ICB9XG5cbiAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXRzLlxuICAgKiBUaGVzZSBmb3JtYXRzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFwiRXhwb3J0XCIgcG9wdXAgb24gdGhlIHJpYmJvbiBwYW5lbC4gKi9cbiAgZ2V0IHN1cHBvcnRlZEV4cG9ydEZvcm1hdHMoKTogc3RyaW5nW10geyByZXR1cm4gWydFeGNlbCcsICdQREYnLCAnQ1NWJ107IH1cblxuICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBjdXN0b20gZXhwb3J0LiAqL1xuICBhc3luYyBleHBvcnQoZm9ybWF0OiBzdHJpbmcpOiBQcm9taXNlPEJsb2I+IHtcbiAgICBpZiAoZm9ybWF0ID09ICdDU1YnKVxuICAgICAgcmV0dXJuIG5ldyBCbG9iKFsodGhpcy5sYXN0Q2FsbD8uZ2V0T3V0cHV0UGFyYW1WYWx1ZSgpIGFzIERhdGFGcmFtZSkudG9Dc3YoKV0pO1xuICAgIHRocm93IGBGb3JtYXQgXCIke2Zvcm1hdH1cIiBpcyBub3Qgc3VwcG9ydGVkLmA7XG4gIH1cbn0iXX0=
@@ -0,0 +1,37 @@
1
+ import * as DG from 'datagrok-api/dg';
2
+ export declare class FunctionView extends DG.ViewBase {
3
+ constructor(func: DG.Func);
4
+ private _type;
5
+ get type(): string;
6
+ func: DG.Func;
7
+ readonly context: DG.Context;
8
+ call?: DG.FuncCall;
9
+ lastCall?: DG.FuncCall;
10
+ _inputFields: Map<string, DG.InputBase>;
11
+ init(func: DG.Func): Promise<void>;
12
+ build(): HTMLElement;
13
+ buildInputBlock(): HTMLElement;
14
+ buildOutputBlock(): HTMLElement;
15
+ clearResults(clearTabs?: boolean, showOutput?: boolean): void;
16
+ inputFieldsToParameters(call: DG.FuncCall): void;
17
+ run(): Promise<void>;
18
+ compute(call: DG.FuncCall): Promise<void>;
19
+ outputParametersToView(call: DG.FuncCall): void;
20
+ renderRunSection(call: DG.FuncCall): HTMLElement;
21
+ showInputs: boolean;
22
+ singleDfParam: boolean;
23
+ paramViewers: Map<string, DG.Viewer[]>;
24
+ resultsTabControl: DG.TabControl | undefined;
25
+ resultTabs: Map<String, HTMLElement>;
26
+ resultsDiv: HTMLElement;
27
+ controlsRoot: HTMLDivElement;
28
+ resultsRoot: HTMLDivElement;
29
+ inputsDiv: HTMLDivElement;
30
+ appendResultDataFrame(param: DG.FuncCallParam, options?: {
31
+ caption?: string;
32
+ category?: string;
33
+ height?: number;
34
+ }): void;
35
+ _appendResultElement(d: HTMLElement, category?: string): void;
36
+ }
37
+ //# sourceMappingURL=function-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function-view.d.ts","sourceRoot":"","sources":["function-view.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,qBAAa,YAAa,SAAQ,EAAE,CAAC,QAAQ;gBAC/B,IAAI,EAAE,EAAE,CAAC,IAAI;IAUzB,OAAO,CAAC,KAAK,CAAsB;IACnC,IAAW,IAAI,IAAI,MAAM,CAExB;IACM,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC;IAC9B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,CAAmC;IAEpE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;IAoDxB,KAAK,IAAI,WAAW;IAEpB,eAAe,IAAI,WAAW;IAO9B,gBAAgB,IAAI,WAAW;IAM/B,YAAY,CAAC,SAAS,GAAE,OAAc,EAAE,UAAU,GAAE,OAAc;IAgClE,uBAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI;IAE1C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAapB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,sBAAsB,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI;IAS/C,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,WAAW;IAehD,UAAU,EAAE,OAAO,CAAS;IAC5B,aAAa,EAAE,OAAO,CAAS;IAC/B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAa;IACnD,iBAAiB,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC;IAC7C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAa;IACjD,UAAU,EAAE,WAAW,CAAqC;IAC5D,YAAY,EAAE,cAAc,CAAY;IACxC,WAAW,EAAE,cAAc,CAAY;IACvC,SAAS,EAAE,cAAc,CAAqC;IAE9D,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAC;IAwGhH,oBAAoB,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM;CAMvD"}
@@ -0,0 +1,271 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import wu from 'wu';
11
+ import $ from 'cash-dom';
12
+ import * as grok from 'datagrok-api/grok';
13
+ import * as ui from 'datagrok-api/ui';
14
+ import * as DG from 'datagrok-api/dg';
15
+ export class FunctionView extends DG.ViewBase {
16
+ constructor(func) {
17
+ super();
18
+ this._type = 'function';
19
+ this._inputFields = new Map();
20
+ this.showInputs = false;
21
+ this.singleDfParam = false;
22
+ this.paramViewers = new Map();
23
+ this.resultTabs = new Map();
24
+ this.resultsDiv = ui.panel([], 'grok-func-results');
25
+ this.controlsRoot = ui.box();
26
+ this.resultsRoot = ui.box();
27
+ this.inputsDiv = ui.panel([], 'grok-func-results');
28
+ this.func = func;
29
+ this.context = DG.Context.cloneDefault();
30
+ this.controlsRoot.style.maxWidth = '370px';
31
+ this.box = true;
32
+ if (func != null)
33
+ this.init(func).then((r) => { });
34
+ }
35
+ get type() {
36
+ return this._type;
37
+ }
38
+ init(func) {
39
+ var _a, _b;
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ (_a = this.func) !== null && _a !== void 0 ? _a : (this.func = func);
42
+ /*
43
+ var meta = EntityMeta.forEntity(f);
44
+ func = await meta.refresh(f);
45
+ */
46
+ (_b = this.call) !== null && _b !== void 0 ? _b : (this.call = this.func.prepare());
47
+ this.call.aux['view'] = this;
48
+ this.call.context = this.context;
49
+ this.singleDfParam = wu(this.func.outputs).filter((p) => p.propertyType == DG.TYPE.DATA_FRAME)
50
+ .toArray().length == 1;
51
+ //var fullRunSection = div();
52
+ //var fullDiv = div('ui-panel', [getFullSection(func, call, fullRunSection)]);
53
+ //htmlSetDisplay(fullDiv, false);
54
+ for (const inParam of wu(this.call.inputParams.values())
55
+ .filter((p) => p.property.propertyType == DG.TYPE.DATA_FRAME && p.property.options['viewer'] != null)) {
56
+ this.showInputs = true;
57
+ const self = this;
58
+ this.subs.push(inParam.onChanged.subscribe(function (param) {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ self.clearResults(true, false);
61
+ param.processOutput();
62
+ self.appendResultDataFrame(param, { height: (self.singleDfParam && !grok.shell.windows.presentationMode) ? 600 : 400,
63
+ category: 'INPUT' });
64
+ });
65
+ }));
66
+ }
67
+ //this.controlsRoot.appendChild(fullDiv);
68
+ /*advancedModeSwitch.onChanged.listen((_) {
69
+ if (advancedModeSwitch.value)
70
+ fullRunSection.append(runSection);
71
+ else
72
+ funcDiv.append(runSection);
73
+ htmlSetDisplay(fullDiv, advancedModeSwitch.value);
74
+ htmlSetDisplay(funcDiv, !advancedModeSwitch.value);
75
+ });*/
76
+ //setRibbon();
77
+ this.root.appendChild(this.build());
78
+ /*
79
+ Routing.setPath(this.path, f.name, true);
80
+ */
81
+ this.name = this.func.friendlyName;
82
+ });
83
+ }
84
+ build() { return ui.splitH([this.buildInputBlock(), this.buildOutputBlock()]); }
85
+ buildInputBlock() {
86
+ const funcDiv = ui.div([this.renderRunSection(this.call)], 'ui-div');
87
+ this.controlsRoot.innerHTML = '';
88
+ this.controlsRoot.appendChild(funcDiv);
89
+ return this.controlsRoot;
90
+ }
91
+ buildOutputBlock() {
92
+ this.resultsRoot.innerHTML = '';
93
+ this.resultsRoot.appendChild(this.resultsDiv);
94
+ return this.resultsRoot;
95
+ }
96
+ clearResults(clearTabs = true, showOutput = true) {
97
+ const categories = [];
98
+ // resultTabs.clear();
99
+ if (this.showInputs) {
100
+ categories.push('INPUT');
101
+ this.resultTabs.set('INPUT', this.inputsDiv);
102
+ }
103
+ for (const p of this.func.outputs) {
104
+ if (categories.includes(p.category))
105
+ continue;
106
+ categories.push(p.category);
107
+ }
108
+ if (clearTabs && (categories.length > 1 || (categories.length == 1 && categories[0] != 'Misc'))) {
109
+ this.resultsTabControl = DG.TabControl.create();
110
+ for (const c of categories) {
111
+ if (!this.resultTabs.has(c))
112
+ this.resultTabs.set(c, ui.div([], 'ui-panel,grok-func-results'));
113
+ let name = c;
114
+ if (this.showInputs && categories.length == 2 && c == 'Misc')
115
+ name = 'OUTPUT';
116
+ this.resultsTabControl.addPane(name, () => { var _a; return (_a = this.resultTabs.get(c)) !== null && _a !== void 0 ? _a : ui.div(); });
117
+ }
118
+ if (categories.length > 1 && this.showInputs && showOutput)
119
+ this.resultsTabControl.currentPane = this.resultsTabControl.panes[1];
120
+ this.resultsDiv = this.resultsTabControl.root;
121
+ }
122
+ else {
123
+ this.resultsDiv = ui.panel([], 'grok-func-results');
124
+ this.resultsTabControl = undefined;
125
+ }
126
+ this.buildOutputBlock();
127
+ }
128
+ inputFieldsToParameters(call) { }
129
+ run() {
130
+ return __awaiter(this, void 0, void 0, function* () {
131
+ this.lastCall = this.call.clone();
132
+ this.inputFieldsToParameters(this.lastCall);
133
+ try {
134
+ yield this.compute(this.lastCall);
135
+ }
136
+ catch (e) {
137
+ // this.onComputationError.next(this.lastCall);
138
+ }
139
+ this.outputParametersToView(this.lastCall);
140
+ });
141
+ }
142
+ compute(call) {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ yield call.call(true, undefined, { processed: true });
145
+ });
146
+ }
147
+ outputParametersToView(call) {
148
+ this.clearResults(false, true);
149
+ for (const [, p] of call.outputParams) {
150
+ p.processOutput();
151
+ if (p.property.propertyType == DG.TYPE.DATA_FRAME && p.value != null)
152
+ this.appendResultDataFrame(p, { caption: p.property.name, category: p.property.category });
153
+ }
154
+ }
155
+ renderRunSection(call) {
156
+ return ui.wait(() => __awaiter(this, void 0, void 0, function* () {
157
+ const runButton = ui.bigButton('Run', () => __awaiter(this, void 0, void 0, function* () {
158
+ call.aux['view'] = this.dart;
159
+ yield this.run();
160
+ }));
161
+ const editor = ui.div();
162
+ const inputs = yield call.buildEditor(editor, { condensed: true });
163
+ editor.appendChild(ui.buttonsInput([runButton]));
164
+ for (const input of inputs)
165
+ this._inputFields.set(input.property.name, input);
166
+ return editor;
167
+ }));
168
+ }
169
+ appendResultDataFrame(param, options) {
170
+ var _a, _b, _c, _d, _e;
171
+ const df = param.value;
172
+ console.log('dataframe', df);
173
+ let caption = options === null || options === void 0 ? void 0 : options.caption;
174
+ let height = (_a = options === null || options === void 0 ? void 0 : options.height) !== null && _a !== void 0 ? _a : 400;
175
+ const viewers = (_b = param.aux['viewers']) !== null && _b !== void 0 ? _b : [];
176
+ caption !== null && caption !== void 0 ? caption : (caption = (_d = (_c = param.aux['viewerTitle']) !== null && _c !== void 0 ? _c : ((this.singleDfParam && viewers.length == 1) ? '' : param.property.caption)) !== null && _d !== void 0 ? _d : '');
177
+ let existingViewers = this.paramViewers.get(param.name);
178
+ if (existingViewers != null) {
179
+ for (const v of existingViewers)
180
+ v.dataFrame = df;
181
+ return;
182
+ }
183
+ existingViewers !== null && existingViewers !== void 0 ? existingViewers : (existingViewers = []);
184
+ this.paramViewers.set(param.name, existingViewers);
185
+ if (viewers.length == 0)
186
+ viewers.push(df.plot.grid());
187
+ const hideList = [];
188
+ let blocks = 0;
189
+ let blockSize = 0;
190
+ const gridWrapper = ui.block([]);
191
+ const gridSwitch = !wu(viewers).some((v) => v.type == 'Grid');
192
+ $(gridWrapper).hide();
193
+ const getHeader = (sw) => {
194
+ var _a;
195
+ const s = (_a = caption !== null && caption !== void 0 ? caption : df.name) !== null && _a !== void 0 ? _a : '';
196
+ const header = ui.div([], 'grok-func-results-header');
197
+ if (s != '') {
198
+ const h = ui.h1(s);
199
+ ui.Tooltip.bind(h, () => s);
200
+ header.appendChild(h);
201
+ }
202
+ if (gridSwitch) {
203
+ const icon = ui.iconSvg('table', (e) => {
204
+ e.stopPropagation();
205
+ ui.setDisplayAll(hideList, !sw);
206
+ ui.setDisplay(gridWrapper, sw);
207
+ gridWrapper.classList.add(`ui-block-${blockSize}`);
208
+ }, 'Show grid');
209
+ if (!sw)
210
+ icon.classList.add('active');
211
+ header.appendChild(icon);
212
+ }
213
+ if (!grok.shell.tables.includes(df)) {
214
+ header.appendChild(ui.icons.add((e) => {
215
+ e.stopPropagation();
216
+ const v = grok.shell.addTableView(df);
217
+ (() => __awaiter(this, void 0, void 0, function* () {
218
+ for (const viewer of viewers) {
219
+ if (viewer.type != 'Grid') {
220
+ const newViewer = yield df.plot.fromType(viewer.type);
221
+ newViewer.setOptions(viewer.getOptions());
222
+ v.addViewer(newViewer);
223
+ }
224
+ }
225
+ }))();
226
+ }, 'Add to workspace'));
227
+ }
228
+ return header;
229
+ };
230
+ if (gridSwitch) {
231
+ gridWrapper.appendChild(getHeader(false));
232
+ const grid = df.plot.grid();
233
+ grid.root.style.height = `${height}px`;
234
+ gridWrapper.appendChild(grid.root);
235
+ existingViewers.push(grid);
236
+ }
237
+ let header = getHeader(true);
238
+ this._appendResultElement(gridWrapper, options === null || options === void 0 ? void 0 : options.category);
239
+ for (const viewer of viewers) {
240
+ if ((viewer === null || viewer === void 0 ? void 0 : viewer.tags) == null)
241
+ continue;
242
+ existingViewers.push(viewer);
243
+ const block = (_e = viewer.tags['.block-size']) !== null && _e !== void 0 ? _e : 100;
244
+ const wrapper = ui.block([], `ui-block-${block}`);
245
+ if (blocks + block <= 100) {
246
+ hideList.push(wrapper);
247
+ blockSize += block;
248
+ }
249
+ blocks += block;
250
+ wrapper.appendChild(header);
251
+ header = ui.div([], 'grok-func-results-header');
252
+ wrapper.appendChild(viewer.root);
253
+ if (viewer.type == 'grid') {
254
+ // @ts-ignore
255
+ const totalHeight = viewer.getOptions()['rowHeight'] *
256
+ (viewer.dataFrame.rowCount + 1);
257
+ if (totalHeight < height)
258
+ height = totalHeight;
259
+ }
260
+ viewer.root.style.height = `${height}px`;
261
+ this._appendResultElement(wrapper, options === null || options === void 0 ? void 0 : options.category);
262
+ }
263
+ }
264
+ _appendResultElement(d, category) {
265
+ if (category != null && this.resultsTabControl != undefined && this.resultTabs.get(category) != null)
266
+ this.resultTabs.get(category).appendChild(d);
267
+ else
268
+ this.resultsDiv.appendChild(d);
269
+ }
270
+ }
271
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sQ0FBQyxNQUFNLFVBQVUsQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxNQUFNLE9BQU8sWUFBYSxTQUFRLEVBQUUsQ0FBQyxRQUFRO0lBQzNDLFlBQVksSUFBYTtRQUN2QixLQUFLLEVBQUUsQ0FBQztRQVNGLFVBQUssR0FBVyxVQUFVLENBQUM7UUFRbkMsaUJBQVksR0FBOEIsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFnSjFFLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsaUJBQVksR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVuRCxlQUFVLEdBQTZCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakQsZUFBVSxHQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzVELGlCQUFZLEdBQW1CLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QyxnQkFBVyxHQUFtQixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkMsY0FBUyxHQUFtQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBeEs1RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FB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aEQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRTtnQkFDekIsYUFBYTtnQkFDYixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDO29CQUNsRCxDQUFDLE1BQU0sQ0FBQyxTQUFVLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLFdBQVcsR0FBRyxNQUFNO29CQUN0QixNQUFNLEdBQUcsV0FBVyxDQUFDO2FBQ3hCO1lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsUUFBUSxDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsQ0FBYyxFQUFFLFFBQWlCO1FBQ3BELElBQUksUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUk7WUFDbEcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU5QyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgd3UgZnJvbSAnd3UnO1xuaW1wb3J0ICQgZnJvbSAnY2FzaC1kb20nO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uVmlldyBleHRlbmRzIERHLlZpZXdCYXNlIHtcbiAgY29uc3RydWN0b3IoZnVuYzogREcuRnVuYykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5mdW5jID0gZnVuYztcbiAgICB0aGlzLmNvbnRleHQgPSBERy5Db250ZXh0LmNsb25lRGVmYXVsdCgpO1xuICAgIHRoaXMuY29udHJvbHNSb290LnN0eWxlLm1heFdpZHRoID0gJzM3MHB4JztcbiAgICB0aGlzLmJveCA9IHRydWU7XG4gICAgaWYgKGZ1bmMgIT0gbnVsbClcbiAgICAgIHRoaXMuaW5pdChmdW5jKS50aGVuKChyKSA9PiB7fSk7XG4gIH1cblxuICBwcml2YXRlIF90eXBlOiBzdHJpbmcgPSAnZnVuY3Rpb24nO1xuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuICBwdWJsaWMgZnVuYzogREcuRnVuYztcbiAgcmVhZG9ubHkgY29udGV4dDogREcuQ29udGV4dDtcbiAgcHVibGljIGNhbGw/OiBERy5GdW5jQ2FsbDtcbiAgcHVibGljIGxhc3RDYWxsPzogREcuRnVuY0NhbGw7XG4gIF9pbnB1dEZpZWxkczogTWFwPHN0cmluZywgREcuSW5wdXRCYXNlPiA9IG5ldyBNYXA8c3RyaW5nLCBERy5JbnB1dEJhc2U+KCk7XG5cbiAgYXN5bmMgaW5pdChmdW5jOiBERy5GdW5jKSB7XG4gICAgdGhpcy5mdW5jID8/PSBmdW5jO1xuICAgIC8qXG4gICAgICB2YXIgbWV0YSA9IEVudGl0eU1ldGEuZm9yRW50aXR5KGYpO1xuICAgICAgZnVuYyA9IGF3YWl0IG1ldGEucmVmcmVzaChmKTtcbiAgICAqL1xuXG4gICAgdGhpcy5jYWxsID8/PSB0aGlzLmZ1bmMucHJlcGFyZSgpO1xuICAgIHRoaXMuY2FsbC5hdXhbJ3ZpZXcnXSA9IHRoaXM7XG4gICAgdGhpcy5jYWxsLmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLnNpbmdsZURmUGFyYW0gPSB3dSh0aGlzLmZ1bmMub3V0cHV0cykuZmlsdGVyKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUpXG4gICAgICAudG9BcnJheSgpLmxlbmd0aCA9PSAxO1xuICAgIC8vdmFyIGZ1bGxSdW5TZWN0aW9uID0gZGl2KCk7XG4gICAgLy92YXIgZnVsbERpdiA9IGRpdigndWktcGFuZWwnLCBbZ2V0RnVsbFNlY3Rpb24oZnVuYywgY2FsbCwgZnVsbFJ1blNlY3Rpb24pXSk7XG4gICAgLy9odG1sU2V0RGlzcGxheShmdWxsRGl2LCBmYWxzZSk7XG5cbiAgICBmb3IgKGNvbnN0IGluUGFyYW0gb2Ygd3UodGhpcy5jYWxsLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKHA6IERHLkZ1bmNDYWxsUGFyYW0pID0+XG4gICAgICAgIHAucHJvcGVydHkucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLnByb3BlcnR5Lm9wdGlvbnNbJ3ZpZXdlciddICE9IG51bGwpKSB7XG4gICAgICB0aGlzLnNob3dJbnB1dHMgPSB0cnVlO1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnN1YnMucHVzaChpblBhcmFtLm9uQ2hhbmdlZC5zdWJzY3JpYmUoYXN5bmMgZnVuY3Rpb24ocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0pIHtcbiAgICAgICAgc2VsZi5jbGVhclJlc3VsdHModHJ1ZSwgZmFsc2UpO1xuICAgICAgICBwYXJhbS5wcm9jZXNzT3V0cHV0KCk7XG5cbiAgICAgICAgc2VsZi5hcHBlbmRSZXN1bHREYXRhRnJhbWUocGFyYW0sXG4gICAgICAgICAge2hlaWdodDogKHNlbGYuc2luZ2xlRGZQYXJhbSAmJiAhZ3Jvay5zaGVsbC53aW5kb3dzLnByZXNlbnRhdGlvbk1vZGUpID8gNjAwIDogNDAwLFxuICAgICAgICAgICAgY2F0ZWdvcnk6ICdJTlBVVCd9KTtcbiAgICAgIH0pKTtcbiAgICB9XG5cblxuICAgIC8vdGhpcy5jb250cm9sc1Jvb3QuYXBwZW5kQ2hpbGQoZnVsbERpdik7XG5cbiAgICAvKmFkdmFuY2VkTW9kZVN3aXRjaC5vbkNoYW5nZWQubGlzdGVuKChfKSB7XG4gICAgICBpZiAoYWR2YW5jZWRNb2RlU3dpdGNoLnZhbHVlKVxuICAgICAgICBmdWxsUnVuU2VjdGlvbi5hcHBlbmQocnVuU2VjdGlvbik7XG4gICAgICBlbHNlXG4gICAgICAgIGZ1bmNEaXYuYXBwZW5kKHJ1blNlY3Rpb24pO1xuICAgICAgaHRtbFNldERpc3BsYXkoZnVsbERpdiwgYWR2YW5jZWRNb2RlU3dpdGNoLnZhbHVlKTtcbiAgICAgIGh0bWxTZXREaXNwbGF5KGZ1bmNEaXYsICFhZHZhbmNlZE1vZGVTd2l0Y2gudmFsdWUpO1xuICAgIH0pOyovXG4gICAgLy9zZXRSaWJib24oKTtcbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5idWlsZCgpKTtcbiAgICAvKlxuICAgIFJvdXRpbmcuc2V0UGF0aCh0aGlzLnBhdGgsIGYubmFtZSwgdHJ1ZSk7XG4gICAgKi9cblxuICAgIHRoaXMubmFtZSA9IHRoaXMuZnVuYy5mcmllbmRseU5hbWU7XG4gIH1cblxuICBidWlsZCgpOiBIVE1MRWxlbWVudCB7cmV0dXJuIHVpLnNwbGl0SChbdGhpcy5idWlsZElucHV0QmxvY2soKSwgdGhpcy5idWlsZE91dHB1dEJsb2NrKCldKTt9XG5cbiAgYnVpbGRJbnB1dEJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBmdW5jRGl2ID0gdWkuZGl2KFt0aGlzLnJlbmRlclJ1blNlY3Rpb24odGhpcy5jYWxsISldLCAndWktZGl2Jyk7XG4gICAgdGhpcy5jb250cm9sc1Jvb3QuaW5uZXJIVE1MID0gJyc7XG4gICAgdGhpcy5jb250cm9sc1Jvb3QuYXBwZW5kQ2hpbGQoZnVuY0Rpdik7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbHNSb290O1xuICB9XG5cbiAgYnVpbGRPdXRwdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgdGhpcy5yZXN1bHRzUm9vdC5pbm5lckhUTUwgPSAnJztcbiAgICB0aGlzLnJlc3VsdHNSb290LmFwcGVuZENoaWxkKHRoaXMucmVzdWx0c0Rpdik7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0c1Jvb3Q7XG4gIH1cblxuICBjbGVhclJlc3VsdHMoY2xlYXJUYWJzOiBib29sZWFuID0gdHJ1ZSwgc2hvd091dHB1dDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBjYXRlZ29yaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIC8vICByZXN1bHRUYWJzLmNsZWFyKCk7XG4gICAgaWYgKHRoaXMuc2hvd0lucHV0cykge1xuICAgICAgY2F0ZWdvcmllcy5wdXNoKCdJTlBVVCcpO1xuICAgICAgdGhpcy5yZXN1bHRUYWJzLnNldCgnSU5QVVQnLCB0aGlzLmlucHV0c0Rpdik7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLmZ1bmMub3V0cHV0cykge1xuICAgICAgaWYgKGNhdGVnb3JpZXMuaW5jbHVkZXMocC5jYXRlZ29yeSkpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgY2F0ZWdvcmllcy5wdXNoKHAuY2F0ZWdvcnkpO1xuICAgIH1cbiAgICBpZiAoY2xlYXJUYWJzICYmIChjYXRlZ29yaWVzLmxlbmd0aCA+IDEgfHwgKGNhdGVnb3JpZXMubGVuZ3RoID09IDEgJiYgY2F0ZWdvcmllc1swXSAhPSAnTWlzYycpKSkge1xuICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCA9IERHLlRhYkNvbnRyb2wuY3JlYXRlKCk7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgY2F0ZWdvcmllcykge1xuICAgICAgICBpZiAoIXRoaXMucmVzdWx0VGFicy5oYXMoYykpXG4gICAgICAgICAgdGhpcy5yZXN1bHRUYWJzLnNldChjLCB1aS5kaXYoW10sICd1aS1wYW5lbCxncm9rLWZ1bmMtcmVzdWx0cycpKTtcbiAgICAgICAgbGV0IG5hbWUgPSBjO1xuICAgICAgICBpZiAodGhpcy5zaG93SW5wdXRzICYmIGNhdGVnb3JpZXMubGVuZ3RoID09IDIgJiYgYyA9PSAnTWlzYycpXG4gICAgICAgICAgbmFtZSA9ICdPVVRQVVQnO1xuICAgICAgICB0aGlzLnJlc3VsdHNUYWJDb250cm9sLmFkZFBhbmUobmFtZSwgKCkgPT4gdGhpcy5yZXN1bHRUYWJzLmdldChjKSA/PyB1aS5kaXYoKSk7XG4gICAgICB9XG4gICAgICBpZiAoY2F0ZWdvcmllcy5sZW5ndGggPiAxICYmIHRoaXMuc2hvd0lucHV0cyAmJiBzaG93T3V0cHV0KVxuICAgICAgICB0aGlzLnJlc3VsdHNUYWJDb250cm9sLmN1cnJlbnRQYW5lID0gdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5wYW5lc1sxXTtcbiAgICAgIHRoaXMucmVzdWx0c0RpdiA9IHRoaXMucmVzdWx0c1RhYkNvbnRyb2wucm9vdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXN1bHRzRGl2ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cycpO1xuICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5idWlsZE91dHB1dEJsb2NrKCk7XG4gIH1cblxuICBpbnB1dEZpZWxkc1RvUGFyYW1ldGVycyhjYWxsOiBERy5GdW5jQ2FsbCk6IHZvaWQgeyB9XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubGFzdENhbGwgPSB0aGlzLmNhbGwhLmNsb25lKCk7XG4gICAgdGhpcy5pbnB1dEZpZWxkc1RvUGFyYW1ldGVycyh0aGlzLmxhc3RDYWxsKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbXB1dGUodGhpcy5sYXN0Q2FsbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gdGhpcy5vbkNvbXB1dGF0aW9uRXJyb3IubmV4dCh0aGlzLmxhc3RDYWxsKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dHB1dFBhcmFtZXRlcnNUb1ZpZXcodGhpcy5sYXN0Q2FsbCk7XG4gIH1cblxuICBhc3luYyBjb21wdXRlKGNhbGw6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgY2FsbC5jYWxsKHRydWUsIHVuZGVmaW5lZCwge3Byb2Nlc3NlZDogdHJ1ZX0pO1xuICB9XG5cbiAgb3V0cHV0UGFyYW1ldGVyc1RvVmlldyhjYWxsOiBERy5GdW5jQ2FsbCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJSZXN1bHRzKGZhbHNlLCB0cnVlKTtcbiAgICBmb3IgKGNvbnN0IFssIHBdIG9mIGNhbGwub3V0cHV0UGFyYW1zKSB7XG4gICAgICBwLnByb2Nlc3NPdXRwdXQoKTtcbiAgICAgIGlmIChwLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC52YWx1ZSAhPSBudWxsKVxuICAgICAgICB0aGlzLmFwcGVuZFJlc3VsdERhdGFGcmFtZShwLCB7Y2FwdGlvbjogcC5wcm9wZXJ0eS5uYW1lLCBjYXRlZ29yeTogcC5wcm9wZXJ0eS5jYXRlZ29yeX0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlclJ1blNlY3Rpb24oY2FsbDogREcuRnVuY0NhbGwpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcnVuQnV0dG9uID0gdWkuYmlnQnV0dG9uKCdSdW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNhbGwuYXV4Wyd2aWV3J10gPSB0aGlzLmRhcnQ7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuKCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IHVpLmRpdigpO1xuICAgICAgY29uc3QgaW5wdXRzOiBERy5JbnB1dEJhc2VbXSA9IGF3YWl0IGNhbGwuYnVpbGRFZGl0b3IoZWRpdG9yLCB7Y29uZGVuc2VkOiB0cnVlfSk7XG4gICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodWkuYnV0dG9uc0lucHV0KFtydW5CdXR0b25dKSk7XG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cylcbiAgICAgICAgdGhpcy5faW5wdXRGaWVsZHMuc2V0KGlucHV0LnByb3BlcnR5Lm5hbWUsIGlucHV0KTtcbiAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgfSk7XG4gIH1cblxuICBzaG93SW5wdXRzOiBib29sZWFuID0gZmFsc2U7XG4gIHNpbmdsZURmUGFyYW06IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFyYW1WaWV3ZXJzOiBNYXA8c3RyaW5nLCBERy5WaWV3ZXJbXT4gPSBuZXcgTWFwKCk7XG4gIHJlc3VsdHNUYWJDb250cm9sOiBERy5UYWJDb250cm9sIHwgdW5kZWZpbmVkO1xuICByZXN1bHRUYWJzOiBNYXA8U3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIHJlc3VsdHNEaXY6IEhUTUxFbGVtZW50ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cycpO1xuICBjb250cm9sc1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuYm94KCk7XG4gIHJlc3VsdHNSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLmJveCgpO1xuICBpbnB1dHNEaXY6IEhUTUxEaXZFbGVtZW50ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cycpO1xuXG4gIGFwcGVuZFJlc3VsdERhdGFGcmFtZShwYXJhbTogREcuRnVuY0NhbGxQYXJhbSwgb3B0aW9ucz86IHsgY2FwdGlvbj86IHN0cmluZywgY2F0ZWdvcnk/OiBzdHJpbmcsIGhlaWdodD86IG51bWJlcn0pIHtcbiAgICBjb25zdCBkZiA9IHBhcmFtLnZhbHVlO1xuICAgIGNvbnNvbGUubG9nKCdkYXRhZnJhbWUnLCBkZik7XG4gICAgbGV0IGNhcHRpb24gPSBvcHRpb25zPy5jYXB0aW9uO1xuICAgIGxldCBoZWlnaHQgPSBvcHRpb25zPy5oZWlnaHQgPz8gNDAwO1xuICAgIGNvbnN0IHZpZXdlcnM6IERHLlZpZXdlcltdID0gcGFyYW0uYXV4Wyd2aWV3ZXJzJ10gPz8gW107XG4gICAgY2FwdGlvbiA/Pz0gcGFyYW0uYXV4Wyd2aWV3ZXJUaXRsZSddID8/XG4gICAgICAoKHRoaXMuc2luZ2xlRGZQYXJhbSAmJiB2aWV3ZXJzLmxlbmd0aCA9PSAxKSA/ICcnIDogcGFyYW0ucHJvcGVydHkuY2FwdGlvbikgPz8gJyc7XG4gICAgbGV0IGV4aXN0aW5nVmlld2VyczogREcuVmlld2VyW10gfCB1bmRlZmluZWQgPSB0aGlzLnBhcmFtVmlld2Vycy5nZXQocGFyYW0ubmFtZSk7XG4gICAgaWYgKGV4aXN0aW5nVmlld2VycyAhPSBudWxsKSB7XG4gICAgICBmb3IgKGNvbnN0IHYgb2YgZXhpc3RpbmdWaWV3ZXJzKVxuICAgICAgICB2LmRhdGFGcmFtZSA9IGRmO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4aXN0aW5nVmlld2VycyA/Pz0gW107XG4gICAgdGhpcy5wYXJhbVZpZXdlcnMuc2V0KHBhcmFtLm5hbWUsIGV4aXN0aW5nVmlld2Vycyk7XG4gICAgaWYgKHZpZXdlcnMubGVuZ3RoID09IDApXG4gICAgICB2aWV3ZXJzLnB1c2goZGYucGxvdC5ncmlkKCkpO1xuXG4gICAgY29uc3QgaGlkZUxpc3Q6IEhUTUxFbGVtZW50W10gPSBbXTtcbiAgICBsZXQgYmxvY2tzOiBudW1iZXIgPSAwO1xuICAgIGxldCBibG9ja1NpemU6IG51bWJlciA9IDA7XG4gICAgY29uc3QgZ3JpZFdyYXBwZXIgPSB1aS5ibG9jayhbXSk7XG5cbiAgICBjb25zdCBncmlkU3dpdGNoID0gIXd1KHZpZXdlcnMpLnNvbWUoKHY6IERHLlZpZXdlcikgPT4gdi50eXBlID09ICdHcmlkJyk7XG4gICAgJChncmlkV3JhcHBlcikuaGlkZSgpO1xuXG4gICAgY29uc3QgZ2V0SGVhZGVyID0gKHN3OiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCBzID0gY2FwdGlvbiA/PyBkZi5uYW1lID8/ICcnO1xuICAgICAgY29uc3QgaGVhZGVyID0gdWkuZGl2KFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMtaGVhZGVyJyk7XG4gICAgICBpZiAocyAhPSAnJykge1xuICAgICAgICBjb25zdCBoID0gdWkuaDEocyk7XG4gICAgICAgIHVpLlRvb2x0aXAuYmluZChoLCAoKSA9PiBzKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGgpO1xuICAgICAgfVxuICAgICAgaWYgKGdyaWRTd2l0Y2gpIHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHVpLmljb25TdmcoJ3RhYmxlJywgKGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVpLnNldERpc3BsYXlBbGwoaGlkZUxpc3QsICFzdyk7XG4gICAgICAgICAgdWkuc2V0RGlzcGxheShncmlkV3JhcHBlciwgc3cpO1xuICAgICAgICAgIGdyaWRXcmFwcGVyLmNsYXNzTGlzdC5hZGQoYHVpLWJsb2NrLSR7YmxvY2tTaXplfWApO1xuICAgICAgICB9XG4gICAgICAgICwgJ1Nob3cgZ3JpZCcpO1xuICAgICAgICBpZiAoIXN3KVxuICAgICAgICAgIGljb24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChpY29uKTtcbiAgICAgIH1cbiAgICAgIGlmICghZ3Jvay5zaGVsbC50YWJsZXMuaW5jbHVkZXMoZGYpKSB7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZCh1aS5pY29ucy5hZGQoKGU6IGFueSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgY29uc3QgdiA9IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCB2aWV3ZXIgb2Ygdmlld2Vycykge1xuICAgICAgICAgICAgICBpZiAodmlld2VyLnR5cGUgIT0gJ0dyaWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Vmlld2VyID0gYXdhaXQgZGYucGxvdC5mcm9tVHlwZSh2aWV3ZXIudHlwZSkgYXMgREcuVmlld2VyO1xuICAgICAgICAgICAgICAgIG5ld1ZpZXdlci5zZXRPcHRpb25zKHZpZXdlci5nZXRPcHRpb25zKCkpO1xuICAgICAgICAgICAgICAgIHYuYWRkVmlld2VyKG5ld1ZpZXdlcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSgpO1xuICAgICAgICB9LFxuICAgICAgICAnQWRkIHRvIHdvcmtzcGFjZScsXG4gICAgICAgICkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhlYWRlcjtcbiAgICB9O1xuXG4gICAgaWYgKGdyaWRTd2l0Y2gpIHtcbiAgICAgIGdyaWRXcmFwcGVyLmFwcGVuZENoaWxkKGdldEhlYWRlcihmYWxzZSkpO1xuICAgICAgY29uc3QgZ3JpZCA9IGRmLnBsb3QuZ3JpZCgpO1xuICAgICAgZ3JpZC5yb290LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgICBncmlkV3JhcHBlci5hcHBlbmRDaGlsZChncmlkLnJvb3QpO1xuICAgICAgZXhpc3RpbmdWaWV3ZXJzLnB1c2goZ3JpZCk7XG4gICAgfVxuXG4gICAgbGV0IGhlYWRlciA9IGdldEhlYWRlcih0cnVlKTtcbiAgICB0aGlzLl9hcHBlbmRSZXN1bHRFbGVtZW50KGdyaWRXcmFwcGVyLCBvcHRpb25zPy5jYXRlZ29yeSk7XG4gICAgZm9yIChjb25zdCB2aWV3ZXIgb2Ygdmlld2Vycykge1xuICAgICAgaWYgKHZpZXdlcj8udGFncyA9PSBudWxsKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGV4aXN0aW5nVmlld2Vycy5wdXNoKHZpZXdlcik7XG4gICAgICBjb25zdCBibG9jayA9IHZpZXdlci50YWdzWycuYmxvY2stc2l6ZSddID8/IDEwMDtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1aS5ibG9jayhbXSwgYHVpLWJsb2NrLSR7YmxvY2t9YCk7XG4gICAgICBpZiAoYmxvY2tzICsgYmxvY2sgPD0gMTAwKSB7XG4gICAgICAgIGhpZGVMaXN0LnB1c2god3JhcHBlcik7XG4gICAgICAgIGJsb2NrU2l6ZSArPSBibG9jaztcbiAgICAgIH1cbiAgICAgIGJsb2NrcyArPSBibG9jaztcbiAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaGVhZGVyKTtcbiAgICAgIGhlYWRlciA9IHVpLmRpdihbXSwgJ2dyb2stZnVuYy1yZXN1bHRzLWhlYWRlcicpO1xuICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh2aWV3ZXIucm9vdCk7XG4gICAgICBpZiAodmlld2VyLnR5cGUgPT0gJ2dyaWQnKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSB2aWV3ZXIuZ2V0T3B0aW9ucygpWydyb3dIZWlnaHQnXSAqXG4gICAgICAgICAgKHZpZXdlci5kYXRhRnJhbWUhLnJvd0NvdW50ICsgMSk7XG4gICAgICAgIGlmICh0b3RhbEhlaWdodCA8IGhlaWdodClcbiAgICAgICAgICBoZWlnaHQgPSB0b3RhbEhlaWdodDtcbiAgICAgIH1cbiAgICAgIHZpZXdlci5yb290LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgICB0aGlzLl9hcHBlbmRSZXN1bHRFbGVtZW50KHdyYXBwZXIsIG9wdGlvbnM/LmNhdGVnb3J5KTtcbiAgICB9XG4gIH1cblxuICBfYXBwZW5kUmVzdWx0RWxlbWVudChkOiBIVE1MRWxlbWVudCwgY2F0ZWdvcnk/OiBzdHJpbmcpIHtcbiAgICBpZiAoY2F0ZWdvcnkgIT0gbnVsbCAmJiB0aGlzLnJlc3VsdHNUYWJDb250cm9sICE9IHVuZGVmaW5lZCAmJiB0aGlzLnJlc3VsdFRhYnMuZ2V0KGNhdGVnb3J5KSAhPSBudWxsKVxuICAgICAgdGhpcy5yZXN1bHRUYWJzLmdldChjYXRlZ29yeSkhLmFwcGVuZENoaWxkKGQpO1xuICAgIGVsc2VcbiAgICAgIHRoaXMucmVzdWx0c0Rpdi5hcHBlbmRDaGlsZChkKTtcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"random.d.ts","sourceRoot":"","sources":["random.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAEF;;;;;;GAMG;AACF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C"}
1
+ {"version":3,"file":"random.d.ts","sourceRoot":"","sources":["random.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C"}
package/src/random.js CHANGED
@@ -18,4 +18,4 @@ export function randomFloat(range) {
18
18
  export function randomInt(range) {
19
19
  return Math.floor(randomFloat(range));
20
20
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmFuZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNGLE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYTtJQUN0QyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDaEMsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNGLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBYTtJQUNwQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVzIHNpbmdsZSByYW5kb20gZmxvYXQgZnJvbSAwIHRvIHJhbmdlLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZSBNYXggZ2VuZXJhdGluZyB2YWx1ZS5cbiAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gZmxvYXQgZ2VuZXJhdGVkLlxuICovXG4gZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbUZsb2F0KHJhbmdlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogcmFuZ2U7XG4gfVxuICBcbi8qKlxuICogR2VuZXJhdGVzIHNpbmdsZSByYW5kb20gaW50ZWdlciBmcm9tIDAgdG8gcmFuZ2UuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJ9IHJhbmdlIE1heCBnZW5lcmF0aW5nIHZhbHVlLlxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIGdlbmVyYXRlZC5cbiAqL1xuIGV4cG9ydCBmdW5jdGlvbiByYW5kb21JbnQocmFuZ2U6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IocmFuZG9tRmxvYXQocmFuZ2UpKTtcbiB9XG4iXX0=
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmFuZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYTtJQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBYTtJQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVzIHNpbmdsZSByYW5kb20gZmxvYXQgZnJvbSAwIHRvIHJhbmdlLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZSBNYXggZ2VuZXJhdGluZyB2YWx1ZS5cbiAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gZmxvYXQgZ2VuZXJhdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tRmxvYXQocmFuZ2U6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpICogcmFuZ2U7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHNpbmdsZSByYW5kb20gaW50ZWdlciBmcm9tIDAgdG8gcmFuZ2UuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJ9IHJhbmdlIE1heCBnZW5lcmF0aW5nIHZhbHVlLlxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIGdlbmVyYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbUludChyYW5nZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IocmFuZG9tRmxvYXQocmFuZ2UpKTtcbn1cbiJdfQ==