@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.
- package/fesm2022/ngutil-style.mjs +16 -16
- package/fesm2022/ngutil-style.mjs.map +1 -1
- package/package.json +5 -6
- package/esm2022/index.mjs +0 -12
- package/esm2022/ngutil-style.mjs +0 -5
- package/esm2022/sass/animation/vars/index.mjs +0 -24
- package/esm2022/sass/index.mjs +0 -2
- package/esm2022/services/color-scheme.service.mjs +0 -19
- package/esm2022/services/dimension-watcher.service.mjs +0 -120
- package/esm2022/services/media-watcher.service.mjs +0 -39
- package/esm2022/services/position-watcher.service.mjs +0 -52
- package/esm2022/services/rect-watcher.service.mjs +0 -26
- package/esm2022/util/alignment.mjs +0 -55
- package/esm2022/util/floating-position.mjs +0 -276
- package/esm2022/util/in-animation.mjs +0 -70
- package/esm2022/util/rect.mjs +0 -90
- package/esm2022/util/sides.mjs +0 -26
|
@@ -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
|
package/esm2022/util/rect.mjs
DELETED
|
@@ -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=
|
package/esm2022/util/sides.mjs
DELETED
|
@@ -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
|