sliftutils 1.2.22 → 1.2.24

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,220 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
12
+ //exports.InputLabelURL = exports.InputLabel = exports.endGuessDateRange = exports.startGuessDateRange = void 0;
13
+ const preact_1 = __importDefault(require("preact"));
14
+ const Input_1 = require("./Input");
15
+ const typesafecss_1 = require("typesafecss");
16
+ const caching_1 = require("socket-function/src/caching");
17
+ const observer_1 = require("./observer");
18
+ const mobx_1 = require("mobx");
19
+ function roundToDecimals(value, decimals) {
20
+ return Math.round(value * 10 ** decimals) / 10 ** decimals;
21
+ }
22
+ exports.startGuessDateRange = +new Date(2010, 0, 1).getTime();
23
+ exports.endGuessDateRange = +new Date(2050, 0, 1).getTime();
24
+ let InputLabel = class InputLabel extends preact_1.default.Component {
25
+ constructor() {
26
+ super(...arguments);
27
+ this.synced = (0, mobx_1.observable)({
28
+ editting: false,
29
+ editInputValue: "",
30
+ editUpdateSeqNum: 0,
31
+ });
32
+ }
33
+ render() {
34
+ var _a, _b, _c, _d;
35
+ let props = { ...this.props };
36
+ function addValueMapping(mapper) {
37
+ const baseOnChange = props.onChange;
38
+ if (baseOnChange) {
39
+ props.onChange = e => {
40
+ baseOnChange({ currentTarget: { value: mapper(e.currentTarget.value) } });
41
+ };
42
+ }
43
+ const baseOnChangeValue = props.onChangeValue;
44
+ if (baseOnChangeValue) {
45
+ props.onChangeValue = e => {
46
+ baseOnChangeValue(mapper(e));
47
+ };
48
+ }
49
+ const baseOnBlur = props.onBlur;
50
+ if (baseOnBlur) {
51
+ props.onBlur = e => {
52
+ baseOnBlur({ currentTarget: { value: mapper(e.currentTarget.value) } });
53
+ };
54
+ }
55
+ const baseOnInput = props.onInput;
56
+ if (baseOnInput) {
57
+ props.onInput = e => {
58
+ baseOnInput({ currentTarget: { value: mapper(e.currentTarget.value) } });
59
+ };
60
+ }
61
+ }
62
+ let label = props.label || props.children;
63
+ props.title = props.tooltip;
64
+ if ("value" in props) {
65
+ props.value = (_a = props.value) !== null && _a !== void 0 ? _a : "";
66
+ }
67
+ if ((!props.type || props.type === "number") && props.useDateUI) {
68
+ let value = String(props.value);
69
+ props.type = "datetime-local";
70
+ props.edit = false;
71
+ props.textarea = false;
72
+ props.number = false;
73
+ props.forceInputValueUpdatesWhenFocused = true;
74
+ // NOTE: When using forceInputValueUpdatesWhenFocused we need hot, otherwise the user's updates
75
+ // won't be visible.
76
+ props.hot = true;
77
+ if (isJSNumber(value)) {
78
+ value = formatDateTimeForInput(+value);
79
+ }
80
+ else {
81
+ value = "";
82
+ }
83
+ props.value = value;
84
+ addValueMapping(value => (new Date(value).getTime() || Date.now()));
85
+ }
86
+ if (props.fontSize !== undefined) {
87
+ props.style = { ...props.style, fontSize: props.fontSize };
88
+ }
89
+ if (props.integer) {
90
+ props.number = true;
91
+ }
92
+ if (props.number) {
93
+ props.type = "number";
94
+ }
95
+ if (props.checkbox) {
96
+ props.type = "checkbox";
97
+ }
98
+ if (props.percent) {
99
+ props.value = (Number(props.value) || 0) * 100;
100
+ addValueMapping(value => String(+value / 100));
101
+ props.maxDecimals = (_b = props.maxDecimals) !== null && _b !== void 0 ? _b : 2;
102
+ props.number = (_c = props.number) !== null && _c !== void 0 ? _c : true;
103
+ props.type = "number";
104
+ }
105
+ let maxDecimals = props.maxDecimals;
106
+ if (typeof maxDecimals === "number") {
107
+ props.value = roundToDecimals(Number(props.value), maxDecimals);
108
+ }
109
+ function formatDateTimeForInput(value) {
110
+ value -= new Date(value).getTimezoneOffset() * 60 * 1000;
111
+ return new Date(value).toISOString().slice(0, -1);
112
+ }
113
+ let style = { ...props.style };
114
+ if (props.type === "number") {
115
+ let fontSize = (_d = props.fontSize) !== null && _d !== void 0 ? _d : 12;
116
+ style.width = 40 + String(props.value).length * (fontSize * 0.75);
117
+ }
118
+ let onClick;
119
+ if (props.edit) {
120
+ let baseBlur = props.onBlur;
121
+ props.onBlur = e => {
122
+ this.synced.editting = false;
123
+ baseBlur === null || baseBlur === void 0 ? void 0 : baseBlur(e);
124
+ };
125
+ onClick = (e) => {
126
+ e.stopPropagation();
127
+ this.synced.editting = true;
128
+ };
129
+ }
130
+ let stateEditting = this.synced.editting;
131
+ let sizeBasedOnContents = props.edit;
132
+ if (props.edit && !stateEditting) {
133
+ sizeBasedOnContents = false;
134
+ }
135
+ if (sizeBasedOnContents) {
136
+ let baseChange = props.onChange;
137
+ props.onChange = e => {
138
+ this.synced.editUpdateSeqNum++;
139
+ baseChange === null || baseChange === void 0 ? void 0 : baseChange(e);
140
+ };
141
+ this.synced.editUpdateSeqNum;
142
+ }
143
+ let input = preact_1.default.createElement(Input_1.Input, { ...props, label: String(label), style: style, className: (props.flavor === "large" && "large "
144
+ || props.flavor === "none" && " "
145
+ || "tiny ")
146
+ + (props.class || props.className)
147
+ + (sizeBasedOnContents && typesafecss_1.css.absolute.pos(0, 0).fillBoth.resize("none") || ""), onInput: e => {
148
+ var _a;
149
+ if (props.edit) {
150
+ this.synced.editInputValue = e.currentTarget.value;
151
+ }
152
+ (_a = props.onInput) === null || _a === void 0 ? void 0 : _a.call(props, e);
153
+ } });
154
+ if (props.edit && !stateEditting) {
155
+ input = preact_1.default.createElement("span", { className: typesafecss_1.css.hbox(2) + " inputPlaceholder trigger-hover "
156
+ + props.editClass },
157
+ preact_1.default.createElement("span", { className: typesafecss_1.css.whiteSpace("pre-wrap")
158
+ + (props.class || props.className) }, props.value),
159
+ preact_1.default.createElement("span", { className: typesafecss_1.css.opacity(0.1).opacity(1, "hover") }, pencilSVG()));
160
+ }
161
+ return (preact_1.default.createElement("label", { onClick: onClick, className: typesafecss_1.css.hbox(5).relative
162
+ + " trigger-hover "
163
+ + props.outerClass
164
+ + (props.flavor === "large" && typesafecss_1.css.fontSize(18, "soft"))
165
+ + (props.fillWidth && typesafecss_1.css.fillWidth)
166
+ + typesafecss_1.css.position("relative", "soft") },
167
+ sizeBasedOnContents &&
168
+ preact_1.default.createElement("span", { className: typesafecss_1.css.whiteSpace("pre-wrap")
169
+ //.opacity(0)
170
+ //.pointerEvents("none")
171
+ + (props.editClass)
172
+ + " " + (props.class || props.className) },
173
+ this.synced.editInputValue || props.value || props.placeholder,
174
+ " |"),
175
+ label && preact_1.default.createElement("span", { className: typesafecss_1.css.fontWeight("bold").flexShrink0 }, label),
176
+ input));
177
+ }
178
+ };
179
+ exports.InputLabel = InputLabel;
180
+ exports.InputLabel = InputLabel = __decorate([
181
+ observer_1.observer
182
+ ], InputLabel);
183
+ const pencilSVG = (0, caching_1.lazy)(() => {
184
+ const src = "data:image/svg+xml;base64," + Buffer.from(`
185
+ <svg width="24" height="24" viewBox="-1 1 23 25" fill="none" xmlns="http://www.w3.org/2000/svg">
186
+ <path d="M5.98012 19.3734L8.60809 18.7164C8.62428 18.7124 8.64043 18.7084 8.65654 18.7044C8.87531 18.65 9.08562 18.5978 9.27707 18.4894C9.46852 18.381 9.62153 18.2275 9.7807 18.0679C9.79242 18.0561 9.80418 18.0444 9.81598 18.0325L17.0101 10.8385L17.0101 10.8385L17.0369 10.8117C17.3472 10.5014 17.6215 10.2272 17.8128 9.97638C18.0202 9.70457 18.1858 9.39104 18.1858 9C18.1858 8.60896 18.0202 8.29543 17.8128 8.02361C17.6215 7.77285 17.3472 7.49863 17.0369 7.18835L17.01 7.16152L16.8385 6.98995L16.8117 6.96314C16.5014 6.6528 16.2272 6.37853 15.9764 6.1872C15.7046 5.97981 15.391 5.81421 15 5.81421C14.609 5.81421 14.2954 5.97981 14.0236 6.1872C13.7729 6.37853 13.4986 6.65278 13.1884 6.96311L13.1615 6.98995L5.96745 14.184C5.95565 14.1958 5.94386 14.2076 5.93211 14.2193C5.77249 14.3785 5.61904 14.5315 5.51064 14.7229C5.40225 14.9144 5.34999 15.1247 5.29562 15.3435C5.29162 15.3596 5.28761 15.3757 5.28356 15.3919L4.62003 18.046C4.61762 18.0557 4.61518 18.0654 4.61272 18.0752C4.57411 18.2293 4.53044 18.4035 4.51593 18.5518C4.49978 18.7169 4.50127 19.0162 4.74255 19.2574C4.98383 19.4987 5.28307 19.5002 5.44819 19.4841C5.59646 19.4696 5.77072 19.4259 5.92479 19.3873C5.9346 19.3848 5.94433 19.3824 5.95396 19.38L5.95397 19.38L5.9801 19.3734L5.98012 19.3734Z" stroke="#33363F" stroke-width="1.2" fill="hsl(330, 50%, 60%)" />
187
+ <path d="M12.5 7.5L5.92819 14.0718C5.71566 14.2843 5.60939 14.3906 5.53953 14.5212C5.46966 14.6517 5.44019 14.7991 5.38124 15.0938L4.64709 18.7646C4.58057 19.0972 4.5473 19.2635 4.64191 19.3581C4.73652 19.4527 4.90283 19.4194 5.23544 19.3529L8.90621 18.6188C9.20093 18.5598 9.3483 18.5303 9.47885 18.4605C9.60939 18.3906 9.71566 18.2843 9.92819 18.0718L16.5 11.5L12.5 7.5Z" fill="hsl(45, 100%, 50%)" />
188
+ <path d="M12.5 7.5L16.5 11.5" stroke="#33363F" stroke-width="1.2" />
189
+ </svg>
190
+ `).toString("base64");
191
+ return preact_1.default.createElement("img", { draggable: false, src: src });
192
+ });
193
+ let InputLabelURL = class InputLabelURL extends preact_1.default.Component {
194
+ render() {
195
+ this.props.persisted.value;
196
+ let props = { ...this.props };
197
+ if (props.type === "number" || props.number) {
198
+ return preact_1.default.createElement(InputLabel, { ...props, value: Number(props.persisted.value) || 0, onChange: e => { var _a; props.persisted.value = +e.currentTarget.value; (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, e); } });
199
+ }
200
+ else if (props.type === "checkbox" || this.props.checkbox) {
201
+ return preact_1.default.createElement(InputLabel, { ...props, checked: Boolean(props.persisted.value) || false, onFocus: e => e.currentTarget.blur(), onChange: e => {
202
+ var _a;
203
+ props.persisted.value = e.currentTarget.checked ? "1" : "";
204
+ (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, e);
205
+ } });
206
+ }
207
+ else {
208
+ return preact_1.default.createElement(InputLabel, { ...props, value: String(props.persisted.value) || "", onChange: e => { var _a; props.persisted.value = e.currentTarget.value; (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, e); } });
209
+ }
210
+ }
211
+ };
212
+ exports.InputLabelURL = InputLabelURL;
213
+ exports.InputLabelURL = InputLabelURL = __decorate([
214
+ observer_1.observer
215
+ ], InputLabelURL);
216
+ function isJSNumber(value) {
217
+ return !isNaN(+value);
218
+ }
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5wdXRMYWJlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIklucHV0TGFiZWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBZ0M7QUFDaEMsNkNBQWtDO0FBQ2xDLHlEQUFtRDtBQUNuRCx5Q0FBc0M7QUFDdEMsK0JBQWtDO0FBa0VsQyxTQUFTLGVBQWUsQ0FBQyxLQUFhLEVBQUUsUUFBZ0I7SUFDcEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLFFBQVEsQ0FBQztBQUMvRCxDQUFDO0FBRVksUUFBQSxtQkFBbUIsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdEQsUUFBQSxpQkFBaUIsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFHMUQsSUFBTSxVQUFVLEdBQWhCLE1BQU0sVUFBVyxTQUFRLGdCQUFNLENBQUMsU0FBMEI7SUFBMUQ7O1FBQ0gsV0FBTSxHQUFHLElBQUEsaUJBQVUsRUFBQztZQUNoQixRQUFRLEVBQUUsS0FBSztZQUNmLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLGdCQUFnQixFQUFFLENBQUM7U0FDdEIsQ0FBQyxDQUFDO0lBa01QLENBQUM7SUFoTUcsTUFBTTs7UUFDRixJQUFJLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTlCLFNBQVMsZUFBZSxDQUFDLE1BQWlDO1lBQ3RELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDcEMsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDZixLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFO29C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QUFDLE1BQUEsS0FBSyxDQUFDLFFBQVEsc0RBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUksQ0FBQztRQUN6SyxDQUFDO0lBQ0wsQ0FBQztDQUNKLENBQUE7QUF0Qlksc0NBQWE7d0JBQWIsYUFBYTtJQUR6QixtQkFBUTtHQUNJLGFBQWEsQ0FzQnpCO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBYTtJQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwcmVhY3QgZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tIFwiLi9JbnB1dFwiO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSBcInR5cGVzYWZlY3NzXCI7XG5pbXBvcnQgeyBsYXp5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FjaGluZ1wiO1xuaW1wb3J0IHsgb2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlclwiO1xuaW1wb3J0IHsgb2JzZXJ2YWJsZSB9IGZyb20gXCJtb2J4XCI7XG5cbi8vIElNUE9SVEFOVCEgSW5wdXRQcm9wcyBpcyBpbiBib3RoIElucHV0TGFiZWwudHN4IGFuZCBJbnB1dC50c3gsIHNvIHRoZSB0eXBlcyBleHBvcnQgY29ycmVjdGx5XG5leHBvcnQgdHlwZSBJbnB1dFByb3BzID0gKFxuICAgIHByZWFjdC5KU1guSFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD5cbiAgICAmIHtcbiAgICAgICAgLyoqIE9OTFkgdGhyb3R0bGVzIG9uQ2hhbmdlVmFsdWUgKi9cbiAgICAgICAgdGhyb3R0bGU/OiBudW1iZXI7XG5cbiAgICAgICAgZmxhdm9yPzogXCJsYXJnZVwiIHwgXCJzbWFsbFwiIHwgXCJub25lXCI7XG4gICAgICAgIGZvY3VzT25Nb3VudD86IGJvb2xlYW47XG4gICAgICAgIHRleHRhcmVhPzogYm9vbGVhbjtcbiAgICAgICAgLyoqIFVwZGF0ZSBvbiBrZXkgc3Ryb2tlLCBub3Qgb24gYmx1ciAoanVzdCBkb2VzIG9uSW5wdXQgPSBvbkNoYW5nZSwgYXMgb25JbnB1dCBhbHJlYWR5IGRvZXMgdGhpcykgKi9cbiAgICAgICAgaG90PzogYm9vbGVhbjtcbiAgICAgICAgLyoqIFVwZGF0ZXMgYXJyb3cga2V5cyB3aXRoIG1vZGlmaWVyIGJlaGF2aW9yIHRvIHVzZSBsYXJnZXIgbnVtYmVycywgaW5zdGVhZCBvZiBkZWNpbWFscy4gKi9cbiAgICAgICAgaW50ZWdlcj86IGJvb2xlYW47XG5cbiAgICAgICAgLyoqIE9ubHkgd29ya3Mgd2l0aCBudW1iZXIvaW50ZWdlciAqL1xuICAgICAgICByZXZlcnNlQXJyb3dLZXlEaXJlY3Rpb24/OiBib29sZWFuO1xuXG4gICAgICAgIGlucHV0UmVmPzogKHg6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsKSA9PiB2b2lkO1xuICAgICAgICAvKiogRG9uJ3QgYmx1ciBvbiBlbnRlciBrZXkgKi9cbiAgICAgICAgbm9FbnRlcktleUJsdXI/OiBib29sZWFuO1xuICAgICAgICBub0ZvY3VzU2VsZWN0PzogYm9vbGVhbjtcbiAgICAgICAgaW5wdXRLZXk/OiBzdHJpbmc7XG4gICAgICAgIGZpbGxXaWR0aD86IGJvb2xlYW47XG5cblxuICAgICAgICBhdXRvY29tcGxldGVWYWx1ZXM/OiBzdHJpbmdbXTtcblxuICAgICAgICAvKiogRm9yY2VzIHRoZSBpbnB1dCB0byB1cGRhdGUgd2hlbiBmb2N1c2VkLiBVc3VhbGx5IHdlIGhvbGQgdXBkYXRlcywgdG8gcHJldmVudCB0aGUgdXNlcidzXG4gICAgICAgICAqICAgICAgdHlwaW5nIHRvIGJlIGludGVycnVwdGVkIGJ5IGJhY2tncm91bmQgdXBkYXRlcy5cbiAgICAgICAgICogICAgICBOT1RFOiBcImhvdFwiIGlzIHVzdWFsbHkgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGlzLlxuICAgICAgICAgKi9cbiAgICAgICAgZm9yY2VJbnB1dFZhbHVlVXBkYXRlc1doZW5Gb2N1c2VkPzogYm9vbGVhbjtcblxuICAgICAgICAvLyBOT1RFOiBXZSB0cmlnZ2VyIG9uQ2hhbmdlIChhbmQgb25DaGFuZ2VWYWx1ZSkgd2hlbmV2ZXJcbiAgICAgICAgLy8gICAgICBlLmN0cmxLZXkgJiYgKGUuY29kZS5zdGFydHNXaXRoKFwiS2V5XCIpIHx8IGUuY29kZSA9PT0gXCJFbnRlclwiKSB8fCBlLmNvZGUgPT09IFwiRW50ZXJcIiAmJiBlLnNoaWZ0S2V5XG4gICAgICAgIC8vICBUaGlzIGlzIGJlY2F1c2UgY3RybCB1c3VhbGx5IG1lYW5zIGEgaG90a2V5LCBhbmQgaG90a2V5cyB1c3VhbGx5IHdhbnQgY29tbWl0dGVkIHZhbHVlcy5cbiAgICAgICAgb25DaGFuZ2VWYWx1ZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICAgIH1cbilcblxuZXhwb3J0IHR5cGUgSW5wdXRMYWJlbFByb3BzID0gT21pdDxJbnB1dFByb3BzLCBcImxhYmVsXCIgfCBcInRpdGxlXCI+ICYge1xuICAgIGxhYmVsPzogcHJlYWN0LkNvbXBvbmVudENoaWxkO1xuICAgIG51bWJlcj86IGJvb2xlYW47XG4gICAgLyoqIEEgbnVtYmVyLCBBTkQsIGFuIGludGVnZXIuIENoYW5nZXMgYmVoYXZpb3IgYXJyb3cgYXJyb3cga2V5cyBhcyB3ZWxsICovXG4gICAgaW50ZWdlcj86IGJvb2xlYW47XG4gICAgY2hlY2tib3g/OiBib29sZWFuO1xuICAgIC8vIFNob3cgdGV4dCBhbmQgYSBwZW5jaWwsIG9ubHkgc2hvd2luZyB0aGUgaW5wdXQgb24gY2xpY2tcbiAgICBlZGl0PzogYm9vbGVhbjtcbiAgICBhbHdheXNTaG93UGVuY2lsPzogYm9vbGVhbjtcbiAgICBvdXRlckNsYXNzPzogc3RyaW5nO1xuICAgIG1heERlY2ltYWxzPzogbnVtYmVyO1xuICAgIHBlcmNlbnQ/OiBib29sZWFuO1xuICAgIGVkaXRDbGFzcz86IHN0cmluZztcblxuICAgIGZvbnRTaXplPzogbnVtYmVyO1xuXG4gICAgdG9vbHRpcD86IHN0cmluZztcblxuICAgIGZpbGxXaWR0aD86IGJvb2xlYW47XG5cbiAgICB1c2VEYXRlVUk/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gcm91bmRUb0RlY2ltYWxzKHZhbHVlOiBudW1iZXIsIGRlY2ltYWxzOiBudW1iZXIpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwICoqIGRlY2ltYWxzKSAvIDEwICoqIGRlY2ltYWxzO1xufVxuXG5leHBvcnQgY29uc3Qgc3RhcnRHdWVzc0RhdGVSYW5nZSA9ICtuZXcgRGF0ZSgyMDEwLCAwLCAxKS5nZXRUaW1lKCk7XG5leHBvcnQgY29uc3QgZW5kR3Vlc3NEYXRlUmFuZ2UgPSArbmV3IERhdGUoMjA1MCwgMCwgMSkuZ2V0VGltZSgpO1xuXG5Ab2JzZXJ2ZXJcbmV4cG9ydCBjbGFzcyBJbnB1dExhYmVsIGV4dGVuZHMgcHJlYWN0LkNvbXBvbmVudDxJbnB1dExhYmVsUHJvcHM+IHtcbiAgICBzeW5jZWQgPSBvYnNlcnZhYmxlKHtcbiAgICAgICAgZWRpdHRpbmc6IGZhbHNlLFxuICAgICAgICBlZGl0SW5wdXRWYWx1ZTogXCJcIixcbiAgICAgICAgZWRpdFVwZGF0ZVNlcU51bTogMCxcbiAgICB9KTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHByb3BzID0geyAuLi50aGlzLnByb3BzIH07XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkVmFsdWVNYXBwaW5nKG1hcHBlcjogKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZykge1xuICAgICAgICAgICAgY29uc3QgYmFzZU9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2U7XG4gICAgICAgICAgICBpZiAoYmFzZU9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgPSBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYmFzZU9uQ2hhbmdlKHsgY3VycmVudFRhcmdldDogeyB2YWx1ZTogbWFwcGVyKGUuY3VycmVudFRhcmdldC52YWx1ZSkgfSB9IGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJhc2VPbkNoYW5nZVZhbHVlID0gcHJvcHMub25DaGFuZ2VWYWx1ZTtcbiAgICAgICAgICAgIGlmIChiYXNlT25DaGFuZ2VWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHByb3BzLm9uQ2hhbmdlVmFsdWUgPSBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYmFzZU9uQ2hhbmdlVmFsdWUobWFwcGVyKGUpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmFzZU9uQmx1ciA9IHByb3BzLm9uQmx1cjtcbiAgICAgICAgICAgIGlmIChiYXNlT25CbHVyKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMub25CbHVyID0gZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2VPbkJsdXIoeyBjdXJyZW50VGFyZ2V0OiB7IHZhbHVlOiBtYXBwZXIoZS5jdXJyZW50VGFyZ2V0LnZhbHVlKSB9IH0gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmFzZU9uSW5wdXQgPSBwcm9wcy5vbklucHV0O1xuICAgICAgICAgICAgaWYgKGJhc2VPbklucHV0KSB7XG4gICAgICAgICAgICAgICAgcHJvcHMub25JbnB1dCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBiYXNlT25JbnB1dCh7IGN1cnJlbnRUYXJnZXQ6IHsgdmFsdWU6IG1hcHBlcihlLmN1cnJlbnRUYXJnZXQudmFsdWUpIH0gfSBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGFiZWwgPSBwcm9wcy5sYWJlbCB8fCBwcm9wcy5jaGlsZHJlbjtcbiAgICAgICAgKHByb3BzIGFzIGFueSkudGl0bGUgPSBwcm9wcy50b29sdGlwO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIHByb3BzKSB7XG4gICAgICAgICAgICBwcm9wcy52YWx1ZSA9IHByb3BzLnZhbHVlID8/IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKCFwcm9wcy50eXBlIHx8IHByb3BzLnR5cGUgPT09IFwibnVtYmVyXCIpICYmIHByb3BzLnVzZURhdGVVSSkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gU3RyaW5nKHByb3BzLnZhbHVlKTtcbiAgICAgICAgICAgIHByb3BzLnR5cGUgPSBcImRhdGV0aW1lLWxvY2FsXCI7XG4gICAgICAgICAgICBwcm9wcy5lZGl0ID0gZmFsc2U7XG4gICAgICAgICAgICBwcm9wcy50ZXh0YXJlYSA9IGZhbHNlO1xuICAgICAgICAgICAgcHJvcHMubnVtYmVyID0gZmFsc2U7XG4gICAgICAgICAgICBwcm9wcy5mb3JjZUlucHV0VmFsdWVVcGRhdGVzV2hlbkZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgLy8gTk9URTogV2hlbiB1c2luZyBmb3JjZUlucHV0VmFsdWVVcGRhdGVzV2hlbkZvY3VzZWQgd2UgbmVlZCBob3QsIG90aGVyd2lzZSB0aGUgdXNlcidzIHVwZGF0ZXNcbiAgICAgICAgICAgIC8vICB3b24ndCBiZSB2aXNpYmxlLlxuICAgICAgICAgICAgcHJvcHMuaG90ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChpc0pTTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZm9ybWF0RGF0ZVRpbWVGb3JJbnB1dCgrdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9wcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgYWRkVmFsdWVNYXBwaW5nKHZhbHVlID0+IChuZXcgRGF0ZSh2YWx1ZSkuZ2V0VGltZSgpIHx8IERhdGUubm93KCkpIGFzIGFueSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmZvbnRTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByb3BzLnN0eWxlID0geyAuLi5wcm9wcy5zdHlsZSBhcyBhbnksIGZvbnRTaXplOiBwcm9wcy5mb250U2l6ZSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5pbnRlZ2VyKSB7XG4gICAgICAgICAgICBwcm9wcy5udW1iZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5udW1iZXIpIHtcbiAgICAgICAgICAgIHByb3BzLnR5cGUgPSBcIm51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5jaGVja2JveCkge1xuICAgICAgICAgICAgcHJvcHMudHlwZSA9IFwiY2hlY2tib3hcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMucGVyY2VudCkge1xuICAgICAgICAgICAgcHJvcHMudmFsdWUgPSAoTnVtYmVyKHByb3BzLnZhbHVlKSB8fCAwKSAqIDEwMDtcbiAgICAgICAgICAgIGFkZFZhbHVlTWFwcGluZyh2YWx1ZSA9PiBTdHJpbmcoK3ZhbHVlIC8gMTAwKSk7XG4gICAgICAgICAgICBwcm9wcy5tYXhEZWNpbWFscyA9IHByb3BzLm1heERlY2ltYWxzID8/IDI7XG4gICAgICAgICAgICBwcm9wcy5udW1iZXIgPSBwcm9wcy5udW1iZXIgPz8gdHJ1ZTtcbiAgICAgICAgICAgIHByb3BzLnR5cGUgPSBcIm51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtYXhEZWNpbWFscyA9IHByb3BzLm1heERlY2ltYWxzO1xuICAgICAgICBpZiAodHlwZW9mIG1heERlY2ltYWxzID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBwcm9wcy52YWx1ZSA9IHJvdW5kVG9EZWNpbWFscyhOdW1iZXIocHJvcHMudmFsdWUpLCBtYXhEZWNpbWFscyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmb3JtYXREYXRlVGltZUZvcklucHV0KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgICAgIHZhbHVlIC09IG5ldyBEYXRlKHZhbHVlKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAgKiAxMDAwO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdHlsZSA9IHsgLi4ucHJvcHMuc3R5bGUgYXMgYW55IH07XG4gICAgICAgIGlmIChwcm9wcy50eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBsZXQgZm9udFNpemUgPSBwcm9wcy5mb250U2l6ZSA/PyAxMjtcbiAgICAgICAgICAgIHN0eWxlLndpZHRoID0gNDAgKyBTdHJpbmcocHJvcHMudmFsdWUpLmxlbmd0aCAqIChmb250U2l6ZSAqIDAuNzUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvbkNsaWNrOiAoKGU6IHByZWFjdC5KU1guVGFyZ2V0ZWRNb3VzZUV2ZW50PEhUTUxFbGVtZW50PikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwcm9wcy5lZGl0KSB7XG4gICAgICAgICAgICBsZXQgYmFzZUJsdXIgPSBwcm9wcy5vbkJsdXI7XG4gICAgICAgICAgICBwcm9wcy5vbkJsdXIgPSBlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5lZGl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJhc2VCbHVyPy4oZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb25DbGljayA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5lZGl0dGluZyA9IHRydWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0YXRlRWRpdHRpbmcgPSB0aGlzLnN5bmNlZC5lZGl0dGluZztcbiAgICAgICAgbGV0IHNpemVCYXNlZE9uQ29udGVudHMgPSBwcm9wcy5lZGl0O1xuICAgICAgICBpZiAocHJvcHMuZWRpdCAmJiAhc3RhdGVFZGl0dGluZykge1xuICAgICAgICAgICAgc2l6ZUJhc2VkT25Db250ZW50cyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaXplQmFzZWRPbkNvbnRlbnRzKSB7XG4gICAgICAgICAgICBsZXQgYmFzZUNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlO1xuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgPSBlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5lZGl0VXBkYXRlU2VxTnVtKys7XG4gICAgICAgICAgICAgICAgYmFzZUNoYW5nZT8uKGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuc3luY2VkLmVkaXRVcGRhdGVTZXFOdW07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaW5wdXQgPSA8SW5wdXRcbiAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgIGxhYmVsPXtTdHJpbmcobGFiZWwpfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmZsYXZvciA9PT0gXCJsYXJnZVwiICYmIFwibGFyZ2UgXCJcbiAgICAgICAgICAgICAgICAgICAgfHwgcHJvcHMuZmxhdm9yID09PSBcIm5vbmVcIiAmJiBcIiBcIlxuICAgICAgICAgICAgICAgICAgICB8fCBcInRpbnkgXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKyAocHJvcHMuY2xhc3MgfHwgcHJvcHMuY2xhc3NOYW1lKVxuICAgICAgICAgICAgICAgICsgKHNpemVCYXNlZE9uQ29udGVudHMgJiYgY3NzLmFic29sdXRlLnBvcygwLCAwKS5maWxsQm90aC5yZXNpemUoXCJub25lXCIpIHx8IFwiXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbklucHV0PXtlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcHMuZWRpdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5lZGl0SW5wdXRWYWx1ZSA9IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvcHMub25JbnB1dD8uKGUpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgLz47XG5cbiAgICAgICAgaWYgKHByb3BzLmVkaXQgJiYgIXN0YXRlRWRpdHRpbmcpIHtcbiAgICAgICAgICAgIGlucHV0ID0gPHNwYW4gY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICBjc3MuaGJveCgyKSArIFwiIGlucHV0UGxhY2Vob2xkZXIgdHJpZ2dlci1ob3ZlciBcIlxuICAgICAgICAgICAgICAgICsgcHJvcHMuZWRpdENsYXNzXG4gICAgICAgICAgICB9PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgICAgICAgICAgICAgICBjc3Mud2hpdGVTcGFjZShcInByZS13cmFwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICArIChwcm9wcy5jbGFzcyB8fCBwcm9wcy5jbGFzc05hbWUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy52YWx1ZX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3Mub3BhY2l0eSgwLjEpLm9wYWNpdHkoMSwgXCJob3ZlclwiKX0+XG4gICAgICAgICAgICAgICAgICAgIHtwZW5jaWxTVkcoKX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8bGFiZWwgb25DbGljaz17b25DbGlja30gY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICBjc3MuaGJveCg1KS5yZWxhdGl2ZVxuICAgICAgICAgICAgICAgICsgXCIgdHJpZ2dlci1ob3ZlciBcIlxuICAgICAgICAgICAgICAgICsgcHJvcHMub3V0ZXJDbGFzc1xuICAgICAgICAgICAgICAgICsgKHByb3BzLmZsYXZvciA9PT0gXCJsYXJnZVwiICYmIGNzcy5mb250U2l6ZSgxOCwgXCJzb2Z0XCIpKVxuICAgICAgICAgICAgICAgICsgKHByb3BzLmZpbGxXaWR0aCAmJiBjc3MuZmlsbFdpZHRoKVxuICAgICAgICAgICAgICAgICsgY3NzLnBvc2l0aW9uKFwicmVsYXRpdmVcIiwgXCJzb2Z0XCIpXG4gICAgICAgICAgICB9PlxuICAgICAgICAgICAgICAgIHsvKiBFeHRyYSBVSSBzbyB0aGUgdGV4dGFyZWEgc2l6ZXMgcHJvcGVybHkuICovfVxuICAgICAgICAgICAgICAgIHtzaXplQmFzZWRPbkNvbnRlbnRzICYmXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcy53aGl0ZVNwYWNlKFwicHJlLXdyYXBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy5vcGFjaXR5KDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ucG9pbnRlckV2ZW50cyhcIm5vbmVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChwcm9wcy5lZGl0Q2xhc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBcIiBcIiArIChwcm9wcy5jbGFzcyB8fCBwcm9wcy5jbGFzc05hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBXZSBhZGQgYW5vdGhlciBjaGFyYWN0ZXIsIHNvIFwiYVxcblwiIHJlc3VsdHMgaW4gdHdvIGxpbmVzLCBpbnN0ZWFkIG9mIDEuICovfVxuICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMuc3luY2VkLmVkaXRJbnB1dFZhbHVlIHx8IHByb3BzLnZhbHVlIHx8IHByb3BzLnBsYWNlaG9sZGVyfSB8XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgey8qIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2hvdy1vbi1ob3ZlciBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKyBjc3MuaHNsYSgwLCAwLCAwLCAwLjIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFic29sdXRlLnBvcygtOCwgLTIpLnNpemUoXCJjYWxjKDEwMCUgKyAxNnB4KVwiIGFzIFwiMTAwJVwiLCBcImNhbGMoMTAwJSArIDRweClcIiBhcyBcIjEwMCVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuekluZGV4KC0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wb2ludGVyRXZlbnRzKFwibm9uZVwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLz4gKi99XG4gICAgICAgICAgICAgICAge2xhYmVsICYmIDxzcGFuIGNsYXNzTmFtZT17Y3NzLmZvbnRXZWlnaHQoXCJib2xkXCIpLmZsZXhTaHJpbmswfT57bGFiZWx9PC9zcGFuPn1cbiAgICAgICAgICAgICAgICB7aW5wdXR9XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuY29uc3QgcGVuY2lsU1ZHID0gbGF6eSgoKSA9PiB7XG4gICAgY29uc3Qgc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFwiICsgQnVmZmVyLmZyb20oYFxuICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIi0xIDEgMjMgMjVcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGggZD1cIk01Ljk4MDEyIDE5LjM3MzRMOC42MDgwOSAxOC43MTY0QzguNjI0MjggMTguNzEyNCA4LjY0MDQzIDE4LjcwODQgOC42NTY1NCAxOC43MDQ0QzguODc1MzEgMTguNjUgOS4wODU2MiAxOC41OTc4IDkuMjc3MDcgMTguNDg5NEM5LjQ2ODUyIDE4LjM4MSA5LjYyMTUzIDE4LjIyNzUgOS43ODA3IDE4LjA2NzlDOS43OTI0MiAxOC4wNTYxIDkuODA0MTggMTguMDQ0NCA5LjgxNTk4IDE4LjAzMjVMMTcuMDEwMSAxMC44Mzg1TDE3LjAxMDEgMTAuODM4NUwxNy4wMzY5IDEwLjgxMTdDMTcuMzQ3MiAxMC41MDE0IDE3LjYyMTUgMTAuMjI3MiAxNy44MTI4IDkuOTc2MzhDMTguMDIwMiA5LjcwNDU3IDE4LjE4NTggOS4zOTEwNCAxOC4xODU4IDlDMTguMTg1OCA4LjYwODk2IDE4LjAyMDIgOC4yOTU0MyAxNy44MTI4IDguMDIzNjFDMTcuNjIxNSA3Ljc3Mjg1IDE3LjM0NzIgNy40OTg2MyAxNy4wMzY5IDcuMTg4MzVMMTcuMDEgNy4xNjE1MkwxNi44Mzg1IDYuOTg5OTVMMTYuODExNyA2Ljk2MzE0QzE2LjUwMTQgNi42NTI4IDE2LjIyNzIgNi4zNzg1MyAxNS45NzY0IDYuMTg3MkMxNS43MDQ2IDUuOTc5ODEgMTUuMzkxIDUuODE0MjEgMTUgNS44MTQyMUMxNC42MDkgNS44MTQyMSAxNC4yOTU0IDUuOTc5ODEgMTQuMDIzNiA2LjE4NzJDMTMuNzcyOSA2LjM3ODUzIDEzLjQ5ODYgNi42NTI3OCAxMy4xODg0IDYuOTYzMTFMMTMuMTYxNSA2Ljk4OTk1TDUuOTY3NDUgMTQuMTg0QzUuOTU1NjUgMTQuMTk1OCA1Ljk0Mzg2IDE0LjIwNzYgNS45MzIxMSAxNC4yMTkzQzUuNzcyNDkgMTQuMzc4NSA1LjYxOTA0IDE0LjUzMTUgNS41MTA2NCAxNC43MjI5QzUuNDAyMjUgMTQuOTE0NCA1LjM0OTk5IDE1LjEyNDcgNS4yOTU2MiAxNS4zNDM1QzUuMjkxNjIgMTUuMzU5NiA1LjI4NzYxIDE1LjM3NTcgNS4yODM1NiAxNS4zOTE5TDQuNjIwMDMgMTguMDQ2QzQuNjE3NjIgMTguMDU1NyA0LjYxNTE4IDE4LjA2NTQgNC42MTI3MiAxOC4wNzUyQzQuNTc0MTEgMTguMjI5MyA0LjUzMDQ0IDE4LjQwMzUgNC41MTU5MyAxOC41NTE4QzQuNDk5NzggMTguNzE2OSA0LjUwMTI3IDE5LjAxNjIgNC43NDI1NSAxOS4yNTc0QzQuOTgzODMgMTkuNDk4NyA1LjI4MzA3IDE5LjUwMDIgNS40NDgxOSAxOS40ODQxQzUuNTk2NDYgMTkuNDY5NiA1Ljc3MDcyIDE5LjQyNTkgNS45MjQ3OSAxOS4zODczQzUuOTM0NiAxOS4zODQ4IDUuOTQ0MzMgMTkuMzgyNCA1Ljk1Mzk2IDE5LjM4TDUuOTUzOTcgMTkuMzhMNS45ODAxIDE5LjM3MzRMNS45ODAxMiAxOS4zNzM0WlwiIHN0cm9rZT1cIiMzMzM2M0ZcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBmaWxsPVwiaHNsKDMzMCwgNTAlLCA2MCUpXCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0xMi41IDcuNUw1LjkyODE5IDE0LjA3MThDNS43MTU2NiAxNC4yODQzIDUuNjA5MzkgMTQuMzkwNiA1LjUzOTUzIDE0LjUyMTJDNS40Njk2NiAxNC42NTE3IDUuNDQwMTkgMTQuNzk5MSA1LjM4MTI0IDE1LjA5MzhMNC42NDcwOSAxOC43NjQ2QzQuNTgwNTcgMTkuMDk3MiA0LjU0NzMgMTkuMjYzNSA0LjY0MTkxIDE5LjM1ODFDNC43MzY1MiAxOS40NTI3IDQuOTAyODMgMTkuNDE5NCA1LjIzNTQ0IDE5LjM1MjlMOC45MDYyMSAxOC42MTg4QzkuMjAwOTMgMTguNTU5OCA5LjM0ODMgMTguNTMwMyA5LjQ3ODg1IDE4LjQ2MDVDOS42MDkzOSAxOC4zOTA2IDkuNzE1NjYgMTguMjg0MyA5LjkyODE5IDE4LjA3MThMMTYuNSAxMS41TDEyLjUgNy41WlwiIGZpbGw9XCJoc2woNDUsIDEwMCUsIDUwJSlcIiAvPlxuICAgICAgICA8cGF0aCBkPVwiTTEyLjUgNy41TDE2LjUgMTEuNVwiIHN0cm9rZT1cIiMzMzM2M0ZcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiAvPlxuICAgIDwvc3ZnPlxuICAgIGApLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgIHJldHVybiA8aW1nIGRyYWdnYWJsZT17ZmFsc2V9IHNyYz17c3JjfSAvPjtcbn0pO1xuXG5Ab2JzZXJ2ZXJcbmV4cG9ydCBjbGFzcyBJbnB1dExhYmVsVVJMIGV4dGVuZHMgcHJlYWN0LkNvbXBvbmVudDxJbnB1dExhYmVsUHJvcHMgJiB7XG4gICAgcGVyc2lzdGVkOiB7IHZhbHVlOiB1bmtub3duIH07XG59PiB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLnByb3BzLnBlcnNpc3RlZC52YWx1ZTtcbiAgICAgICAgbGV0IHByb3BzID0geyAuLi50aGlzLnByb3BzIH07XG4gICAgICAgIGlmIChwcm9wcy50eXBlID09PSBcIm51bWJlclwiIHx8IHByb3BzLm51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIDxJbnB1dExhYmVsIHsuLi5wcm9wc30gdmFsdWU9e051bWJlcihwcm9wcy5wZXJzaXN0ZWQudmFsdWUpIHx8IDB9IG9uQ2hhbmdlPXtlID0+IHsgcHJvcHMucGVyc2lzdGVkLnZhbHVlID0gK2UuY3VycmVudFRhcmdldC52YWx1ZTsgcHJvcHMub25DaGFuZ2U/LihlKTsgfX0gLz47XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMudHlwZSA9PT0gXCJjaGVja2JveFwiIHx8IHRoaXMucHJvcHMuY2hlY2tib3gpIHtcbiAgICAgICAgICAgIHJldHVybiA8SW5wdXRMYWJlbFxuICAgICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgICAgICBjaGVja2VkPXtCb29sZWFuKHByb3BzLnBlcnNpc3RlZC52YWx1ZSkgfHwgZmFsc2V9XG4gICAgICAgICAgICAgICAgb25Gb2N1cz17ZSA9PiBlLmN1cnJlbnRUYXJnZXQuYmx1cigpfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMucGVyc2lzdGVkLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQgPyBcIjFcIiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm9uQ2hhbmdlPy4oZSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDxJbnB1dExhYmVsIHsuLi5wcm9wc30gdmFsdWU9e1N0cmluZyhwcm9wcy5wZXJzaXN0ZWQudmFsdWUpIHx8IFwiXCJ9IG9uQ2hhbmdlPXtlID0+IHsgcHJvcHMucGVyc2lzdGVkLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlOyBwcm9wcy5vbkNoYW5nZT8uKGUpOyB9fSAvPjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNKU051bWJlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuICFpc05hTigrdmFsdWUpO1xufVxuIl19
220
+ /* _JS_SOURCE_HASH = "67e9a085f451f3ff63028b92358339fb096c34639b4318aec679a46064249d51"; */
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
12
+ //exports.closeAllModals = exports.showModal = void 0;
13
+ const preact_1 = __importDefault(require("preact"));
14
+ const mobx_1 = require("mobx");
15
+ const observer_1 = require("./observer");
16
+ const caching_1 = require("socket-function/src/caching");
17
+ const misc_1 = require("socket-function/src/misc");
18
+ const activeModals = (0, mobx_1.observable)({}, undefined, { deep: false });
19
+ let ModalRoot = class ModalRoot extends preact_1.default.Component {
20
+ render() {
21
+ const modals = Object.entries(activeModals);
22
+ return preact_1.default.createElement("div", { style: { position: "relative", zIndex: 2147483647 } }, modals.map(([id, data]) => (preact_1.default.createElement("div", { key: id }, data.contents))));
23
+ }
24
+ };
25
+ ModalRoot = __decorate([
26
+ observer_1.observer
27
+ ], ModalRoot);
28
+ const ensureRootMounted = (0, caching_1.lazy)(() => {
29
+ const root = document.createElement("div");
30
+ document.body.appendChild(root);
31
+ preact_1.default.render(preact_1.default.createElement(ModalRoot, null), root);
32
+ });
33
+ function closeModal(id) {
34
+ const modal = activeModals[id];
35
+ if (!modal) {
36
+ return;
37
+ }
38
+ delete activeModals[id];
39
+ if (modal.onClose) {
40
+ modal.onClose();
41
+ }
42
+ }
43
+ function showModal(config) {
44
+ ensureRootMounted();
45
+ const id = `modal-${(0, misc_1.nextId)()}`;
46
+ activeModals[id] = {
47
+ contents: config.contents,
48
+ onClose: config.onClose
49
+ };
50
+ return {
51
+ close() {
52
+ closeModal(id);
53
+ }
54
+ };
55
+ }
56
+ exports.showModal = showModal;
57
+ function closeAllModals() {
58
+ // for (let key in activeModals) {
59
+ // closeModal(key);
60
+ // }
61
+ // Actually, just close the last opened modal
62
+ const keys = Object.keys(activeModals);
63
+ if (keys.length > 0) {
64
+ closeModal(keys[keys.length - 1]);
65
+ }
66
+ }
67
+ exports.closeAllModals = closeAllModals;
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtb2RhbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLCtCQUFrQztBQUVsQyx5Q0FBc0M7QUFDdEMseURBQW1EO0FBQ25ELG1EQUFrRDtBQU9sRCxNQUFNLFlBQVksR0FBRyxJQUFBLGlCQUFVLEVBQUMsRUFBa0MsRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUdoRyxJQUFNLFNBQVMsR0FBZixNQUFNLFNBQVUsU0FBUSxnQkFBTSxDQUFDLFNBQVM7SUFDcEMsTUFBTTtRQUNGLE1BQU0sTUFBTSxHQUErQixNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sd0NBQUssS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQzFELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDeEIsd0NBQUssR0FBRyxFQUFFLEVBQUUsSUFDUCxJQUFJLENBQUMsUUFBUSxDQUNaLENBQ1QsQ0FBQyxDQUNBLENBQUM7SUFDWCxDQUFDO0NBQ0osQ0FBQTtBQVhLLFNBQVM7SUFEZCxtQkFBUTtHQUNILFNBQVMsQ0FXZDtBQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBQSxjQUFJLEVBQUMsR0FBRyxFQUFFO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsK0JBQUMsU0FBUyxPQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFHSCxTQUFTLFVBQVUsQ0FBQyxFQUFVO0lBQzFCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDVCxPQUFPO0lBQ1gsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXhCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQixDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQWdCLFNBQVMsQ0FBQyxNQUd6QjtJQUdHLGlCQUFpQixFQUFFLENBQUM7SUFFcEIsTUFBTSxFQUFFLEdBQUcsU0FBUyxJQUFBLGFBQU0sR0FBRSxFQUFFLENBQUM7SUFDL0IsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHO1FBQ2YsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztLQUMxQixDQUFDO0lBRUYsT0FBTztRQUNILEtBQUs7WUFDRCxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkIsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBbkJELDhCQW1CQztBQUVELFNBQWdCLGNBQWM7SUFDMUIsa0NBQWtDO0lBQ2xDLHVCQUF1QjtJQUN2QixJQUFJO0lBQ0osNkNBQTZDO0lBQzdDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7QUFDTCxDQUFDO0FBVEQsd0NBU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcHJlYWN0IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IG9ic2VydmFibGUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0ICogYXMgbW9ieCBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHsgb2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlclwiO1xuaW1wb3J0IHsgbGF6eSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2NhY2hpbmdcIjtcbmltcG9ydCB7IG5leHRJZCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcblxudHlwZSBNb2RhbERhdGEgPSB7XG4gICAgY29udGVudHM6IHByZWFjdC5Db21wb25lbnRDaGlsZHJlbjtcbiAgICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IGFjdGl2ZU1vZGFscyA9IG9ic2VydmFibGUoe30gYXMgeyBba2V5OiBzdHJpbmddOiBNb2RhbERhdGEgfSwgdW5kZWZpbmVkLCB7IGRlZXA6IGZhbHNlIH0pO1xuXG5Ab2JzZXJ2ZXJcbmNsYXNzIE1vZGFsUm9vdCBleHRlbmRzIHByZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgbW9kYWxzOiBBcnJheTxbc3RyaW5nLCBNb2RhbERhdGFdPiA9IE9iamVjdC5lbnRyaWVzKGFjdGl2ZU1vZGFscyk7XG4gICAgICAgIHJldHVybiA8ZGl2IHN0eWxlPXt7IHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsIHpJbmRleDogMjE0NzQ4MzY0NyB9fT5cbiAgICAgICAgICAgIHttb2RhbHMubWFwKChbaWQsIGRhdGFdKSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdiBrZXk9e2lkfT5cbiAgICAgICAgICAgICAgICAgICAge2RhdGEuY29udGVudHN9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+O1xuICAgIH1cbn1cblxuY29uc3QgZW5zdXJlUm9vdE1vdW50ZWQgPSBsYXp5KCgpID0+IHtcbiAgICBjb25zdCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpO1xuICAgIHByZWFjdC5yZW5kZXIoPE1vZGFsUm9vdCAvPiwgcm9vdCk7XG59KTtcblxuXG5mdW5jdGlvbiBjbG9zZU1vZGFsKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtb2RhbCA9IGFjdGl2ZU1vZGFsc1tpZF07XG4gICAgaWYgKCFtb2RhbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGVsZXRlIGFjdGl2ZU1vZGFsc1tpZF07XG5cbiAgICBpZiAobW9kYWwub25DbG9zZSkge1xuICAgICAgICBtb2RhbC5vbkNsb3NlKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvd01vZGFsKGNvbmZpZzoge1xuICAgIGNvbnRlbnRzOiBwcmVhY3QuQ29tcG9uZW50Q2hpbGRyZW47XG4gICAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG59KToge1xuICAgIGNsb3NlOiAoKSA9PiB2b2lkO1xufSB7XG4gICAgZW5zdXJlUm9vdE1vdW50ZWQoKTtcblxuICAgIGNvbnN0IGlkID0gYG1vZGFsLSR7bmV4dElkKCl9YDtcbiAgICBhY3RpdmVNb2RhbHNbaWRdID0ge1xuICAgICAgICBjb250ZW50czogY29uZmlnLmNvbnRlbnRzLFxuICAgICAgICBvbkNsb3NlOiBjb25maWcub25DbG9zZVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjbG9zZSgpIHtcbiAgICAgICAgICAgIGNsb3NlTW9kYWwoaWQpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlQWxsTW9kYWxzKCkge1xuICAgIC8vIGZvciAobGV0IGtleSBpbiBhY3RpdmVNb2RhbHMpIHtcbiAgICAvLyAgICAgY2xvc2VNb2RhbChrZXkpO1xuICAgIC8vIH1cbiAgICAvLyBBY3R1YWxseSwganVzdCBjbG9zZSB0aGUgbGFzdCBvcGVuZWQgbW9kYWxcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYWN0aXZlTW9kYWxzKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNsb3NlTW9kYWwoa2V5c1trZXlzLmxlbmd0aCAtIDFdKTtcbiAgICB9XG59Il19
69
+ /* _JS_SOURCE_HASH = "2c3c52dbd36c479ff9981110fb3e02e7f8ed9676425975a0eede5c6ca709d8f5"; */
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
3
  //exports.observer = void 0;
4
4
  const mobx_1 = require("mobx");
5
+ const measure_1 = require("socket-function/src/profiling/measure");
5
6
  let globalConstructOrder = 1;
6
7
  function observer(Constructor) {
7
8
  let name = Constructor.name;
@@ -22,12 +23,14 @@ function observer(Constructor) {
22
23
  render(...args) {
23
24
  let output;
24
25
  this.reaction.track(() => {
25
- output = super.render(...args);
26
+ (0, measure_1.measureBlock)(() => {
27
+ output = super.render(...args);
28
+ }, `${name}|render`);
26
29
  });
27
30
  return output;
28
31
  }
29
32
  };
30
33
  }
31
34
  exports.observer = observer;
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvYnNlcnZlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQTRDO0FBRTVDLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLFNBQWdCLFFBQVEsQ0FTcEIsV0FBYztJQUVkLElBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDNUIsT0FBTyxLQUFNLFNBQVEsV0FBVztRQUF6Qjs7WUFHSCxhQUFRLEdBQUcsSUFBSSxlQUFRLENBQUMsVUFBVSxJQUFJLElBQUksb0JBQW9CLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRTtnQkFDckUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBWVAsQ0FBQztRQWhCRyxhQUFhO1FBQ2IsTUFBTSxLQUFLLElBQUksS0FBSyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBSTlDLG9CQUFvQjs7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixNQUFBLEtBQUssQ0FBQyxvQkFBb0Isb0RBQUksQ0FBQztRQUNuQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLEdBQUcsSUFBVztZQUNqQixJQUFJLE1BQTZCLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNyQixNQUFNLEdBQUksS0FBSyxDQUFDLE1BQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBOUJELDRCQThCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHByZWFjdCBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBvYnNlcnZhYmxlLCBSZWFjdGlvbiB9IGZyb20gXCJtb2J4XCI7XG5cbmxldCBnbG9iYWxDb25zdHJ1Y3RPcmRlciA9IDE7XG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZXI8XG4gICAgVCBleHRlbmRzIHtcbiAgICAgICAgbmV3KC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICAgICAgcmVuZGVyKCk6IHByZWFjdC5Db21wb25lbnRDaGlsZDtcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlKGNhbGxiYWNrPzogKCkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgICAgICAgICBjb21wb25lbnRXaWxsVW5tb3VudD8oKTogdm9pZDtcbiAgICAgICAgfVxuICAgIH1cbj4oXG4gICAgQ29uc3RydWN0b3I6IFRcbikge1xuICAgIGxldCBuYW1lID0gQ29uc3RydWN0b3IubmFtZTtcbiAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBDb25zdHJ1Y3RvciB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc3RhdGljIGdldCBuYW1lKCkgeyByZXR1cm4gQ29uc3RydWN0b3IubmFtZTsgfVxuICAgICAgICByZWFjdGlvbiA9IG5ldyBSZWFjdGlvbihgcmVuZGVyLiR7bmFtZX0uJHtnbG9iYWxDb25zdHJ1Y3RPcmRlcisrfWAsICgpID0+IHtcbiAgICAgICAgICAgIHN1cGVyLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgICAgIHRoaXMucmVhY3Rpb24uZGlzcG9zZSgpO1xuICAgICAgICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQ/LigpO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlciguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgICAgICAgbGV0IG91dHB1dDogcHJlYWN0LkNvbXBvbmVudENoaWxkO1xuICAgICAgICAgICAgdGhpcy5yZWFjdGlvbi50cmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHN1cGVyLnJlbmRlciBhcyBhbnkpKC4uLmFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9XG4gICAgfTtcbn0iXX0=
33
- /* _JS_SOURCE_HASH = "aa8d03d3849c2a27da30d4ba63a17e14c12256a9cf8719a3f9f17af6f7f83c98"; */
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvYnNlcnZlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQTRDO0FBQzVDLG1FQUFxRTtBQUVyRSxJQUFJLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUM3QixTQUFnQixRQUFRLENBU3BCLFdBQWM7SUFFZCxJQUFJLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQzVCLE9BQU8sS0FBTSxTQUFRLFdBQVc7UUFBekI7O1lBR0gsYUFBUSxHQUFHLElBQUksZUFBUSxDQUFDLFVBQVUsSUFBSSxJQUFJLG9CQUFvQixFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7Z0JBQ3JFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztRQWNQLENBQUM7UUFsQkcsYUFBYTtRQUNiLE1BQU0sS0FBSyxJQUFJLEtBQUssT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUk5QyxvQkFBb0I7O1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEIsTUFBQSxLQUFLLENBQUMsb0JBQW9CLG9EQUFJLENBQUM7UUFDbkMsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLElBQVc7WUFDakIsSUFBSSxNQUE2QixDQUFDO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDckIsSUFBQSxzQkFBWSxFQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLEdBQUksS0FBSyxDQUFDLE1BQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUM1QyxDQUFDLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBaENELDRCQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHByZWFjdCBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBvYnNlcnZhYmxlLCBSZWFjdGlvbiB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgeyBtZWFzdXJlQmxvY2sgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9wcm9maWxpbmcvbWVhc3VyZVwiO1xuXG5sZXQgZ2xvYmFsQ29uc3RydWN0T3JkZXIgPSAxO1xuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVyPFxuICAgIFQgZXh0ZW5kcyB7XG4gICAgICAgIG5ldyguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgICAgIHJlbmRlcigpOiBwcmVhY3QuQ29tcG9uZW50Q2hpbGQ7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZShjYWxsYmFjaz86ICgpID0+IHZvaWQpOiB2b2lkO1xuICAgICAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQ/KCk6IHZvaWQ7XG4gICAgICAgIH1cbiAgICB9XG4+KFxuICAgIENvbnN0cnVjdG9yOiBUXG4pIHtcbiAgICBsZXQgbmFtZSA9IENvbnN0cnVjdG9yLm5hbWU7XG4gICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgQ29uc3RydWN0b3Ige1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHN0YXRpYyBnZXQgbmFtZSgpIHsgcmV0dXJuIENvbnN0cnVjdG9yLm5hbWU7IH1cbiAgICAgICAgcmVhY3Rpb24gPSBuZXcgUmVhY3Rpb24oYHJlbmRlci4ke25hbWV9LiR7Z2xvYmFsQ29uc3RydWN0T3JkZXIrK31gLCAoKSA9PiB7XG4gICAgICAgICAgICBzdXBlci5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWN0aW9uLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50Py4oKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgICAgIGxldCBvdXRwdXQ6IHByZWFjdC5Db21wb25lbnRDaGlsZDtcbiAgICAgICAgICAgIHRoaXMucmVhY3Rpb24udHJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIG1lYXN1cmVCbG9jaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IChzdXBlci5yZW5kZXIgYXMgYW55KSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICB9LCBgJHtuYW1lfXxyZW5kZXJgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfVxuICAgIH07XG59Il19
36
+ /* _JS_SOURCE_HASH = "fe68ffdc0211272fc44c1e75e0764edfae9f906d786a5dd59e684386a442d95f"; */
@@ -82,7 +82,7 @@ class DirectoryPrompter extends preact.Component {
82
82
  return (
83
83
  <div className={
84
84
  css.position("fixed").pos(0, 0).size("100vw", "100vh")
85
- .zIndex(1)
85
+ .zIndex(2147483647)
86
86
  .background("white")
87
87
  .center
88
88
  .fontSize(40)
@@ -251,8 +251,10 @@ export const getDirectoryHandle = lazy(async function getDirectoryHandle(): Prom
251
251
  doneLoad = true;
252
252
  // Show UI to get user to click and retry
253
253
  let retryCallback: (success: boolean) => void;
254
- let retryPromise = new Promise<boolean>(resolve => {
254
+ let retryReject: (err: Error) => void;
255
+ let retryPromise = new Promise<boolean>((resolve, reject) => {
255
256
  retryCallback = resolve;
257
+ retryReject = reject;
256
258
  });
257
259
  displayData.ui = (
258
260
  <div className={css.vbox(20).center}>
@@ -290,6 +292,14 @@ export const getDirectoryHandle = lazy(async function getDirectoryHandle(): Prom
290
292
  >
291
293
  Pick Data Directory
292
294
  </button>
295
+ <button
296
+ className={css.fontSize(40).pad2(80, 40)}
297
+ onClick={() => {
298
+ retryReject(new Error("User dismissed file system access prompt"));
299
+ }}
300
+ >
301
+ Dismiss
302
+ </button>
293
303
  </div>
294
304
  );
295
305
  const success = await retryPromise;
@@ -304,23 +314,35 @@ export const getDirectoryHandle = lazy(async function getDirectoryHandle(): Prom
304
314
  }
305
315
  }
306
316
  let fileCallback: (handle: DirectoryWrapper) => void;
307
- let promise = new Promise<DirectoryWrapper>(resolve => {
317
+ let fileReject: (err: Error) => void;
318
+ let promise = new Promise<DirectoryWrapper>((resolve, reject) => {
308
319
  fileCallback = resolve;
320
+ fileReject = reject;
309
321
  });
310
322
  displayData.ui = (
311
- <button
312
- className={css.fontSize(40).pad2(80, 40)}
313
- onClick={async () => {
314
- console.log("Waiting for user to give permission");
315
- const handle = await window.showDirectoryPicker();
316
- await handle.requestPermission({ mode: "readwrite" });
317
- let storedId = await storeFileSystemPointer({ mode: "readwrite", handle });
318
- localStorage.setItem(getFileAPIKey(), storedId);
319
- fileCallback(handle as any);
320
- }}
321
- >
322
- Pick Data Directory
323
- </button>
323
+ <div className={css.vbox(20).center}>
324
+ <button
325
+ className={css.fontSize(40).pad2(80, 40)}
326
+ onClick={async () => {
327
+ console.log("Waiting for user to give permission");
328
+ const handle = await window.showDirectoryPicker();
329
+ await handle.requestPermission({ mode: "readwrite" });
330
+ let storedId = await storeFileSystemPointer({ mode: "readwrite", handle });
331
+ localStorage.setItem(getFileAPIKey(), storedId);
332
+ fileCallback(handle as any);
333
+ }}
334
+ >
335
+ Pick Data Directory
336
+ </button>
337
+ <button
338
+ className={css.fontSize(40).pad2(80, 40)}
339
+ onClick={() => {
340
+ fileReject(new Error("User dismissed file system access prompt"));
341
+ }}
342
+ >
343
+ Dismiss
344
+ </button>
345
+ </div>
324
346
  );
325
347
  return await promise;
326
348
  } finally {
package/test.ts ADDED
@@ -0,0 +1,10 @@
1
+ import { yamlOpenRouterCall } from "./misc/openrouter";
2
+
3
+ async function main() {
4
+ let test = await yamlOpenRouterCall({
5
+ model: "google/gemini-2.5-flash",
6
+ messages: [{ role: "user", content: "" }],
7
+ });
8
+ console.log(test);
9
+ }
10
+ main().catch(console.error).finally(() => process.exit(0));