@ngutil/style 0.0.80 → 0.0.82

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.
@@ -1,276 +0,0 @@
1
- import { clamp } from "lodash-es";
2
- import { AlignHorizontalOpposite, alignmentNormalize, AlignVerticalOpposite } from "./alignment";
3
- // import type { FloatingPositionOptionsNormalized } from "./position"
4
- import { rectContract, rectExpand, rectMoveOrigin, rectOrigin } from "./rect";
5
- import { sidesNormalize } from "./sides";
6
- const ZERO_PADDING = sidesNormalize(0);
7
- const ZERO_CONNECTION = { x: 0, y: 0 };
8
- export function floatingPosition({ dims, options }) {
9
- const padding = options.placement.padding ? sidesNormalize(options.placement.padding) : ZERO_PADDING;
10
- const placement = {
11
- rect: dims.placement,
12
- padding: padding,
13
- rectWithPadding: rectContract(dims.placement, padding),
14
- area: { ...dims.placement }
15
- };
16
- const anchor = {
17
- rect: options.anchor.margin ? rectExpand(dims.anchor, options.anchor.margin) : dims.anchor,
18
- link: alignmentNormalize(options.anchor.link)
19
- };
20
- const minWidth = dims.constraints?.minWidth || 0;
21
- const minHeight = dims.constraints?.minHeight || 0;
22
- const maxWidth = dims.constraints?.maxWidth || Infinity;
23
- const maxHeight = dims.constraints?.maxHeight || Infinity;
24
- const content = {
25
- rect: { x: 0, y: 0, ...dims.content },
26
- link: alignmentNormalize(options.content.link),
27
- constrained: {
28
- width: clamp(dims.content.width, minWidth, maxWidth),
29
- height: clamp(dims.content.height, minHeight, maxHeight)
30
- }
31
- };
32
- const position = {
33
- placement,
34
- anchor,
35
- content,
36
- connection: ZERO_CONNECTION,
37
- constrains: dims.constraints,
38
- direction: "down" /* FloatingPositionDirection.Down */
39
- };
40
- const area = placementArea(position, anchor.link, content.link);
41
- setPlacement(position, area);
42
- if (options.horizontalAlt) {
43
- applyAlts(position, "H" /* FloatingPositionAltAxis.Horizontal */, options.horizontalAlt);
44
- }
45
- if (options.verticalAlt) {
46
- applyAlts(position, "V" /* FloatingPositionAltAxis.Vertical */, options.verticalAlt);
47
- }
48
- position.direction = floatingPositionDirection(position);
49
- return position;
50
- }
51
- function placementArea(pos, anchorLink, contentLink) {
52
- const connection = rectOrigin(pos.anchor.rect, anchorLink);
53
- let { x, y } = connection;
54
- const placement = pos.placement.rect;
55
- const placementPad = pos.placement.padding;
56
- let width = 0;
57
- let height = 0;
58
- switch (contentLink.horizontal) {
59
- case "left":
60
- case "start":
61
- width = placement.width - x;
62
- break;
63
- case "center":
64
- if (anchorLink.horizontal === "center") {
65
- width = placement.width;
66
- x = placement.x;
67
- }
68
- else {
69
- const leftSize = x - placementPad.left.value;
70
- const rightSize = placement.width - x - placementPad.right.value;
71
- const mw = Math.max(0, Math.min(leftSize, rightSize));
72
- width = mw * 2;
73
- x -= mw;
74
- }
75
- break;
76
- case "end":
77
- case "right":
78
- width = x - placement.x;
79
- x = placement.x;
80
- break;
81
- }
82
- switch (contentLink.vertical) {
83
- case "top":
84
- height = placement.height - y;
85
- break;
86
- case "middle":
87
- if (anchorLink.vertical === "middle") {
88
- height = placement.height;
89
- y = placement.y;
90
- }
91
- else {
92
- const topSize = y - placementPad.top.value;
93
- const bottomSize = placement.height - y - placementPad.bottom.value;
94
- const mh = Math.max(0, Math.min(topSize, bottomSize));
95
- height = mh * 2;
96
- y -= mh;
97
- }
98
- break;
99
- case "bottom":
100
- height = y - placement.y;
101
- y = placement.y;
102
- break;
103
- }
104
- const constraint = pos.placement.rectWithPadding;
105
- const newX = Math.max(x, constraint.x);
106
- const newY = Math.max(y, constraint.y);
107
- const diffX = newX - x;
108
- const diffY = newY - y;
109
- const area = {
110
- x: newX,
111
- y: newY,
112
- width: Math.min(newX + width - diffX, constraint.x + constraint.width) - newX,
113
- height: Math.min(newY + height - diffY, constraint.y + constraint.height) - newY
114
- };
115
- return { area, contentLink, anchorLink, connection };
116
- }
117
- function setPlacement(position, { area, anchorLink, contentLink, connection }) {
118
- position.placement.area = area;
119
- position.anchor.link = anchorLink;
120
- position.content.link = contentLink;
121
- const plannedContentRect = rectMoveOrigin(position.content.rect, contentLink, connection);
122
- position.connection = adjustConnection(area, plannedContentRect, connection);
123
- position.content.rect = rectMoveOrigin(position.content.rect, contentLink, connection);
124
- }
125
- function adjustConnection(placement, content, connection) {
126
- const x = Math.max(placement.x, content.x);
127
- const y = Math.max(placement.y, content.y);
128
- const leftDiff = x - content.x;
129
- const topDiff = y - content.y;
130
- const widthDiff = placement.x + placement.width - (x + content.width);
131
- const heightDiff = placement.y + placement.height - (y + content.height);
132
- const result = { ...connection };
133
- connection.x += leftDiff;
134
- connection.y += topDiff;
135
- if (widthDiff < 0) {
136
- connection.x += widthDiff;
137
- }
138
- if (heightDiff < 0) {
139
- connection.y += heightDiff;
140
- }
141
- return result;
142
- }
143
- function applyAlts(pos, axis, alts) {
144
- const norm = positionAltNormalize(alts);
145
- for (const alt of norm) {
146
- alt(pos, axis);
147
- }
148
- }
149
- export function positionAltNormalize(input) {
150
- if (Array.isArray(input)) {
151
- return input;
152
- }
153
- else if (typeof input === "function") {
154
- return [input];
155
- }
156
- else if (typeof input === "string") {
157
- return altStringToFns(input);
158
- }
159
- else {
160
- throw new Error(`Invalid alt position: ${input}`);
161
- }
162
- }
163
- function altStringToFns(input) {
164
- switch (input) {
165
- case "none":
166
- return [none];
167
- case "flip":
168
- return [flip];
169
- case "shift":
170
- return [shift];
171
- case "flip-shift":
172
- return [flip, shift];
173
- case "greatest":
174
- return [greatest];
175
- case "greatest-shift":
176
- return [greatest, shift];
177
- case "smallest":
178
- return [smallest];
179
- case "smallest-shift":
180
- return [smallest, shift];
181
- }
182
- }
183
- function none(pos, axis) { }
184
- function flip(pos, axis) {
185
- const wh = axis === "H" /* FloatingPositionAltAxis.Horizontal */ ? "width" : "height";
186
- if (pos.placement.area[wh] >= pos.content.constrained[wh]) {
187
- return;
188
- }
189
- return greatest(pos, axis);
190
- }
191
- function shift(pos, axis) { }
192
- function greatest(pos, axis) {
193
- _bySize(pos, axis, (a, b) => a >= b);
194
- }
195
- function smallest(pos, axis) {
196
- _bySize(pos, axis, (a, b) => a <= b);
197
- }
198
- function _bySize(pos, axis, cmp) {
199
- const wh = axis === "H" /* FloatingPositionAltAxis.Horizontal */ ? "width" : "height";
200
- const current = pos.placement.area[wh];
201
- const anchorLink = oppositeLink(axis, pos.anchor.link);
202
- const contentLink = oppositeLink(axis, pos.content.link);
203
- const oppositePlacement = placementArea(pos, anchorLink, contentLink);
204
- if (cmp(current, oppositePlacement.area[wh])) {
205
- return;
206
- }
207
- setPlacement(pos, oppositePlacement);
208
- }
209
- function oppositeLink(axis, link) {
210
- if (axis === "H" /* FloatingPositionAltAxis.Horizontal */) {
211
- return { horizontal: AlignHorizontalOpposite[link.horizontal], vertical: link.vertical };
212
- }
213
- else {
214
- return { horizontal: link.horizontal, vertical: AlignVerticalOpposite[link.vertical] };
215
- }
216
- }
217
- export function floatingPositionToStyle(pos) {
218
- const contentRect = pos.content.rect;
219
- const placementRect = pos.placement.rect;
220
- // const { width: maxWidth, height: maxHeight } = pos.placement.area
221
- const style = {};
222
- if (pos.content.link.horizontal === "right") {
223
- style["right"] = `${placementRect.width - (contentRect.x + contentRect.width)}px`;
224
- style["left"] = "auto";
225
- }
226
- else {
227
- style["left"] = `${contentRect.x}px`;
228
- style["right"] = "auto";
229
- }
230
- if (pos.content.link.vertical === "bottom") {
231
- style["bottom"] = `${placementRect.height - (contentRect.y + contentRect.height)}px`;
232
- style["top"] = "auto";
233
- }
234
- else {
235
- style["top"] = `${contentRect.y}px`;
236
- style["bottom"] = "auto";
237
- }
238
- // style["maxWidth"] = `${maxWidth}px`
239
- // style["maxHeight"] = `${maxHeight}px`
240
- return style;
241
- }
242
- export function floatingPositionDirection(pos) {
243
- const { x: ax, y: ay, width: aw, height: ah } = pos.anchor.rect;
244
- const { x: bx, y: by, width: bw, height: bh } = pos.content.rect;
245
- const contentLink = pos.content.link;
246
- const anchorLink = pos.anchor.link;
247
- if (anchorLink.horizontal === "center" && anchorLink.vertical === "middle") {
248
- if (contentLink.horizontal === "center" && contentLink.vertical === "middle") {
249
- return "center" /* FloatingPositionDirection.Center */;
250
- }
251
- const cx = pos.connection.x;
252
- if (cx <= bx) {
253
- return "right" /* FloatingPositionDirection.Right */;
254
- }
255
- else if (cx >= bx + bw) {
256
- return "left" /* FloatingPositionDirection.Left */;
257
- }
258
- }
259
- const widthOverlapPx = Math.min(ax + aw, bx + bw) - Math.max(ax, bx);
260
- const widthOverlapPercent = widthOverlapPx / Math.max(aw, bw);
261
- const heightOverlapPx = Math.min(ay + ah, by + bh) - Math.max(ay, by);
262
- const heightOverlapPercent = heightOverlapPx / Math.max(ah, bh);
263
- if (widthOverlapPercent >= heightOverlapPercent) {
264
- if (contentLink.vertical === "bottom") {
265
- return "up" /* FloatingPositionDirection.Up */;
266
- }
267
- return "down" /* FloatingPositionDirection.Down */;
268
- }
269
- else {
270
- if (contentLink.horizontal === "right") {
271
- return "left" /* FloatingPositionDirection.Left */;
272
- }
273
- return "right" /* FloatingPositionDirection.Right */;
274
- }
275
- }
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXRpbmctcG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdHlsZS9zcmMvdXRpbC9mbG9hdGluZy1wb3NpdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRWpDLE9BQU8sRUFDSCx1QkFBdUIsRUFHdkIsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUN4QixNQUFNLGFBQWEsQ0FBQTtBQUNwQixzRUFBc0U7QUFDdEUsT0FBTyxFQUE2QixZQUFZLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDeEcsT0FBTyxFQUFxQixjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUE7QUF3RjNELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUN0QyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO0FBRXRDLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQXlCO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFBO0lBQ3BHLE1BQU0sU0FBUyxHQUFrQztRQUM3QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7UUFDcEIsT0FBTyxFQUFFLE9BQU87UUFDaEIsZUFBZSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQztRQUN0RCxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7S0FDOUIsQ0FBQTtJQUVELE1BQU0sTUFBTSxHQUErQjtR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QUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLCtDQUFtQztRQUN2QyxDQUFDO1FBRUQsbURBQXFDO0lBQ3pDLENBQUM7U0FBTSxDQUFDO1FBQ0osSUFBSSxXQUFXLENBQUMsVUFBVSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3JDLG1EQUFxQztRQUN6QyxDQUFDO1FBRUQscURBQXNDO0lBQzFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xhbXAgfSBmcm9tIFwibG9kYXNoLWVzXCJcblxuaW1wb3J0IHtcbiAgICBBbGlnbkhvcml6b250YWxPcHBvc2l0ZSxcbiAgICBBbGlnbm1lbnQsXG4gICAgQWxpZ25tZW50SW5wdXQsXG4gICAgYWxpZ25tZW50Tm9ybWFsaXplLFxuICAgIEFsaWduVmVydGljYWxPcHBvc2l0ZVxufSBmcm9tIFwiLi9hbGlnbm1lbnRcIlxuLy8gaW1wb3J0IHR5cGUgeyBGbG9hdGluZ1Bvc2l0aW9uT3B0aW9uc05vcm1hbGl6ZWQgfSBmcm9tIFwiLi9wb3NpdGlvblwiXG5pbXBvcnQgeyBEaW1lbnNpb24sIFBvc2l0aW9uLCBSZWN0LCByZWN0Q29udHJhY3QsIHJlY3RFeHBhbmQsIHJlY3RNb3ZlT3JpZ2luLCByZWN0T3JpZ2luIH0gZnJvbSBcIi4vcmVjdFwiXG5pbXBvcnQgeyBTaWRlcywgU2lkZXNJbnB1dCwgc2lkZXNOb3JtYWxpemUgfSBmcm9tIFwiLi9zaWRlc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvYXRpbmdQb3NpdGlvbklucHV0IHtcbiAgICBkaW1zOiBGbG9hdGluZ1Bvc2l0aW9uRGltc1xuICAgIG9wdGlvbnM6IEZsb2F0aW5nUG9zaXRpb25PcHRpb25zXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvYXRpbmdQb3NpdGlvbkRpbXMge1xuICAgIGNvbnRlbnQ6IERpbWVuc2lvblxuICAgIGFuY2hvcjogUmVjdFxuICAgIHBsYWNlbWVudDogUmVjdFxuICAgIGNvbnN0cmFpbnRzPzogRmxvYXRpbmdQb3NpdGlvbkNvbnN0cmFpbnRzSW5wdXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG9hdGluZ1Bvc2l0aW9uT3B0aW9ucyB7XG4gICAgY29udGVudDogRmxvYXRpbmdQb3NpdGlvbkNvbnRlbnRPcHRpb25zXG4gICAgYW5jaG9yOiBGbG9hdGluZ1Bvc2l0aW9uQW5jaG9yT3B0aW9uc1xuICAgIHBsYWNlbWVudDogRmxvYXRpbmdQb3NpdGlvblBsYWNlbWVudE9wdGlvbnNcbiAgICBob3Jpem9udGFsQWx0PzogRmxvYXRpbmdQb3NpdGlvbkFsdElucHV0XG4gICAgdmVydGljYWxBbHQ/OiBGbG9hdGluZ1Bvc2l0aW9uQWx0SW5wdXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG9hdGluZ1Bvc2l0aW9uQ29udGVudE9wdGlvbnMge1xuICAgIGxpbms6IEFsaWdubWVudElucHV0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvYXRpbmdQb3NpdGlvbkNvbnN0cmFpbnRzSW5wdXQge1xuICAgIG1pbldpZHRoPzogbnVtYmVyXG4gICAgbWF4V2lkdGg/OiBudW1iZXJcbiAgICBtaW5IZWlnaHQ/OiBudW1iZXJcbiAgICBtYXhIZWlnaHQ/OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG9hdGluZ1Bvc2l0aW9uQW5jaG9yT3B0aW9ucyB7XG4gICAgbGluazogQWxpZ25tZW50SW5wdXRcbiAgICBtYXJnaW4/OiBTaWRlc0lucHV0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvYXRpbmdQb3NpdGlvblBsYWNlbWVudE9wdGlvbnMge1xuICAgIHBhZGRpbmc/OiBTaWRlc0lucHV0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvYXRpbmdQb3NpdGlvbiB7XG4gICAgY29udGVudDoge1xuICAgICAgICByZWN0OiBQb3NpdGlvbiAmIFJlYWRvbmx5PERpbWVuc2lvbj5cbiAgICAgICAgbGluazogQWxpZ25tZW50XG4gICAgICAgIHJlYWRvbmx5IGNvbnN0cmFpbmVkOiBSZWFkb25seTxEaW1lbnNpb24+XG4gICAgfVxuICAgIGFuY2hvcjoge1xuICAgICAgICByZWFkb25seSByZWN0OiBSZWFkb25seTxSZWN0PlxuICAgICAgICBsaW5rOiBBbGlnbm1lbnRcbiAgICB9XG4gICAgcGxhY2VtZW50OiB7XG4gICAgICAgIHJlYWRvbmx5IHJlY3Q6IFJlYWRvbmx5PFJlY3Q+XG4gICAgICAgIHJlYWRvbmx5IHBhZGRpbmc6IFJlYWRvbmx5PFNpZGVzPlxuICAgICAgICByZWFkb25seSByZWN0V2l0aFBhZGRpbmc6IFJlYWRvbmx5PFJlY3Q+XG4gICAgICAgIGFyZWE6IFJlYWRvbmx5PFJlY3Q+XG4gICAgfVxuICAgIGNvbm5lY3Rpb246IFBvc2l0aW9uXG4gICAgZGlyZWN0aW9uOiBGbG9hdGluZ1Bvc2l0aW9uRGlyZWN0aW9uXG4gICAgY29uc3RyYWludHM/OiBGbG9hdGluZ1Bvc2l0aW9uQ29uc3RyYWludHNJbnB1dFxufVxuXG5pbnRlcmZhY2UgUGxhY2VtZW50QXJlYSB7XG4gICAgYW5jaG9yTGluazogQWxpZ25tZW50XG4gICAgY29udGVudExpbms6IEFsaWdubWVudFxuICAgIGFyZWE6IEZsb2F0aW5nUG9zaXRpb25bXCJwbGFjZW1lbnRcIl1bXCJhcmVhXCJdXG4gICAgY29ubmVjdGlvbjogUG9zaXRpb25cbn1cblxudHlwZSBGbG9hdGluZ1Bvc2l0aW9uQWx0Q29uc3QgPVxuICAgIHwgXCJub25lXCJcbiAgICB8IFwiZmxpcFwiXG4gICAgfCBcInNoaWZ0XCJcbiAgICB8IFwiZmxpcC1zaGlmdFwiXG4gICAgfCBcImdyZWF0ZXN0XCJcbiAgICB8IFwiZ3JlYXRlc3Qtc2hpZnRcIlxuICAgIHwgXCJzbWFsbGVzdFwiXG4gICAgfCBcInNtYWxsZXN0LXNoaWZ0XCJcbmV4cG9ydCB0eXBlIEZsb2F0aW5nUG9zaXRpb25BbHRJbnB1dCA9IEZsb2F0aW5nUG9zaXRpb25BbHRDb25zdCB8IEZsb2F0aW5nUG9zaXRpb25BbHRGdW5jXG5leHBvcnQgdHlwZSBGbG9hdGluZ1Bvc2l0aW9uQWx0RnVuYyA9IChwb3M6IEZsb2F0aW5nUG9zaXRpb24sIGF4aXM6IEZsb2F0aW5nUG9zaXRpb25BbHRBeGlzKSA9PiB2b2lkXG5leHBvcnQgdHlwZSBGbG9hdGluZ1Bvc2l0aW9uQWx0Tm9ybSA9IEFycmF5PEZsb2F0aW5nUG9zaXRpb25BbHRGdW5jPlxuXG5leHBvcnQgY29uc3QgZW51bSBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcyB7XG4gICAgSG9yaXpvbnRhbCA9IFwiSFwiLFxuICAgIFZlcnRpY2FsID0gXCJWXCJcbn1cblxuY29uc3QgWkVST19QQURESU5HID0gc2lkZXNOb3JtYWxpemUoMClcbmNvbnN0IFpFUk9fQ09OTkVDVElPTiA9IHsgeDogMCwgeTogMCB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdGluZ1Bvc2l0aW9uKHsgZGltcywgb3B0aW9ucyB9OiBGbG9hdGluZ1Bvc2l0aW9uSW5wdXQpOiBGbG9hdGluZ1Bvc2l0aW9uIHtcbiAgICBjb25zdCBwYWRkaW5nID0gb3B0aW9ucy5wbGFjZW1lbnQucGFkZGluZyA/IHNpZGVzTm9ybWFsaXplKG9wdGlvbnMucGxhY2VtZW50LnBhZGRpbmcpIDogWkVST19QQURESU5HXG4gICAgY29uc3QgcGxhY2VtZW50OiBGbG9hdGluZ1Bvc2l0aW9uW1wicGxhY2VtZW50XCJdID0ge1xuICAgICAgICByZWN0OiBkaW1zLnBsYWNlbWVudCxcbiAgICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgICAgcmVjdFdpdGhQYWRkaW5nOiByZWN0Q29udHJhY3QoZGltcy5wbGFjZW1lbnQsIHBhZGRpbmcpLFxuICAgICAgICBhcmVhOiB7IC4uLmRpbXMucGxhY2VtZW50IH1cbiAgICB9XG5cbiAgICBjb25zdCBhbmNob3I6IEZsb2F0aW5nUG9zaXRpb25bXCJhbmNob3JcIl0gPSB7XG4gICAgICAgIHJlY3Q6IG9wdGlvbnMuYW5jaG9yLm1hcmdpbiA/IHJlY3RFeHBhbmQoZGltcy5hbmNob3IsIG9wdGlvbnMuYW5jaG9yLm1hcmdpbikgOiBkaW1zLmFuY2hvcixcbiAgICAgICAgbGluazogYWxpZ25tZW50Tm9ybWFsaXplKG9wdGlvbnMuYW5jaG9yLmxpbmspXG4gICAgfVxuXG4gICAgY29uc3QgbWluV2lkdGggPSBkaW1zLmNvbnN0cmFpbnRzPy5taW5XaWR0aCB8fCAwXG4gICAgY29uc3QgbWluSGVpZ2h0ID0gZGltcy5jb25zdHJhaW50cz8ubWluSGVpZ2h0IHx8IDBcbiAgICBjb25zdCBtYXhXaWR0aCA9IGRpbXMuY29uc3RyYWludHM/Lm1heFdpZHRoIHx8IEluZmluaXR5XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gZGltcy5jb25zdHJhaW50cz8ubWF4SGVpZ2h0IHx8IEluZmluaXR5XG4gICAgY29uc3QgY29udGVudDogRmxvYXRpbmdQb3NpdGlvbltcImNvbnRlbnRcIl0gPSB7XG4gICAgICAgIHJlY3Q6IHsgeDogMCwgeTogMCwgLi4uZGltcy5jb250ZW50IH0sXG4gICAgICAgIGxpbms6IGFsaWdubWVudE5vcm1hbGl6ZShvcHRpb25zLmNvbnRlbnQubGluayksXG4gICAgICAgIGNvbnN0cmFpbmVkOiB7XG4gICAgICAgICAgICB3aWR0aDogY2xhbXAoZGltcy5jb250ZW50LndpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgpLFxuICAgICAgICAgICAgaGVpZ2h0OiBjbGFtcChkaW1zLmNvbnRlbnQuaGVpZ2h0LCBtaW5IZWlnaHQsIG1heEhlaWdodClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBvc2l0aW9uID0ge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgY29ubmVjdGlvbjogWkVST19DT05ORUNUSU9OLFxuICAgICAgICBjb25zdHJhaW5zOiBkaW1zLmNvbnN0cmFpbnRzLFxuICAgICAgICBkaXJlY3Rpb246IEZsb2F0aW5nUG9zaXRpb25EaXJlY3Rpb24uRG93blxuICAgIH1cbiAgICBjb25zdCBhcmVhID0gcGxhY2VtZW50QXJlYShwb3NpdGlvbiwgYW5jaG9yLmxpbmssIGNvbnRlbnQubGluaylcbiAgICBzZXRQbGFjZW1lbnQocG9zaXRpb24sIGFyZWEpXG5cbiAgICBpZiAob3B0aW9ucy5ob3Jpem9udGFsQWx0KSB7XG4gICAgICAgIGFwcGx5QWx0cyhwb3NpdGlvbiwgRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMuSG9yaXpvbnRhbCwgb3B0aW9ucy5ob3Jpem9udGFsQWx0KVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnZlcnRpY2FsQWx0KSB7XG4gICAgICAgIGFwcGx5QWx0cyhwb3NpdGlvbiwgRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMuVmVydGljYWwsIG9wdGlvbnMudmVydGljYWxBbHQpXG4gICAgfVxuXG4gICAgcG9zaXRpb24uZGlyZWN0aW9uID0gZmxvYXRpbmdQb3NpdGlvbkRpcmVjdGlvbihwb3NpdGlvbilcbiAgICByZXR1cm4gcG9zaXRpb25cbn1cblxuZnVuY3Rpb24gcGxhY2VtZW50QXJlYShwb3M6IEZsb2F0aW5nUG9zaXRpb24sIGFuY2hvckxpbms6IEFsaWdubWVudCwgY29udGVudExpbms6IEFsaWdubWVudCk6IFBsYWNlbWVudEFyZWEge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSByZWN0T3JpZ2luKHBvcy5hbmNob3IucmVjdCwgYW5jaG9yTGluaylcbiAgICBsZXQgeyB4LCB5IH0gPSBjb25uZWN0aW9uXG4gICAgY29uc3QgcGxhY2VtZW50ID0gcG9zLnBsYWNlbWVudC5yZWN0XG4gICAgY29uc3QgcGxhY2VtZW50UGFkID0gcG9zLnBsYWNlbWVudC5wYWRkaW5nXG4gICAgbGV0IHdpZHRoID0gMFxuICAgIGxldCBoZWlnaHQgPSAwXG5cbiAgICBzd2l0Y2ggKGNvbnRlbnRMaW5rLmhvcml6b250YWwpIHtcbiAgICAgICAgY2FzZSBcImxlZnRcIjpcbiAgICAgICAgY2FzZSBcInN0YXJ0XCI6XG4gICAgICAgICAgICB3aWR0aCA9IHBsYWNlbWVudC53aWR0aCAtIHhcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgXCJjZW50ZXJcIjpcbiAgICAgICAgICAgIGlmIChhbmNob3JMaW5rLmhvcml6b250YWwgPT09IFwiY2VudGVyXCIpIHtcbiAgICAgICAgICAgICAgICB3aWR0aCA9IHBsYWNlbWVudC53aWR0aFxuICAgICAgICAgICAgICAgIHggPSBwbGFjZW1lbnQueFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWZ0U2l6ZSA9IHggLSBwbGFjZW1lbnRQYWQubGVmdC52YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0U2l6ZSA9IHBsYWNlbWVudC53aWR0aCAtIHggLSBwbGFjZW1lbnRQYWQucmlnaHQudmFsdWVcbiAgICAgICAgICAgICAgICBjb25zdCBtdyA9IE1hdGgubWF4KDAsIE1hdGgubWluKGxlZnRTaXplLCByaWdodFNpemUpKVxuICAgICAgICAgICAgICAgIHdpZHRoID0gbXcgKiAyXG4gICAgICAgICAgICAgICAgeCAtPSBtd1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgICAgICAgIHdpZHRoID0geCAtIHBsYWNlbWVudC54XG4gICAgICAgICAgICB4ID0gcGxhY2VtZW50LnhcbiAgICAgICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgc3dpdGNoIChjb250ZW50TGluay52ZXJ0aWNhbCkge1xuICAgICAgICBjYXNlIFwidG9wXCI6XG4gICAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnQuaGVpZ2h0IC0geVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxuICAgICAgICAgICAgaWYgKGFuY2hvckxpbmsudmVydGljYWwgPT09IFwibWlkZGxlXCIpIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnQuaGVpZ2h0XG4gICAgICAgICAgICAgICAgeSA9IHBsYWNlbWVudC55XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvcFNpemUgPSB5IC0gcGxhY2VtZW50UGFkLnRvcC52YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IGJvdHRvbVNpemUgPSBwbGFjZW1lbnQuaGVpZ2h0IC0geSAtIHBsYWNlbWVudFBhZC5ib3R0b20udmFsdWVcbiAgICAgICAgICAgICAgICBjb25zdCBtaCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRvcFNpemUsIGJvdHRvbVNpemUpKVxuICAgICAgICAgICAgICAgIGhlaWdodCA9IG1oICogMlxuICAgICAgICAgICAgICAgIHkgLT0gbWhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgICAgICAgaGVpZ2h0ID0geSAtIHBsYWNlbWVudC55XG4gICAgICAgICAgICB5ID0gcGxhY2VtZW50LnlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY29uc3QgY29uc3RyYWludCA9IHBvcy5wbGFjZW1lbnQucmVjdFdpdGhQYWRkaW5nXG4gICAgY29uc3QgbmV3WCA9IE1hdGgubWF4KHgsIGNvbnN0cmFpbnQueClcbiAgICBjb25zdCBuZXdZID0gTWF0aC5tYXgoeSwgY29uc3RyYWludC55KVxuICAgIGNvbnN0IGRpZmZYID0gbmV3WCAtIHhcbiAgICBjb25zdCBkaWZmWSA9IG5ld1kgLSB5XG5cbiAgICBjb25zdCBhcmVhID0ge1xuICAgICAgICB4OiBuZXdYLFxuICAgICAgICB5OiBuZXdZLFxuICAgICAgICB3aWR0aDogTWF0aC5taW4obmV3WCArIHdpZHRoIC0gZGlmZlgsIGNvbnN0cmFpbnQueCArIGNvbnN0cmFpbnQud2lkdGgpIC0gbmV3WCxcbiAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbihuZXdZICsgaGVpZ2h0IC0gZGlmZlksIGNvbnN0cmFpbnQueSArIGNvbnN0cmFpbnQuaGVpZ2h0KSAtIG5ld1lcbiAgICB9XG5cbiAgICByZXR1cm4geyBhcmVhLCBjb250ZW50TGluaywgYW5jaG9yTGluaywgY29ubmVjdGlvbiB9XG59XG5cbmZ1bmN0aW9uIHNldFBsYWNlbWVudChwb3NpdGlvbjogRmxvYXRpbmdQb3NpdGlvbiwgeyBhcmVhLCBhbmNob3JMaW5rLCBjb250ZW50TGluaywgY29ubmVjdGlvbiB9OiBQbGFjZW1lbnRBcmVhKTogdm9pZCB7XG4gICAgcG9zaXRpb24ucGxhY2VtZW50LmFyZWEgPSBhcmVhXG4gICAgcG9zaXRpb24uYW5jaG9yLmxpbmsgPSBhbmNob3JMaW5rXG4gICAgcG9zaXRpb24uY29udGVudC5saW5rID0gY29udGVudExpbmtcblxuICAgIGNvbnN0IHBsYW5uZWRDb250ZW50UmVjdCA9IHJlY3RNb3ZlT3JpZ2luKHBvc2l0aW9uLmNvbnRlbnQucmVjdCwgY29udGVudExpbmssIGNvbm5lY3Rpb24pXG4gICAgcG9zaXRpb24uY29ubmVjdGlvbiA9IGFkanVzdENvbm5lY3Rpb24oYXJlYSwgcGxhbm5lZENvbnRlbnRSZWN0LCBjb25uZWN0aW9uKVxuICAgIHBvc2l0aW9uLmNvbnRlbnQucmVjdCA9IHJlY3RNb3ZlT3JpZ2luKHBvc2l0aW9uLmNvbnRlbnQucmVjdCwgY29udGVudExpbmssIGNvbm5lY3Rpb24pXG59XG5cbmZ1bmN0aW9uIGFkanVzdENvbm5lY3Rpb24oXG4gICAgcGxhY2VtZW50OiBGbG9hdGluZ1Bvc2l0aW9uW1wicGxhY2VtZW50XCJdW1wiYXJlYVwiXSxcbiAgICBjb250ZW50OiBGbG9hdGluZ1Bvc2l0aW9uW1wiY29udGVudFwiXVtcInJlY3RcIl0sXG4gICAgY29ubmVjdGlvbjogRmxvYXRpbmdQb3NpdGlvbltcImNvbm5lY3Rpb25cIl1cbikge1xuICAgIGNvbnN0IHggPSBNYXRoLm1heChwbGFjZW1lbnQueCwgY29udGVudC54KVxuICAgIGNvbnN0IHkgPSBNYXRoLm1heChwbGFjZW1lbnQueSwgY29udGVudC55KVxuICAgIGNvbnN0IGxlZnREaWZmID0geCAtIGNvbnRlbnQueFxuICAgIGNvbnN0IHRvcERpZmYgPSB5IC0gY29udGVudC55XG4gICAgY29uc3Qgd2lkdGhEaWZmID0gcGxhY2VtZW50LnggKyBwbGFjZW1lbnQud2lkdGggLSAoeCArIGNvbnRlbnQud2lkdGgpXG4gICAgY29uc3QgaGVpZ2h0RGlmZiA9IHBsYWNlbWVudC55ICsgcGxhY2VtZW50LmhlaWdodCAtICh5ICsgY29udGVudC5oZWlnaHQpXG5cbiAgICBjb25zdCByZXN1bHQgPSB7IC4uLmNvbm5lY3Rpb24gfVxuICAgIGNvbm5lY3Rpb24ueCArPSBsZWZ0RGlmZlxuICAgIGNvbm5lY3Rpb24ueSArPSB0b3BEaWZmXG5cbiAgICBpZiAod2lkdGhEaWZmIDwgMCkge1xuICAgICAgICBjb25uZWN0aW9uLnggKz0gd2lkdGhEaWZmXG4gICAgfVxuXG4gICAgaWYgKGhlaWdodERpZmYgPCAwKSB7XG4gICAgICAgIGNvbm5lY3Rpb24ueSArPSBoZWlnaHREaWZmXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gYXBwbHlBbHRzKHBvczogRmxvYXRpbmdQb3NpdGlvbiwgYXhpczogRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMsIGFsdHM6IEZsb2F0aW5nUG9zaXRpb25BbHRJbnB1dCkge1xuICAgIGNvbnN0IG5vcm0gPSBwb3NpdGlvbkFsdE5vcm1hbGl6ZShhbHRzKVxuICAgIGZvciAoY29uc3QgYWx0IG9mIG5vcm0pIHtcbiAgICAgICAgYWx0KHBvcywgYXhpcylcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvbkFsdE5vcm1hbGl6ZShcbiAgICBpbnB1dDogRmxvYXRpbmdQb3NpdGlvbkFsdElucHV0IHwgRmxvYXRpbmdQb3NpdGlvbkFsdE5vcm1cbik6IEZsb2F0aW5nUG9zaXRpb25BbHROb3JtIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gW2lucHV0XVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBhbHRTdHJpbmdUb0ZucyhpbnB1dClcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYWx0IHBvc2l0aW9uOiAke2lucHV0fWApXG4gICAgfVxufVxuXG5mdW5jdGlvbiBhbHRTdHJpbmdUb0ZucyhpbnB1dDogRmxvYXRpbmdQb3NpdGlvbkFsdENvbnN0KTogRmxvYXRpbmdQb3NpdGlvbkFsdE5vcm0ge1xuICAgIHN3aXRjaCAoaW5wdXQpIHtcbiAgICAgICAgY2FzZSBcIm5vbmVcIjpcbiAgICAgICAgICAgIHJldHVybiBbbm9uZV1cbiAgICAgICAgY2FzZSBcImZsaXBcIjpcbiAgICAgICAgICAgIHJldHVybiBbZmxpcF1cbiAgICAgICAgY2FzZSBcInNoaWZ0XCI6XG4gICAgICAgICAgICByZXR1cm4gW3NoaWZ0XVxuICAgICAgICBjYXNlIFwiZmxpcC1zaGlmdFwiOlxuICAgICAgICAgICAgcmV0dXJuIFtmbGlwLCBzaGlmdF1cbiAgICAgICAgY2FzZSBcImdyZWF0ZXN0XCI6XG4gICAgICAgICAgICByZXR1cm4gW2dyZWF0ZXN0XVxuICAgICAgICBjYXNlIFwiZ3JlYXRlc3Qtc2hpZnRcIjpcbiAgICAgICAgICAgIHJldHVybiBbZ3JlYXRlc3QsIHNoaWZ0XVxuICAgICAgICBjYXNlIFwic21hbGxlc3RcIjpcbiAgICAgICAgICAgIHJldHVybiBbc21hbGxlc3RdXG4gICAgICAgIGNhc2UgXCJzbWFsbGVzdC1zaGlmdFwiOlxuICAgICAgICAgICAgcmV0dXJuIFtzbWFsbGVzdCwgc2hpZnRdXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub25lKHBvczogRmxvYXRpbmdQb3NpdGlvbiwgYXhpczogRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMpOiB2b2lkIHt9XG5cbmZ1bmN0aW9uIGZsaXAocG9zOiBGbG9hdGluZ1Bvc2l0aW9uLCBheGlzOiBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcyk6IHZvaWQge1xuICAgIGNvbnN0IHdoOiBcIndpZHRoXCIgfCBcImhlaWdodFwiID0gYXhpcyA9PT0gRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMuSG9yaXpvbnRhbCA/IFwid2lkdGhcIiA6IFwiaGVpZ2h0XCJcbiAgICBpZiAocG9zLnBsYWNlbWVudC5hcmVhW3doXSA+PSBwb3MuY29udGVudC5jb25zdHJhaW5lZFt3aF0pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHJldHVybiBncmVhdGVzdChwb3MsIGF4aXMpXG59XG5cbmZ1bmN0aW9uIHNoaWZ0KHBvczogRmxvYXRpbmdQb3NpdGlvbiwgYXhpczogRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMpOiB2b2lkIHt9XG5cbmZ1bmN0aW9uIGdyZWF0ZXN0KHBvczogRmxvYXRpbmdQb3NpdGlvbiwgYXhpczogRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMpOiB2b2lkIHtcbiAgICBfYnlTaXplKHBvcywgYXhpcywgKGEsIGIpID0+IGEgPj0gYilcbn1cblxuZnVuY3Rpb24gc21hbGxlc3QocG9zOiBGbG9hdGluZ1Bvc2l0aW9uLCBheGlzOiBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcyk6IHZvaWQge1xuICAgIF9ieVNpemUocG9zLCBheGlzLCAoYSwgYikgPT4gYSA8PSBiKVxufVxuXG5mdW5jdGlvbiBfYnlTaXplKHBvczogRmxvYXRpbmdQb3NpdGlvbiwgYXhpczogRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMsIGNtcDogKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgd2g6IFwid2lkdGhcIiB8IFwiaGVpZ2h0XCIgPSBheGlzID09PSBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcy5Ib3Jpem9udGFsID8gXCJ3aWR0aFwiIDogXCJoZWlnaHRcIlxuXG4gICAgY29uc3QgY3VycmVudCA9IHBvcy5wbGFjZW1lbnQuYXJlYVt3aF1cbiAgICBjb25zdCBhbmNob3JMaW5rID0gb3Bwb3NpdGVMaW5rKGF4aXMsIHBvcy5hbmNob3IubGluaylcbiAgICBjb25zdCBjb250ZW50TGluayA9IG9wcG9zaXRlTGluayhheGlzLCBwb3MuY29udGVudC5saW5rKVxuICAgIGNvbnN0IG9wcG9zaXRlUGxhY2VtZW50ID0gcGxhY2VtZW50QXJlYShwb3MsIGFuY2hvckxpbmssIGNvbnRlbnRMaW5rKVxuXG4gICAgaWYgKGNtcChjdXJyZW50LCBvcHBvc2l0ZVBsYWNlbWVudC5hcmVhW3doXSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0UGxhY2VtZW50KHBvcywgb3Bwb3NpdGVQbGFjZW1lbnQpXG59XG5cbmZ1bmN0aW9uIG9wcG9zaXRlTGluayhheGlzOiBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcywgbGluazogQWxpZ25tZW50KTogQWxpZ25tZW50IHtcbiAgICBpZiAoYXhpcyA9PT0gRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMuSG9yaXpvbnRhbCkge1xuICAgICAgICByZXR1cm4geyBob3Jpem9udGFsOiBBbGlnbkhvcml6b250YWxPcHBvc2l0ZVtsaW5rLmhvcml6b250YWxdLCB2ZXJ0aWNhbDogbGluay52ZXJ0aWNhbCB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsgaG9yaXpvbnRhbDogbGluay5ob3Jpem9udGFsLCB2ZXJ0aWNhbDogQWxpZ25WZXJ0aWNhbE9wcG9zaXRlW2xpbmsudmVydGljYWxdIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdGluZ1Bvc2l0aW9uVG9TdHlsZShwb3M6IFJlYWRvbmx5PEZsb2F0aW5nUG9zaXRpb24+KTogUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPiB7XG4gICAgY29uc3QgY29udGVudFJlY3QgPSBwb3MuY29udGVudC5yZWN0XG4gICAgY29uc3QgcGxhY2VtZW50UmVjdCA9IHBvcy5wbGFjZW1lbnQucmVjdFxuICAgIC8vIGNvbnN0IHsgd2lkdGg6IG1heFdpZHRoLCBoZWlnaHQ6IG1heEhlaWdodCB9ID0gcG9zLnBsYWNlbWVudC5hcmVhXG4gICAgY29uc3Qgc3R5bGU6IFBhcnRpYWw8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gPSB7fVxuXG4gICAgaWYgKHBvcy5jb250ZW50LmxpbmsuaG9yaXpvbnRhbCA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHN0eWxlW1wicmlnaHRcIl0gPSBgJHtwbGFjZW1lbnRSZWN0LndpZHRoIC0gKGNvbnRlbnRSZWN0LnggKyBjb250ZW50UmVjdC53aWR0aCl9cHhgXG4gICAgICAgIHN0eWxlW1wibGVmdFwiXSA9IFwiYXV0b1wiXG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVbXCJsZWZ0XCJdID0gYCR7Y29udGVudFJlY3QueH1weGBcbiAgICAgICAgc3R5bGVbXCJyaWdodFwiXSA9IFwiYXV0b1wiXG4gICAgfVxuXG4gICAgaWYgKHBvcy5jb250ZW50LmxpbmsudmVydGljYWwgPT09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgc3R5bGVbXCJib3R0b21cIl0gPSBgJHtwbGFjZW1lbnRSZWN0LmhlaWdodCAtIChjb250ZW50UmVjdC55ICsgY29udGVudFJlY3QuaGVpZ2h0KX1weGBcbiAgICAgICAgc3R5bGVbXCJ0b3BcIl0gPSBcImF1dG9cIlxuICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlW1widG9wXCJdID0gYCR7Y29udGVudFJlY3QueX1weGBcbiAgICAgICAgc3R5bGVbXCJib3R0b21cIl0gPSBcImF1dG9cIlxuICAgIH1cblxuICAgIC8vIHN0eWxlW1wibWF4V2lkdGhcIl0gPSBgJHttYXhXaWR0aH1weGBcbiAgICAvLyBzdHlsZVtcIm1heEhlaWdodFwiXSA9IGAke21heEhlaWdodH1weGBcblxuICAgIHJldHVybiBzdHlsZVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBGbG9hdGluZ1Bvc2l0aW9uRGlyZWN0aW9uIHtcbiAgICBVcCA9IFwidXBcIixcbiAgICBEb3duID0gXCJkb3duXCIsXG4gICAgTGVmdCA9IFwibGVmdFwiLFxuICAgIFJpZ2h0ID0gXCJyaWdodFwiLFxuICAgIENlbnRlciA9IFwiY2VudGVyXCJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb2F0aW5nUG9zaXRpb25EaXJlY3Rpb24ocG9zOiBSZWFkb25seTxGbG9hdGluZ1Bvc2l0aW9uPik6IEZsb2F0aW5nUG9zaXRpb25EaXJlY3Rpb24ge1xuICAgIGNvbnN0IHsgeDogYXgsIHk6IGF5LCB3aWR0aDogYXcsIGhlaWdodDogYWggfSA9IHBvcy5hbmNob3IucmVjdFxuICAgIGNvbnN0IHsgeDogYngsIHk6IGJ5LCB3aWR0aDogYncsIGhlaWdodDogYmggfSA9IHBvcy5jb250ZW50LnJlY3RcbiAgICBjb25zdCBjb250ZW50TGluayA9IHBvcy5jb250ZW50LmxpbmtcbiAgICBjb25zdCBhbmNob3JMaW5rID0gcG9zLmFuY2hvci5saW5rXG5cbiAgICBpZiAoYW5jaG9yTGluay5ob3Jpem9udGFsID09PSBcImNlbnRlclwiICYmIGFuY2hvckxpbmsudmVydGljYWwgPT09IFwibWlkZGxlXCIpIHtcbiAgICAgICAgaWYgKGNvbnRlbnRMaW5rLmhvcml6b250YWwgPT09IFwiY2VudGVyXCIgJiYgY29udGVudExpbmsudmVydGljYWwgPT09IFwibWlkZGxlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBGbG9hdGluZ1Bvc2l0aW9uRGlyZWN0aW9uLkNlbnRlclxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3ggPSBwb3MuY29ubmVjdGlvbi54XG4gICAgICAgIGlmIChjeCA8PSBieCkge1xuICAgICAgICAgICAgcmV0dXJuIEZsb2F0aW5nUG9zaXRpb25EaXJlY3Rpb24uUmlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChjeCA+PSBieCArIGJ3KSB7XG4gICAgICAgICAgICByZXR1cm4gRmxvYXRpbmdQb3NpdGlvbkRpcmVjdGlvbi5MZWZ0XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aE92ZXJsYXBQeCA9IE1hdGgubWluKGF4ICsgYXcsIGJ4ICsgYncpIC0gTWF0aC5tYXgoYXgsIGJ4KVxuICAgIGNvbnN0IHdpZHRoT3ZlcmxhcFBlcmNlbnQgPSB3aWR0aE92ZXJsYXBQeCAvIE1hdGgubWF4KGF3LCBidylcbiAgICBjb25zdCBoZWlnaHRPdmVybGFwUHggPSBNYXRoLm1pbihheSArIGFoLCBieSArIGJoKSAtIE1hdGgubWF4KGF5LCBieSlcbiAgICBjb25zdCBoZWlnaHRPdmVybGFwUGVyY2VudCA9IGhlaWdodE92ZXJsYXBQeCAvIE1hdGgubWF4KGFoLCBiaClcblxuICAgIGlmICh3aWR0aE92ZXJsYXBQZXJjZW50ID49IGhlaWdodE92ZXJsYXBQZXJjZW50KSB7XG4gICAgICAgIGlmIChjb250ZW50TGluay52ZXJ0aWNhbCA9PT0gXCJib3R0b21cIikge1xuICAgICAgICAgICAgcmV0dXJuIEZsb2F0aW5nUG9zaXRpb25EaXJlY3Rpb24uVXBcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBGbG9hdGluZ1Bvc2l0aW9uRGlyZWN0aW9uLkRvd25cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY29udGVudExpbmsuaG9yaXpvbnRhbCA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gRmxvYXRpbmdQb3NpdGlvbkRpcmVjdGlvbi5MZWZ0XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRmxvYXRpbmdQb3NpdGlvbkRpcmVjdGlvbi5SaWdodFxuICAgIH1cbn1cbiJdfQ==
@@ -1,70 +0,0 @@
1
- import { combineLatest, distinctUntilChanged, map, Observable } from "rxjs";
2
- import { __zone_symbol__, rawCancelAnimationFrame, rawRequestAnimationFrame } from "@ngutil/common";
3
- const addEventListener = __zone_symbol__("addEventListener");
4
- const removeEventListener = __zone_symbol__("removeEventListener");
5
- export function inAnimation(el, animations) {
6
- return _in(el, "animationName", "animationstart", "animationiteration", "animationend", "animationcancel", animations);
7
- }
8
- export function inTransition(el, properties) {
9
- return _in(el, "propertyName", "transitionstart", "transitionrun", "transitionend", "transitioncancel", properties);
10
- }
11
- export function isAnimating(el) {
12
- return combineLatest([inAnimation(el), inTransition(el)]).pipe(map(values => !!(values[0] || values[1])), distinctUntilChanged());
13
- }
14
- function _in(el, keyName, beginName, doingName, endName, cancelName, keys) {
15
- return new Observable((dest) => {
16
- const state = {};
17
- const start = (event) => {
18
- const key = event[keyName];
19
- if (keys && keys.length > 0 && !keys.includes(key)) {
20
- return;
21
- }
22
- if (key in state) {
23
- state[key]++;
24
- }
25
- else {
26
- state[key] = 1;
27
- }
28
- dest.next(Object.keys(state));
29
- };
30
- const doing = (event) => {
31
- const key = event[keyName];
32
- if (keys && keys.length > 0 && !keys.includes(key)) {
33
- return;
34
- }
35
- if (!(key in state)) {
36
- state[key] = 1;
37
- dest.next(Object.keys(state));
38
- }
39
- };
40
- const end = (event) => {
41
- if (event[keyName] in state) {
42
- const key = event[keyName];
43
- state[key]--;
44
- if (state[key] <= 0) {
45
- delete state[key];
46
- }
47
- }
48
- if (Object.keys(state).length === 0) {
49
- dest.next(null);
50
- }
51
- };
52
- el[addEventListener](beginName, start);
53
- el[addEventListener](doingName, doing);
54
- el[addEventListener](endName, end);
55
- el[addEventListener](cancelName, end);
56
- const raf = rawRequestAnimationFrame(() => {
57
- if (Object.keys(state).length === 0) {
58
- dest.next(null);
59
- }
60
- });
61
- return () => {
62
- rawCancelAnimationFrame(raf);
63
- el[removeEventListener](beginName, start);
64
- el[removeEventListener](doingName, doing);
65
- el[removeEventListener](endName, end);
66
- el[removeEventListener](cancelName, end);
67
- };
68
- }).pipe(distinctUntilChanged());
69
- }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW4tYW5pbWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3R5bGUvc3JjL3V0aWwvaW4tYW5pbWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBYyxNQUFNLE1BQU0sQ0FBQTtBQUV2RixPQUFPLEVBQUUsZUFBZSxFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFbkcsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtBQUM1RCxNQUFNLG1CQUFtQixHQUFHLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0FBRWxFLE1BQU0sVUFBVSxXQUFXLENBQXdCLEVBQUssRUFBRSxVQUFxQjtJQUMzRSxPQUFPLEdBQUcsQ0FDTixFQUFFLEVBQ0YsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixVQUFVLENBQ2IsQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUF3QixFQUFLLEVBQUUsVUFBcUI7SUFDNUUsT0FBTyxHQUFHLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxDQUFBO0FBQ3ZILENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUF3QixFQUFLO0lBQ3BELE9BQU8sYUFBYSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMxRCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxD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QUFLLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ25CLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sR0FBRyxFQUFFO1lBQ1IsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDNUIsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ3pDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUN6QyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDckMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQzVDLENBQUMsQ0FBQTtJQUNMLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUE7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIE9ic2VydmFibGUsIFN1YnNjcmliZXIgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IF9fem9uZV9zeW1ib2xfXywgcmF3Q2FuY2VsQW5pbWF0aW9uRnJhbWUsIHJhd1JlcXVlc3RBbmltYXRpb25GcmFtZSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmNvbnN0IGFkZEV2ZW50TGlzdGVuZXIgPSBfX3pvbmVfc3ltYm9sX18oXCJhZGRFdmVudExpc3RlbmVyXCIpXG5jb25zdCByZW1vdmVFdmVudExpc3RlbmVyID0gX196b25lX3N5bWJvbF9fKFwicmVtb3ZlRXZlbnRMaXN0ZW5lclwiKVxuXG5leHBvcnQgZnVuY3Rpb24gaW5BbmltYXRpb248VCBleHRlbmRzIEhUTUxFbGVtZW50PihlbDogVCwgYW5pbWF0aW9ucz86IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIF9pbihcbiAgICAgICAgZWwsXG4gICAgICAgIFwiYW5pbWF0aW9uTmFtZVwiLFxuICAgICAgICBcImFuaW1hdGlvbnN0YXJ0XCIsXG4gICAgICAgIFwiYW5pbWF0aW9uaXRlcmF0aW9uXCIsXG4gICAgICAgIFwiYW5pbWF0aW9uZW5kXCIsXG4gICAgICAgIFwiYW5pbWF0aW9uY2FuY2VsXCIsXG4gICAgICAgIGFuaW1hdGlvbnNcbiAgICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpblRyYW5zaXRpb248VCBleHRlbmRzIEhUTUxFbGVtZW50PihlbDogVCwgcHJvcGVydGllcz86IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIF9pbihlbCwgXCJwcm9wZXJ0eU5hbWVcIiwgXCJ0cmFuc2l0aW9uc3RhcnRcIiwgXCJ0cmFuc2l0aW9ucnVuXCIsIFwidHJhbnNpdGlvbmVuZFwiLCBcInRyYW5zaXRpb25jYW5jZWxcIiwgcHJvcGVydGllcylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQW5pbWF0aW5nPFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4oZWw6IFQpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbaW5BbmltYXRpb24oZWwpLCBpblRyYW5zaXRpb24oZWwpXSkucGlwZShcbiAgICAgICAgbWFwKHZhbHVlcyA9PiAhISh2YWx1ZXNbMF0gfHwgdmFsdWVzWzFdKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApXG59XG5cbmZ1bmN0aW9uIF9pbjxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KFxuICAgIGVsOiBULFxuICAgIGtleU5hbWU6IHN0cmluZyxcbiAgICBiZWdpbk5hbWU6IHN0cmluZyxcbiAgICBkb2luZ05hbWU6IHN0cmluZyxcbiAgICBlbmROYW1lOiBzdHJpbmcsXG4gICAgY2FuY2VsTmFtZTogc3RyaW5nLFxuICAgIGtleXM/OiBzdHJpbmdbXVxuKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChkZXN0OiBTdWJzY3JpYmVyPHN0cmluZ1tdIHwgbnVsbD4pID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGU6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fVxuXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGV2ZW50W2tleU5hbWVdXG4gICAgICAgICAgICBpZiAoa2V5cyAmJiBrZXlzLmxlbmd0aCA+IDAgJiYgIWtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoa2V5IGluIHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVba2V5XSsrXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXRlW2tleV0gPSAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZXN0Lm5leHQoT2JqZWN0LmtleXMoc3RhdGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZG9pbmcgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gZXZlbnRba2V5TmFtZV1cbiAgICAgICAgICAgIGlmIChrZXlzICYmIGtleXMubGVuZ3RoID4gMCAmJiAha2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghKGtleSBpbiBzdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZVtrZXldID0gMVxuICAgICAgICAgICAgICAgIGRlc3QubmV4dChPYmplY3Qua2V5cyhzdGF0ZSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbmQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50W2tleU5hbWVdIGluIHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gZXZlbnRba2V5TmFtZV1cbiAgICAgICAgICAgICAgICBzdGF0ZVtrZXldLS1cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVba2V5XSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZVtrZXldXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRlc3QubmV4dChudWxsKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWxbYWRkRXZlbnRMaXN0ZW5lcl0oYmVnaW5OYW1lLCBzdGFydClcbiAgICAgICAgZWxbYWRkRXZlbnRMaXN0ZW5lcl0oZG9pbmdOYW1lLCBkb2luZylcbiAgICAgICAgZWxbYWRkRXZlbnRMaXN0ZW5lcl0oZW5kTmFtZSwgZW5kKVxuICAgICAgICBlbFthZGRFdmVudExpc3RlbmVyXShjYW5jZWxOYW1lLCBlbmQpXG5cbiAgICAgICAgY29uc3QgcmFmID0gcmF3UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVzdC5uZXh0KG51bGwpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHJhd0NhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZilcbiAgICAgICAgICAgIGVsW3JlbW92ZUV2ZW50TGlzdGVuZXJdKGJlZ2luTmFtZSwgc3RhcnQpXG4gICAgICAgICAgICBlbFtyZW1vdmVFdmVudExpc3RlbmVyXShkb2luZ05hbWUsIGRvaW5nKVxuICAgICAgICAgICAgZWxbcmVtb3ZlRXZlbnRMaXN0ZW5lcl0oZW5kTmFtZSwgZW5kKVxuICAgICAgICAgICAgZWxbcmVtb3ZlRXZlbnRMaXN0ZW5lcl0oY2FuY2VsTmFtZSwgZW5kKVxuICAgICAgICB9XG4gICAgfSkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxufVxuIl19
@@ -1,90 +0,0 @@
1
- import { alignmentNormalize } from "./alignment";
2
- import { sidesNormalize } from "./sides";
3
- export function rectOrigin(rect, origin) {
4
- const originNorm = alignmentNormalize(origin);
5
- return { x: rectHorizontalOrigin(rect, originNorm.horizontal), y: rectVerticalOrigin(rect, originNorm.vertical) };
6
- }
7
- function rectHorizontalOrigin(rect, horizontal) {
8
- switch (horizontal) {
9
- case "start":
10
- case "left":
11
- return rect.x;
12
- case "center":
13
- return rect.x + rect.width / 2;
14
- case "end":
15
- case "right":
16
- return rect.x + rect.width;
17
- }
18
- }
19
- function rectVerticalOrigin(rect, vertical) {
20
- switch (vertical) {
21
- case "top":
22
- return rect.y;
23
- case "middle":
24
- return rect.y + rect.height / 2;
25
- case "bottom":
26
- return rect.y + rect.height;
27
- }
28
- }
29
- export function rectMoveOrigin(rect, origin, position) {
30
- const originNorm = alignmentNormalize(origin);
31
- return {
32
- ...rect,
33
- x: rectMoveHorizontal(rect, originNorm.horizontal, position),
34
- y: rectMoveVertical(rect, originNorm.vertical, position)
35
- };
36
- }
37
- function rectMoveHorizontal(rect, horizontal, position) {
38
- switch (horizontal) {
39
- case "start":
40
- case "left":
41
- return position.x;
42
- case "center":
43
- return position.x - rect.width / 2;
44
- case "end":
45
- case "right":
46
- return position.x - rect.width;
47
- }
48
- }
49
- function rectMoveVertical(rect, vertical, position) {
50
- switch (vertical) {
51
- case "top":
52
- return position.y;
53
- case "middle":
54
- return position.y - rect.height / 2;
55
- case "bottom":
56
- return position.y - rect.height;
57
- }
58
- }
59
- export function rectConstraint(rect, constraint) {
60
- const x = Math.max(rect.x, constraint.x);
61
- const y = Math.max(rect.y, constraint.y);
62
- return {
63
- x: x,
64
- y: y,
65
- width: Math.min(x + rect.width, constraint.x + constraint.width) - x,
66
- height: Math.min(y + rect.height, constraint.y + constraint.height) - y
67
- };
68
- }
69
- export function rectExpand(rect, margin) {
70
- const marginNorm = sidesNormalize(margin);
71
- return {
72
- x: rect.x - marginNorm.left.value,
73
- y: rect.y - marginNorm.top.value,
74
- width: rect.width + marginNorm.left.value + marginNorm.right.value,
75
- height: rect.height + marginNorm.top.value + marginNorm.bottom.value
76
- };
77
- }
78
- export function rectContract(rect, padding) {
79
- const normMargin = sidesNormalize(padding);
80
- return {
81
- x: rect.x + normMargin.left.value,
82
- y: rect.y + normMargin.top.value,
83
- width: rect.width - normMargin.left.value - normMargin.right.value,
84
- height: rect.height - normMargin.top.value - normMargin.bottom.value
85
- };
86
- }
87
- export function rectContainsPoint(rect, point) {
88
- return point.x >= rect.x && point.x < rect.x + rect.width && point.y >= rect.y && point.y < rect.y + rect.height;
89
- }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0eWxlL3NyYy91dGlsL3JlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQyxrQkFBa0IsRUFBaUIsTUFBTSxhQUFhLENBQUE7QUFDaEcsT0FBTyxFQUFjLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQWNwRCxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQVUsRUFBRSxNQUFzQjtJQUN6RCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM3QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQTtBQUNySCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFVLEVBQUUsVUFBMkI7SUFDakUsUUFBUSxVQUFVLEVBQUUsQ0FBQztRQUNqQixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssTUFBTTtZQUNQLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUVqQixLQUFLLFFBQVE7WUFDVCxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7UUFFbEMsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLE9BQU87WUFDUixPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQTtJQUNsQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsSUFBVSxFQUFFLFFBQXVCO0lBQzNELFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDZixLQUFLLEtBQUs7WUFDTixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUE7UUFFakIsS0FBSyxRQUFRO1lBQ1QsT0FBTyxJ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bm1lbnRJbnB1dCwgYWxpZ25tZW50Tm9ybWFsaXplLCBBbGlnblZlcnRpY2FsIH0gZnJvbSBcIi4vYWxpZ25tZW50XCJcbmltcG9ydCB7IFNpZGVzSW5wdXQsIHNpZGVzTm9ybWFsaXplIH0gZnJvbSBcIi4vc2lkZXNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERpbWVuc2lvbiB7XG4gICAgd2lkdGg6IG51bWJlclxuICAgIGhlaWdodDogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb24ge1xuICAgIHg6IG51bWJlclxuICAgIHk6IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY3QgZXh0ZW5kcyBEaW1lbnNpb24sIFBvc2l0aW9uIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0T3JpZ2luKHJlY3Q6IFJlY3QsIG9yaWdpbjogQWxpZ25tZW50SW5wdXQpOiBQb3NpdGlvbiB7XG4gICAgY29uc3Qgb3JpZ2luTm9ybSA9IGFsaWdubWVudE5vcm1hbGl6ZShvcmlnaW4pXG4gICAgcmV0dXJuIHsgeDogcmVjdEhvcml6b250YWxPcmlnaW4ocmVjdCwgb3JpZ2luTm9ybS5ob3Jpem9udGFsKSwgeTogcmVjdFZlcnRpY2FsT3JpZ2luKHJlY3QsIG9yaWdpbk5vcm0udmVydGljYWwpIH1cbn1cblxuZnVuY3Rpb24gcmVjdEhvcml6b250YWxPcmlnaW4ocmVjdDogUmVjdCwgaG9yaXpvbnRhbDogQWxpZ25Ib3Jpem9udGFsKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKGhvcml6b250YWwpIHtcbiAgICAgICAgY2FzZSBcInN0YXJ0XCI6XG4gICAgICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICAgICAgICByZXR1cm4gcmVjdC54XG5cbiAgICAgICAgY2FzZSBcImNlbnRlclwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlY3QueCArIHJlY3Qud2lkdGggLyAyXG5cbiAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgICAgICAgIHJldHVybiByZWN0LnggKyByZWN0LndpZHRoXG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWN0VmVydGljYWxPcmlnaW4ocmVjdDogUmVjdCwgdmVydGljYWw6IEFsaWduVmVydGljYWwpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodmVydGljYWwpIHtcbiAgICAgICAgY2FzZSBcInRvcFwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlY3QueVxuXG4gICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcbiAgICAgICAgICAgIHJldHVybiByZWN0LnkgKyByZWN0LmhlaWdodCAvIDJcblxuICAgICAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICAgICAgICByZXR1cm4gcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0TW92ZU9yaWdpbihyZWN0OiBSZWN0IHwgRGltZW5zaW9uLCBvcmlnaW46IEFsaWdubWVudElucHV0LCBwb3NpdGlvbjogUG9zaXRpb24pOiBSZWN0IHtcbiAgICBjb25zdCBvcmlnaW5Ob3JtID0gYWxpZ25tZW50Tm9ybWFsaXplKG9yaWdpbilcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5yZWN0LFxuICAgICAgICB4OiByZWN0TW92ZUhvcml6b250YWwocmVjdCwgb3JpZ2luTm9ybS5ob3Jpem9udGFsLCBwb3NpdGlvbiksXG4gICAgICAgIHk6IHJlY3RNb3ZlVmVydGljYWwocmVjdCwgb3JpZ2luTm9ybS52ZXJ0aWNhbCwgcG9zaXRpb24pXG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWN0TW92ZUhvcml6b250YWwocmVjdDogRGltZW5zaW9uLCBob3Jpem9udGFsOiBBbGlnbkhvcml6b250YWwsIHBvc2l0aW9uOiBQb3NpdGlvbik6IG51bWJlciB7XG4gICAgc3dpdGNoIChob3Jpem9udGFsKSB7XG4gICAgICAgIGNhc2UgXCJzdGFydFwiOlxuICAgICAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uLnhcblxuICAgICAgICBjYXNlIFwiY2VudGVyXCI6XG4gICAgICAgICAgICByZXR1cm4gcG9zaXRpb24ueCAtIHJlY3Qud2lkdGggLyAyXG5cbiAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbi54IC0gcmVjdC53aWR0aFxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVjdE1vdmVWZXJ0aWNhbChyZWN0OiBEaW1lbnNpb24sIHZlcnRpY2FsOiBBbGlnblZlcnRpY2FsLCBwb3NpdGlvbjogUG9zaXRpb24pOiBudW1iZXIge1xuICAgIHN3aXRjaCAodmVydGljYWwpIHtcbiAgICAgICAgY2FzZSBcInRvcFwiOlxuICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uLnlcblxuICAgICAgICBjYXNlIFwibWlkZGxlXCI6XG4gICAgICAgICAgICByZXR1cm4gcG9zaXRpb24ueSAtIHJlY3QuaGVpZ2h0IC8gMlxuXG4gICAgICAgIGNhc2UgXCJib3R0b21cIjpcbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbi55IC0gcmVjdC5oZWlnaHRcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0Q29uc3RyYWludChyZWN0OiBSZWN0LCBjb25zdHJhaW50OiBSZWN0KTogUmVjdCB7XG4gICAgY29uc3QgeCA9IE1hdGgubWF4KHJlY3QueCwgY29uc3RyYWludC54KVxuICAgIGNvbnN0IHkgPSBNYXRoLm1heChyZWN0LnksIGNvbnN0cmFpbnQueSlcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiB4LFxuICAgICAgICB5OiB5LFxuICAgICAgICB3aWR0aDogTWF0aC5taW4oeCArIHJlY3Qud2lkdGgsIGNvbnN0cmFpbnQueCArIGNvbnN0cmFpbnQud2lkdGgpIC0geCxcbiAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbih5ICsgcmVjdC5oZWlnaHQsIGNvbnN0cmFpbnQueSArIGNvbnN0cmFpbnQuaGVpZ2h0KSAtIHlcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gcmVjdEV4cGFuZChyZWN0OiBSZWN0LCBtYXJnaW46IFNpZGVzSW5wdXQpOiBSZWN0IHtcbiAgICBjb25zdCBtYXJnaW5Ob3JtID0gc2lkZXNOb3JtYWxpemUobWFyZ2luKVxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJlY3QueCAtIG1hcmdpbk5vcm0ubGVmdC52YWx1ZSxcbiAgICAgICAgeTogcmVjdC55IC0gbWFyZ2luTm9ybS50b3AudmFsdWUsXG4gICAgICAgIHdpZHRoOiByZWN0LndpZHRoICsgbWFyZ2luTm9ybS5sZWZ0LnZhbHVlICsgbWFyZ2luTm9ybS5yaWdodC52YWx1ZSxcbiAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCArIG1hcmdpbk5vcm0udG9wLnZhbHVlICsgbWFyZ2luTm9ybS5ib3R0b20udmFsdWVcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0Q29udHJhY3QocmVjdDogUmVjdCwgcGFkZGluZzogU2lkZXNJbnB1dCk6IFJlY3Qge1xuICAgIGNvbnN0IG5vcm1NYXJnaW4gPSBzaWRlc05vcm1hbGl6ZShwYWRkaW5nKVxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJlY3QueCArIG5vcm1NYXJnaW4ubGVmdC52YWx1ZSxcbiAgICAgICAgeTogcmVjdC55ICsgbm9ybU1hcmdpbi50b3AudmFsdWUsXG4gICAgICAgIHdpZHRoOiByZWN0LndpZHRoIC0gbm9ybU1hcmdpbi5sZWZ0LnZhbHVlIC0gbm9ybU1hcmdpbi5yaWdodC52YWx1ZSxcbiAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCAtIG5vcm1NYXJnaW4udG9wLnZhbHVlIC0gbm9ybU1hcmdpbi5ib3R0b20udmFsdWVcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0OiBSZWN0LCBwb2ludDogUG9zaXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcG9pbnQueCA+PSByZWN0LnggJiYgcG9pbnQueCA8IHJlY3QueCArIHJlY3Qud2lkdGggJiYgcG9pbnQueSA+PSByZWN0LnkgJiYgcG9pbnQueSA8IHJlY3QueSArIHJlY3QuaGVpZ2h0XG59XG4iXX0=
@@ -1,26 +0,0 @@
1
- import { isPlainObject, NumberWithUnit } from "@ngutil/common";
2
- export function sidesNormalize(value) {
3
- if (isPlainObject(value)) {
4
- return {
5
- top: NumberWithUnit.coerce(value.top || 0, "px"),
6
- right: NumberWithUnit.coerce(value.right || 0, "px"),
7
- bottom: NumberWithUnit.coerce(value.bottom || 0, "px"),
8
- left: NumberWithUnit.coerce(value.left || 0, "px")
9
- };
10
- }
11
- else if (typeof value === "number") {
12
- return sidesNormalize(`${value}px`);
13
- }
14
- else if (typeof value !== "string") {
15
- throw new Error(`Invalid sides: ${value}`);
16
- }
17
- const entries = value.split(/\s+/g).map(v => NumberWithUnit.coerce(v, "px"));
18
- if (entries.length < 0 || entries.length > 4) {
19
- throw new Error(`Cannot parse: ${value}`);
20
- }
21
- return compose(...entries);
22
- }
23
- function compose(top, right = top, bottom = top, left = right) {
24
- return { top, right, bottom, left };
25
- }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdHlsZS9zcmMvdXRpbC9zaWRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBb0I5RCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWlCO0lBQzVDLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTztZQUNILEdBQUcsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQztZQUNoRCxLQUFLLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUM7WUFDcEQsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQ3RELElBQUksRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQztTQUNyRCxDQUFBO0lBQ0wsQ0FBQztTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsT0FBTyxjQUFjLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQXFCLENBQUE7SUFFaEcsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUE7QUFDOUIsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUNaLEdBQW1CLEVBQ25CLFFBQXdCLEdBQUcsRUFDM0IsU0FBeUIsR0FBRyxFQUM1QixPQUF1QixLQUFLO0lBRTVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQTtBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGFpbk9iamVjdCwgTnVtYmVyV2l0aFVuaXQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZGVzIHtcbiAgICB0b3A6IE51bWJlcldpdGhVbml0XG4gICAgcmlnaHQ6IE51bWJlcldpdGhVbml0XG4gICAgYm90dG9tOiBOdW1iZXJXaXRoVW5pdFxuICAgIGxlZnQ6IE51bWJlcldpdGhVbml0XG59XG5cbmV4cG9ydCB0eXBlIFNpZGVzVW5pdCA9IFwicHhcIiB8IFwiJVwiXG5leHBvcnQgdHlwZSBTaWRlc051bWJlciA9IGAke251bWJlcn0ke1NpZGVzVW5pdH1gIHwgbnVtYmVyXG5leHBvcnQgdHlwZSBTaWRlc0lucHV0T2JqID0geyB0b3A/OiBTaWRlc051bWJlcjsgcmlnaHQ/OiBTaWRlc051bWJlcjsgYm90dG9tPzogU2lkZXNOdW1iZXI7IGxlZnQ/OiBTaWRlc051bWJlciB9XG5leHBvcnQgdHlwZSBTaWRlc0lucHV0ID1cbiAgICB8IFNpZGVzXG4gICAgfCBTaWRlc051bWJlclxuICAgIHwgU2lkZXNJbnB1dE9ialxuICAgIHwgYCR7U2lkZXNOdW1iZXJ9ICR7U2lkZXNOdW1iZXJ9YFxuICAgIHwgYCR7U2lkZXNOdW1iZXJ9ICR7U2lkZXNOdW1iZXJ9ICR7U2lkZXNOdW1iZXJ9YFxuICAgIHwgYCR7U2lkZXNOdW1iZXJ9ICR7U2lkZXNOdW1iZXJ9ICR7U2lkZXNOdW1iZXJ9ICR7U2lkZXNOdW1iZXJ9YFxuXG5leHBvcnQgZnVuY3Rpb24gc2lkZXNOb3JtYWxpemUodmFsdWU6IFNpZGVzSW5wdXQpOiBTaWRlcyB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3A6IE51bWJlcldpdGhVbml0LmNvZXJjZSh2YWx1ZS50b3AgfHwgMCwgXCJweFwiKSxcbiAgICAgICAgICAgIHJpZ2h0OiBOdW1iZXJXaXRoVW5pdC5jb2VyY2UodmFsdWUucmlnaHQgfHwgMCwgXCJweFwiKSxcbiAgICAgICAgICAgIGJvdHRvbTogTnVtYmVyV2l0aFVuaXQuY29lcmNlKHZhbHVlLmJvdHRvbSB8fCAwLCBcInB4XCIpLFxuICAgICAgICAgICAgbGVmdDogTnVtYmVyV2l0aFVuaXQuY29lcmNlKHZhbHVlLmxlZnQgfHwgMCwgXCJweFwiKVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIHNpZGVzTm9ybWFsaXplKGAke3ZhbHVlfXB4YClcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2lkZXM6ICR7dmFsdWV9YClcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyaWVzID0gdmFsdWUuc3BsaXQoL1xccysvZykubWFwKHYgPT4gTnVtYmVyV2l0aFVuaXQuY29lcmNlKHYsIFwicHhcIikpIGFzIFtOdW1iZXJXaXRoVW5pdF1cblxuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA8IDAgfHwgZW50cmllcy5sZW5ndGggPiA0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlOiAke3ZhbHVlfWApXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvc2UoLi4uZW50cmllcylcbn1cblxuZnVuY3Rpb24gY29tcG9zZShcbiAgICB0b3A6IE51bWJlcldpdGhVbml0LFxuICAgIHJpZ2h0OiBOdW1iZXJXaXRoVW5pdCA9IHRvcCxcbiAgICBib3R0b206IE51bWJlcldpdGhVbml0ID0gdG9wLFxuICAgIGxlZnQ6IE51bWJlcldpdGhVbml0ID0gcmlnaHRcbik6IFNpZGVzIHtcbiAgICByZXR1cm4geyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfVxufVxuIl19