@ngutil/style 0.0.65 → 0.0.67

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/esm2022/index.mjs CHANGED
@@ -7,6 +7,6 @@ export { RectWatcher } from "./services/rect-watcher.service";
7
7
  export { alignmentNormalize, alignmentToTransformOrigin } from "./util/alignment";
8
8
  export { inAnimation, inTransition, isAnimating } from "./util/in-animation";
9
9
  export * from "./util/floating-position";
10
- export { rectConstraint, rectContract, rectExpand, rectMoveOrigin, rectOrigin } from "./util/rect";
10
+ export * from "./util/rect";
11
11
  export { sidesNormalize } from "./util/sides";
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zdHlsZS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBWSxNQUFNLHNDQUFzQyxDQUFBO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFFN0QsT0FBTyxFQUVILGtCQUFrQixFQUlsQiwwQkFBMEIsRUFDN0IsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QixPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUM1RSxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLE9BQU8sRUFJSCxjQUFjLEVBQ2QsWUFBWSxFQUNaLFVBQVUsRUFDVixjQUFjLEVBQ2QsVUFBVSxFQUNiLE1BQU0sYUFBYSxDQUFBO0FBQ3BCLE9BQU8sRUFBYyxjQUFjLEVBQVMsTUFBTSxjQUFjLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBNZWRpYVdhdGNoZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy9tZWRpYS13YXRjaGVyLnNlcnZpY2VcIlxuZXhwb3J0IHsgQ29sb3JTY2hlbWVTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvY29sb3Itc2NoZW1lLnNlcnZpY2VcIlxuZXhwb3J0IHsgRWFzZSwgRHVyYXRpb24gfSBmcm9tIFwiLi9zYXNzXCJcbmV4cG9ydCB7IERpbWVuc2lvbldhdGNoZXIsIFdhdGNoQm94IH0gZnJvbSBcIi4vc2VydmljZXMvZGltZW5zaW9uLXdhdGNoZXIuc2VydmljZVwiXG5leHBvcnQgeyBQb3NpdGlvbldhdGNoZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy9wb3NpdGlvbi13YXRjaGVyLnNlcnZpY2VcIlxuZXhwb3J0IHsgUmVjdFdhdGNoZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy9yZWN0LXdhdGNoZXIuc2VydmljZVwiXG5cbmV4cG9ydCB7XG4gICAgQWxpZ25tZW50SW5wdXQsXG4gICAgYWxpZ25tZW50Tm9ybWFsaXplLFxuICAgIEFsaWdubWVudCxcbiAgICBBbGlnbkhvcml6b250YWwsXG4gICAgQWxpZ25WZXJ0aWNhbCxcbiAgICBhbGlnbm1lbnRUb1RyYW5zZm9ybU9yaWdpblxufSBmcm9tIFwiLi91dGlsL2FsaWdubWVudFwiXG5leHBvcnQgeyBpbkFuaW1hdGlvbiwgaW5UcmFuc2l0aW9uLCBpc0FuaW1hdGluZyB9IGZyb20gXCIuL3V0aWwvaW4tYW5pbWF0aW9uXCJcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWwvZmxvYXRpbmctcG9zaXRpb25cIlxuZXhwb3J0IHtcbiAgICBEaW1lbnNpb24sXG4gICAgUmVjdCxcbiAgICBQb3NpdGlvbixcbiAgICByZWN0Q29uc3RyYWludCxcbiAgICByZWN0Q29udHJhY3QsXG4gICAgcmVjdEV4cGFuZCxcbiAgICByZWN0TW92ZU9yaWdpbixcbiAgICByZWN0T3JpZ2luXG59IGZyb20gXCIuL3V0aWwvcmVjdFwiXG5leHBvcnQgeyBTaWRlc0lucHV0LCBzaWRlc05vcm1hbGl6ZSwgU2lkZXMgfSBmcm9tIFwiLi91dGlsL3NpZGVzXCJcbiJdfQ==
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zdHlsZS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBWSxNQUFNLHNDQUFzQyxDQUFBO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFFN0QsT0FBTyxFQUVILGtCQUFrQixFQUlsQiwwQkFBMEIsRUFDN0IsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QixPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUM1RSxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsYUFBYSxDQUFBO0FBQzNCLE9BQU8sRUFBYyxjQUFjLEVBQVMsTUFBTSxjQUFjLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBNZWRpYVdhdGNoZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy9tZWRpYS13YXRjaGVyLnNlcnZpY2VcIlxuZXhwb3J0IHsgQ29sb3JTY2hlbWVTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvY29sb3Itc2NoZW1lLnNlcnZpY2VcIlxuZXhwb3J0IHsgRWFzZSwgRHVyYXRpb24gfSBmcm9tIFwiLi9zYXNzXCJcbmV4cG9ydCB7IERpbWVuc2lvbldhdGNoZXIsIFdhdGNoQm94IH0gZnJvbSBcIi4vc2VydmljZXMvZGltZW5zaW9uLXdhdGNoZXIuc2VydmljZVwiXG5leHBvcnQgeyBQb3NpdGlvbldhdGNoZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy9wb3NpdGlvbi13YXRjaGVyLnNlcnZpY2VcIlxuZXhwb3J0IHsgUmVjdFdhdGNoZXIgfSBmcm9tIFwiLi9zZXJ2aWNlcy9yZWN0LXdhdGNoZXIuc2VydmljZVwiXG5cbmV4cG9ydCB7XG4gICAgQWxpZ25tZW50SW5wdXQsXG4gICAgYWxpZ25tZW50Tm9ybWFsaXplLFxuICAgIEFsaWdubWVudCxcbiAgICBBbGlnbkhvcml6b250YWwsXG4gICAgQWxpZ25WZXJ0aWNhbCxcbiAgICBhbGlnbm1lbnRUb1RyYW5zZm9ybU9yaWdpblxufSBmcm9tIFwiLi91dGlsL2FsaWdubWVudFwiXG5leHBvcnQgeyBpbkFuaW1hdGlvbiwgaW5UcmFuc2l0aW9uLCBpc0FuaW1hdGluZyB9IGZyb20gXCIuL3V0aWwvaW4tYW5pbWF0aW9uXCJcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWwvZmxvYXRpbmctcG9zaXRpb25cIlxuZXhwb3J0ICogZnJvbSBcIi4vdXRpbC9yZWN0XCJcbmV4cG9ydCB7IFNpZGVzSW5wdXQsIHNpZGVzTm9ybWFsaXplLCBTaWRlcyB9IGZyb20gXCIuL3V0aWwvc2lkZXNcIlxuIl19
@@ -1,3 +1,4 @@
1
+ import { clamp } from "lodash";
1
2
  import { AlignHorizontalOpposite, alignmentNormalize, AlignVerticalOpposite } from "./alignment";
2
3
  // import type { FloatingPositionOptionsNormalized } from "./position"
3
4
  import { rectContract, rectExpand, rectMoveOrigin, rectOrigin } from "./rect";
@@ -16,11 +17,26 @@ export function floatingPosition({ dims, options }) {
16
17
  rect: options.anchor.margin ? rectExpand(dims.anchor, options.anchor.margin) : dims.anchor,
17
18
  link: alignmentNormalize(options.anchor.link)
18
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;
19
24
  const content = {
20
25
  rect: { x: 0, y: 0, ...dims.content },
21
- link: alignmentNormalize(options.content.link)
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 */
22
39
  };
23
- const position = { placement, anchor, content, connection: ZERO_CONNECTION };
24
40
  const area = placementArea(position, anchor.link, content.link);
25
41
  setPlacement(position, area);
26
42
  if (options.horizontalAlt) {
@@ -29,6 +45,7 @@ export function floatingPosition({ dims, options }) {
29
45
  if (options.verticalAlt) {
30
46
  applyAlts(position, "V" /* FloatingPositionAltAxis.Vertical */, options.verticalAlt);
31
47
  }
48
+ position.direction = floatingPositionDirection(position);
32
49
  return position;
33
50
  }
34
51
  function placementArea(pos, anchorLink, contentLink) {
@@ -166,7 +183,7 @@ function altStringToFns(input) {
166
183
  function none(pos, axis) { }
167
184
  function flip(pos, axis) {
168
185
  const wh = axis === "H" /* FloatingPositionAltAxis.Horizontal */ ? "width" : "height";
169
- if (pos.placement.area[wh] >= pos.content.rect[wh]) {
186
+ if (pos.placement.area[wh] >= pos.content.constrained[wh]) {
170
187
  return;
171
188
  }
172
189
  return greatest(pos, axis);
@@ -200,6 +217,7 @@ function oppositeLink(axis, link) {
200
217
  export function floatingPositionToStyle(pos) {
201
218
  const contentRect = pos.content.rect;
202
219
  const placementRect = pos.placement.rect;
220
+ // const { width: maxWidth, height: maxHeight } = pos.placement.area
203
221
  const style = {};
204
222
  if (pos.content.link.horizontal === "right") {
205
223
  style["right"] = `${placementRect.width - (contentRect.x + contentRect.width)}px`;
@@ -217,6 +235,42 @@ export function floatingPositionToStyle(pos) {
217
235
  style["top"] = `${contentRect.y}px`;
218
236
  style["bottom"] = "auto";
219
237
  }
238
+ // style["maxWidth"] = `${maxWidth}px`
239
+ // style["maxHeight"] = `${maxHeight}px`
220
240
  return style;
221
241
  }
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXRpbmctcG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdHlsZS9zcmMvdXRpbC9mbG9hdGluZy1wb3NpdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBR3ZCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDeEIsTUFBTSxhQUFhLENBQUE7QUFDcEIsc0VBQXNFO0FBQ3RFLE9BQU8sRUFBNkIsWUFBWSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ3hHLE9BQU8sRUFBcUIsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBNkUzRCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDdEMsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQTtBQUV0QyxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUF5QjtJQUNyRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQTtJQUNwRyxNQUFNLFNBQVMsR0FBa0M7UUFDN0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1FBQ3BCLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLGVBQWUsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7UUFDdEQsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFO0tBQzlCLENBQUE7SUFFRCxNQUFNLE1BQU0sR0FBK0I7UUFDdkMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxD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QWxpZ25Ib3Jpem9udGFsT3Bwb3NpdGUsXG4gICAgQWxpZ25tZW50LFxuICAgIEFsaWdubWVudElucHV0LFxuICAgIGFsaWdubWVudE5vcm1hbGl6ZSxcbiAgICBBbGlnblZlcnRpY2FsT3Bwb3NpdGVcbn0gZnJvbSBcIi4vYWxpZ25tZW50XCJcbi8vIGltcG9ydCB0eXBlIHsgRmxvYXRpbmdQb3NpdGlvbk9wdGlvbnNOb3JtYWxpemVkIH0gZnJvbSBcIi4vcG9zaXRpb25cIlxuaW1wb3J0IHsgRGltZW5zaW9uLCBQb3NpdGlvbiwgUmVjdCwgcmVjdENvbnRyYWN0LCByZWN0RXhwYW5kLCByZWN0TW92ZU9yaWdpbiwgcmVjdE9yaWdpbiB9IGZyb20gXCIuL3JlY3RcIlxuaW1wb3J0IHsgU2lkZXMsIFNpZGVzSW5wdXQsIHNpZGVzTm9ybWFsaXplIH0gZnJvbSBcIi4vc2lkZXNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb2F0aW5nUG9zaXRpb25JbnB1dCB7XG4gICAgZGltczogRmxvYXRpbmdQb3NpdGlvbkRpbXNcbiAgICBvcHRpb25zOiBGbG9hdGluZ1Bvc2l0aW9uT3B0aW9uc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb2F0aW5nUG9zaXRpb25EaW1zIHtcbiAgICBjb250ZW50OiBEaW1lbnNpb25cbiAgICBhbmNob3I6IFJlY3RcbiAgICBwbGFjZW1lbnQ6IFJlY3Rcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG9hdGluZ1Bvc2l0aW9uT3B0aW9ucyB7XG4gICAgY29udGVudDogRmxvYXRpbmdQb3NpdGlvbkNvbnRlbnRPcHRpb25zXG4gICAgYW5jaG9yOiBGbG9hdGluZ1Bvc2l0aW9uQW5jaG9yT3B0aW9uc1xuICAgIHBsYWNlbWVudDogRmxvYXRpbmdQb3NpdGlvblBsYWNlbWVudE9wdGlvbnNcbiAgICBob3Jpem9udGFsQWx0PzogRmxvYXRpbmdQb3NpdGlvbkFsdElucHV0XG4gICAgdmVydGljYWxBbHQ/OiBGbG9hdGluZ1Bvc2l0aW9uQWx0SW5wdXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG9hdGluZ1Bvc2l0aW9uQ29udGVudE9wdGlvbnMge1xuICAgIGxpbms6IEFsaWdubWVudElucHV0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvYXRpbmdQb3NpdGlvbkFuY2hvck9wdGlvbnMge1xuICAgIGxpbms6IEFsaWdubWVudElucHV0XG4gICAgbWFyZ2luPzogU2lkZXNJbnB1dFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb2F0aW5nUG9zaXRpb25QbGFjZW1lbnRPcHRpb25zIHtcbiAgICBwYWRkaW5nPzogU2lkZXNJbnB1dFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb2F0aW5nUG9zaXRpb24ge1xuICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgcmVjdDogUG9zaXRpb24gJiBSZWFkb25seTxEaW1lbnNpb24+XG4gICAgICAgIGxpbms6IEFsaWdubWVudFxuICAgIH1cbiAgICBhbmNob3I6IHtcbiAgICAgICAgcmVhZG9ubHkgcmVjdDogUmVhZG9ubHk8UmVjdD5cbiAgICAgICAgbGluazogQWxpZ25tZW50XG4gICAgfVxuICAgIHBsYWNlbWVudDoge1xuICAgICAgICByZWFkb25seSByZWN0OiBSZWFkb25seTxSZWN0PlxuICAgICAgICByZWFkb25seSBwYWRkaW5nOiBSZWFkb25seTxTaWRlcz5cbiAgICAgICAgcmVhZG9ubHkgcmVjdFdpdGhQYWRkaW5nOiBSZWFkb25seTxSZWN0PlxuICAgICAgICBhcmVhOiBSZWFkb25seTxSZWN0PlxuICAgIH1cbiAgICBjb25uZWN0aW9uOiBQb3NpdGlvblxufVxuXG5pbnRlcmZhY2UgUGxhY2VtZW50QXJlYSB7XG4gICAgYW5jaG9yTGluazogQWxpZ25tZW50XG4gICAgY29udGVudExpbms6IEFsaWdubWVudFxuICAgIGFyZWE6IEZsb2F0aW5nUG9zaXRpb25bXCJwbGFjZW1lbnRcIl1bXCJhcmVhXCJdXG4gICAgY29ubmVjdGlvbjogUG9zaXRpb25cbn1cblxudHlwZSBGbG9hdGluZ1Bvc2l0aW9uQWx0Q29uc3QgPVxuICAgIHwgXCJub25lXCJcbiAgICB8IFwiZmxpcFwiXG4gICAgfCBcInNoaWZ0XCJcbiAgICB8IFwiZmxpcC1zaGlmdFwiXG4gICAgfCBcImdyZWF0ZXN0XCJcbiAgICB8IFwiZ3JlYXRlc3Qtc2hpZnRcIlxuICAgIHwgXCJzbWFsbGVzdFwiXG4gICAgfCBcInNtYWxsZXN0LXNoaWZ0XCJcbmV4cG9ydCB0eXBlIEZsb2F0aW5nUG9zaXRpb25BbHRJbnB1dCA9IEZsb2F0aW5nUG9zaXRpb25BbHRDb25zdCB8IEZsb2F0aW5nUG9zaXRpb25BbHRGdW5jXG5leHBvcnQgdHlwZSBGbG9hdGluZ1Bvc2l0aW9uQWx0RnVuYyA9IChwb3M6IEZsb2F0aW5nUG9zaXRpb24sIGF4aXM6IEZsb2F0aW5nUG9zaXRpb25BbHRBeGlzKSA9PiB2b2lkXG5leHBvcnQgdHlwZSBGbG9hdGluZ1Bvc2l0aW9uQWx0Tm9ybSA9IEFycmF5PEZsb2F0aW5nUG9zaXRpb25BbHRGdW5jPlxuXG5leHBvcnQgY29uc3QgZW51bSBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcyB7XG4gICAgSG9yaXpvbnRhbCA9IFwiSFwiLFxuICAgIFZlcnRpY2FsID0gXCJWXCJcbn1cblxuY29uc3QgWkVST19QQURESU5HID0gc2lkZXNOb3JtYWxpemUoMClcbmNvbnN0IFpFUk9fQ09OTkVDVElPTiA9IHsgeDogMCwgeTogMCB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdGluZ1Bvc2l0aW9uKHsgZGltcywgb3B0aW9ucyB9OiBGbG9hdGluZ1Bvc2l0aW9uSW5wdXQpOiBGbG9hdGluZ1Bvc2l0aW9uIHtcbiAgICBjb25zdCBwYWRkaW5nID0gb3B0aW9ucy5wbGFjZW1lbnQucGFkZGluZyA/IHNpZGVzTm9ybWFsaXplKG9wdGlvbnMucGxhY2VtZW50LnBhZGRpbmcpIDogWkVST19QQURESU5HXG4gICAgY29uc3QgcGxhY2VtZW50OiBGbG9hdGluZ1Bvc2l0aW9uW1wicGxhY2VtZW50XCJdID0ge1xuICAgICAgICByZWN0OiBkaW1zLnBsYWNlbWVudCxcbiAgICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgICAgcmVjdFdpdGhQYWRkaW5nOiByZWN0Q29udHJhY3QoZGltcy5wbGFjZW1lbnQsIHBhZGRpbmcpLFxuICAgICAgICBhcmVhOiB7IC4uLmRpbXMucGxhY2VtZW50IH1cbiAgICB9XG5cbiAgICBjb25zdCBhbmNob3I6IEZsb2F0aW5nUG9zaXRpb25bXCJhbmNob3JcIl0gPSB7XG4gICAgICAgIHJlY3Q6IG9wdGlvbnMuYW5jaG9yLm1hcmdpbiA/IHJlY3RFeHBhbmQoZGltcy5hbmNob3IsIG9wdGlvbnMuYW5jaG9yLm1hcmdpbikgOiBkaW1zLmFuY2hvcixcbiAgICAgICAgbGluazogYWxpZ25tZW50Tm9ybWFsaXplKG9wdGlvbnMuYW5jaG9yLmxpbmspXG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudDogRmxvYXRpbmdQb3NpdGlvbltcImNvbnRlbnRcIl0gPSB7XG4gICAgICAgIHJlY3Q6IHsgeDogMCwgeTogMCwgLi4uZGltcy5jb250ZW50IH0sXG4gICAgICAgIGxpbms6IGFsaWdubWVudE5vcm1hbGl6ZShvcHRpb25zLmNvbnRlbnQubGluaylcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcGxhY2VtZW50LCBhbmNob3IsIGNvbnRlbnQsIGNvbm5lY3Rpb246IFpFUk9fQ09OTkVDVElPTiB9XG4gICAgY29uc3QgYXJlYSA9IHBsYWNlbWVudEFyZWEocG9zaXRpb24sIGFuY2hvci5saW5rLCBjb250ZW50LmxpbmspXG4gICAgc2V0UGxhY2VtZW50KHBvc2l0aW9uLCBhcmVhKVxuXG4gICAgaWYgKG9wdGlvbnMuaG9yaXpvbnRhbEFsdCkge1xuICAgICAgICBhcHBseUFsdHMocG9zaXRpb24sIEZsb2F0aW5nUG9zaXRpb25BbHRBeGlzLkhvcml6b250YWwsIG9wdGlvbnMuaG9yaXpvbnRhbEFsdClcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy52ZXJ0aWNhbEFsdCkge1xuICAgICAgICBhcHBseUFsdHMocG9zaXRpb24sIEZsb2F0aW5nUG9zaXRpb25BbHRBeGlzLlZlcnRpY2FsLCBvcHRpb25zLnZlcnRpY2FsQWx0KVxuICAgIH1cblxuICAgIHJldHVybiBwb3NpdGlvblxufVxuXG5mdW5jdGlvbiBwbGFjZW1lbnRBcmVhKHBvczogRmxvYXRpbmdQb3NpdGlvbiwgYW5jaG9yTGluazogQWxpZ25tZW50LCBjb250ZW50TGluazogQWxpZ25tZW50KTogUGxhY2VtZW50QXJlYSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHJlY3RPcmlnaW4ocG9zLmFuY2hvci5yZWN0LCBhbmNob3JMaW5rKVxuICAgIGxldCB7IHgsIHkgfSA9IGNvbm5lY3Rpb25cbiAgICBjb25zdCBwbGFjZW1lbnQgPSBwb3MucGxhY2VtZW50LnJlY3RcbiAgICBjb25zdCBwbGFjZW1lbnRQYWQgPSBwb3MucGxhY2VtZW50LnBhZGRpbmdcbiAgICBsZXQgd2lkdGggPSAwXG4gICAgbGV0IGhlaWdodCA9IDBcblxuICAgIHN3aXRjaCAoY29udGVudExpbmsuaG9yaXpvbnRhbCkge1xuICAgICAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgICBjYXNlIFwic3RhcnRcIjpcbiAgICAgICAgICAgIHdpZHRoID0gcGxhY2VtZW50LndpZHRoIC0geFxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBcImNlbnRlclwiOlxuICAgICAgICAgICAgaWYgKGFuY2hvckxpbmsuaG9yaXpvbnRhbCA9PT0gXCJjZW50ZXJcIikge1xuICAgICAgICAgICAgICAgIHdpZHRoID0gcGxhY2VtZW50LndpZHRoXG4gICAgICAgICAgICAgICAgeCA9IHBsYWNlbWVudC54XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRTaXplID0geCAtIHBsYWNlbWVudFBhZC5sZWZ0LnZhbHVlXG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHRTaXplID0gcGxhY2VtZW50LndpZHRoIC0geCAtIHBsYWNlbWVudFBhZC5yaWdodC52YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IG13ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obGVmdFNpemUsIHJpZ2h0U2l6ZSkpXG4gICAgICAgICAgICAgICAgd2lkdGggPSBtdyAqIDJcbiAgICAgICAgICAgICAgICB4IC09IG13XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgICAgICAgd2lkdGggPSB4IC0gcGxhY2VtZW50LnhcbiAgICAgICAgICAgIHggPSBwbGFjZW1lbnQueFxuICAgICAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbnRlbnRMaW5rLnZlcnRpY2FsKSB7XG4gICAgICAgIGNhc2UgXCJ0b3BcIjpcbiAgICAgICAgICAgIGhlaWdodCA9IHBsYWNlbWVudC5oZWlnaHQgLSB5XG4gICAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIFwibWlkZGxlXCI6XG4gICAgICAgICAgICBpZiAoYW5jaG9yTGluay52ZXJ0aWNhbCA9PT0gXCJtaWRkbGVcIikge1xuICAgICAgICAgICAgICAgIGhlaWdodCA9IHBsYWNlbWVudC5oZWlnaHRcbiAgICAgICAgICAgICAgICB5ID0gcGxhY2VtZW50LnlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9wU2l6ZSA9IHkgLSBwbGFjZW1lbnRQYWQudG9wLnZhbHVlXG4gICAgICAgICAgICAgICAgY29uc3QgYm90dG9tU2l6ZSA9IHBsYWNlbWVudC5oZWlnaHQgLSB5IC0gcGxhY2VtZW50UGFkLmJvdHRvbS52YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IG1oID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odG9wU2l6ZSwgYm90dG9tU2l6ZSkpXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gbWggKiAyXG4gICAgICAgICAgICAgICAgeSAtPSBtaFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICAgICAgICBoZWlnaHQgPSB5IC0gcGxhY2VtZW50LnlcbiAgICAgICAgICAgIHkgPSBwbGFjZW1lbnQueVxuICAgICAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjb25zdCBjb25zdHJhaW50ID0gcG9zLnBsYWNlbWVudC5yZWN0V2l0aFBhZGRpbmdcbiAgICBjb25zdCBuZXdYID0gTWF0aC5tYXgoeCwgY29uc3RyYWludC54KVxuICAgIGNvbnN0IG5ld1kgPSBNYXRoLm1heCh5LCBjb25zdHJhaW50LnkpXG4gICAgY29uc3QgZGlmZlggPSBuZXdYIC0geFxuICAgIGNvbnN0IGRpZmZZID0gbmV3WSAtIHlcblxuICAgIGNvbnN0IGFyZWEgPSB7XG4gICAgICAgIHg6IG5ld1gsXG4gICAgICAgIHk6IG5ld1ksXG4gICAgICAgIHdpZHRoOiBNYXRoLm1pbihuZXdYICsgd2lkdGggLSBkaWZmWCwgY29uc3RyYWludC54ICsgY29uc3RyYWludC53aWR0aCkgLSBuZXdYLFxuICAgICAgICBoZWlnaHQ6IE1hdGgubWluKG5ld1kgKyBoZWlnaHQgLSBkaWZmWSwgY29uc3RyYWludC55ICsgY29uc3RyYWludC5oZWlnaHQpIC0gbmV3WVxuICAgIH1cblxuICAgIHJldHVybiB7IGFyZWEsIGNvbnRlbnRMaW5rLCBhbmNob3JMaW5rLCBjb25uZWN0aW9uIH1cbn1cblxuZnVuY3Rpb24gc2V0UGxhY2VtZW50KHBvc2l0aW9uOiBGbG9hdGluZ1Bvc2l0aW9uLCB7IGFyZWEsIGFuY2hvckxpbmssIGNvbnRlbnRMaW5rLCBjb25uZWN0aW9uIH06IFBsYWNlbWVudEFyZWEpOiB2b2lkIHtcbiAgICBwb3NpdGlvbi5wbGFjZW1lbnQuYXJlYSA9IGFyZWFcbiAgICBwb3NpdGlvbi5hbmNob3IubGluayA9IGFuY2hvckxpbmtcbiAgICBwb3NpdGlvbi5jb250ZW50LmxpbmsgPSBjb250ZW50TGlua1xuXG4gICAgY29uc3QgcGxhbm5lZENvbnRlbnRSZWN0ID0gcmVjdE1vdmVPcmlnaW4ocG9zaXRpb24uY29udGVudC5yZWN0LCBjb250ZW50TGluaywgY29ubmVjdGlvbilcbiAgICBwb3NpdGlvbi5jb25uZWN0aW9uID0gYWRqdXN0Q29ubmVjdGlvbihhcmVhLCBwbGFubmVkQ29udGVudFJlY3QsIGNvbm5lY3Rpb24pXG4gICAgcG9zaXRpb24uY29udGVudC5yZWN0ID0gcmVjdE1vdmVPcmlnaW4ocG9zaXRpb24uY29udGVudC5yZWN0LCBjb250ZW50TGluaywgY29ubmVjdGlvbilcbn1cblxuZnVuY3Rpb24gYWRqdXN0Q29ubmVjdGlvbihcbiAgICBwbGFjZW1lbnQ6IEZsb2F0aW5nUG9zaXRpb25bXCJwbGFjZW1lbnRcIl1bXCJhcmVhXCJdLFxuICAgIGNvbnRlbnQ6IEZsb2F0aW5nUG9zaXRpb25bXCJjb250ZW50XCJdW1wicmVjdFwiXSxcbiAgICBjb25uZWN0aW9uOiBGbG9hdGluZ1Bvc2l0aW9uW1wiY29ubmVjdGlvblwiXVxuKSB7XG4gICAgY29uc3QgeCA9IE1hdGgubWF4KHBsYWNlbWVudC54LCBjb250ZW50LngpXG4gICAgY29uc3QgeSA9IE1hdGgubWF4KHBsYWNlbWVudC55LCBjb250ZW50LnkpXG4gICAgY29uc3QgbGVmdERpZmYgPSB4IC0gY29udGVudC54XG4gICAgY29uc3QgdG9wRGlmZiA9IHkgLSBjb250ZW50LnlcbiAgICBjb25zdCB3aWR0aERpZmYgPSBwbGFjZW1lbnQueCArIHBsYWNlbWVudC53aWR0aCAtICh4ICsgY29udGVudC53aWR0aClcbiAgICBjb25zdCBoZWlnaHREaWZmID0gcGxhY2VtZW50LnkgKyBwbGFjZW1lbnQuaGVpZ2h0IC0gKHkgKyBjb250ZW50LmhlaWdodClcblxuICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4uY29ubmVjdGlvbiB9XG4gICAgY29ubmVjdGlvbi54ICs9IGxlZnREaWZmXG4gICAgY29ubmVjdGlvbi55ICs9IHRvcERpZmZcblxuICAgIGlmICh3aWR0aERpZmYgPCAwKSB7XG4gICAgICAgIGNvbm5lY3Rpb24ueCArPSB3aWR0aERpZmZcbiAgICB9XG5cbiAgICBpZiAoaGVpZ2h0RGlmZiA8IDApIHtcbiAgICAgICAgY29ubmVjdGlvbi55ICs9IGhlaWdodERpZmZcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBhcHBseUFsdHMocG9zOiBGbG9hdGluZ1Bvc2l0aW9uLCBheGlzOiBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcywgYWx0czogRmxvYXRpbmdQb3NpdGlvbkFsdElucHV0KSB7XG4gICAgY29uc3Qgbm9ybSA9IHBvc2l0aW9uQWx0Tm9ybWFsaXplKGFsdHMpXG4gICAgZm9yIChjb25zdCBhbHQgb2Ygbm9ybSkge1xuICAgICAgICBhbHQocG9zLCBheGlzKVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc2l0aW9uQWx0Tm9ybWFsaXplKFxuICAgIGlucHV0OiBGbG9hdGluZ1Bvc2l0aW9uQWx0SW5wdXQgfCBGbG9hdGluZ1Bvc2l0aW9uQWx0Tm9ybVxuKTogRmxvYXRpbmdQb3NpdGlvbkFsdE5vcm0ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICByZXR1cm4gaW5wdXRcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBbaW5wdXRdXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIGFsdFN0cmluZ1RvRm5zKGlucHV0KVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhbHQgcG9zaXRpb246ICR7aW5wdXR9YClcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFsdFN0cmluZ1RvRm5zKGlucHV0OiBGbG9hdGluZ1Bvc2l0aW9uQWx0Q29uc3QpOiBGbG9hdGluZ1Bvc2l0aW9uQWx0Tm9ybSB7XG4gICAgc3dpdGNoIChpbnB1dCkge1xuICAgICAgICBjYXNlIFwibm9uZVwiOlxuICAgICAgICAgICAgcmV0dXJuIFtub25lXVxuICAgICAgICBjYXNlIFwiZmxpcFwiOlxuICAgICAgICAgICAgcmV0dXJuIFtmbGlwXVxuICAgICAgICBjYXNlIFwic2hpZnRcIjpcbiAgICAgICAgICAgIHJldHVybiBbc2hpZnRdXG4gICAgICAgIGNhc2UgXCJmbGlwLXNoaWZ0XCI6XG4gICAgICAgICAgICByZXR1cm4gW2ZsaXAsIHNoaWZ0XVxuICAgICAgICBjYXNlIFwiZ3JlYXRlc3RcIjpcbiAgICAgICAgICAgIHJldHVybiBbZ3JlYXRlc3RdXG4gICAgICAgIGNhc2UgXCJncmVhdGVzdC1zaGlmdFwiOlxuICAgICAgICAgICAgcmV0dXJuIFtncmVhdGVzdCwgc2hpZnRdXG4gICAgICAgIGNhc2UgXCJzbWFsbGVzdFwiOlxuICAgICAgICAgICAgcmV0dXJuIFtzbWFsbGVzdF1cbiAgICAgICAgY2FzZSBcInNtYWxsZXN0LXNoaWZ0XCI6XG4gICAgICAgICAgICByZXR1cm4gW3NtYWxsZXN0LCBzaGlmdF1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vbmUocG9zOiBGbG9hdGluZ1Bvc2l0aW9uLCBheGlzOiBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcyk6IHZvaWQge31cblxuZnVuY3Rpb24gZmxpcChwb3M6IEZsb2F0aW5nUG9zaXRpb24sIGF4aXM6IEZsb2F0aW5nUG9zaXRpb25BbHRBeGlzKTogdm9pZCB7XG4gICAgY29uc3Qgd2g6IFwid2lkdGhcIiB8IFwiaGVpZ2h0XCIgPSBheGlzID09PSBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcy5Ib3Jpem9udGFsID8gXCJ3aWR0aFwiIDogXCJoZWlnaHRcIlxuICAgIGlmIChwb3MucGxhY2VtZW50LmFyZWFbd2hdID49IHBvcy5jb250ZW50LnJlY3Rbd2hdKSB7XG4gICAgICAgIHJldHVyblxuICAgIH1cbiAgICByZXR1cm4gZ3JlYXRlc3QocG9zLCBheGlzKVxufVxuXG5mdW5jdGlvbiBzaGlmdChwb3M6IEZsb2F0aW5nUG9zaXRpb24sIGF4aXM6IEZsb2F0aW5nUG9zaXRpb25BbHRBeGlzKTogdm9pZCB7fVxuXG5mdW5jdGlvbiBncmVhdGVzdChwb3M6IEZsb2F0aW5nUG9zaXRpb24sIGF4aXM6IEZsb2F0aW5nUG9zaXRpb25BbHRBeGlzKTogdm9pZCB7XG4gICAgX2J5U2l6ZShwb3MsIGF4aXMsIChhLCBiKSA9PiBhID49IGIpXG59XG5cbmZ1bmN0aW9uIHNtYWxsZXN0KHBvczogRmxvYXRpbmdQb3NpdGlvbiwgYXhpczogRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMpOiB2b2lkIHtcbiAgICBfYnlTaXplKHBvcywgYXhpcywgKGEsIGIpID0+IGEgPD0gYilcbn1cblxuZnVuY3Rpb24gX2J5U2l6ZShwb3M6IEZsb2F0aW5nUG9zaXRpb24sIGF4aXM6IEZsb2F0aW5nUG9zaXRpb25BbHRBeGlzLCBjbXA6IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHdoOiBcIndpZHRoXCIgfCBcImhlaWdodFwiID0gYXhpcyA9PT0gRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMuSG9yaXpvbnRhbCA/IFwid2lkdGhcIiA6IFwiaGVpZ2h0XCJcblxuICAgIGNvbnN0IGN1cnJlbnQgPSBwb3MucGxhY2VtZW50LmFyZWFbd2hdXG4gICAgY29uc3QgYW5jaG9yTGluayA9IG9wcG9zaXRlTGluayhheGlzLCBwb3MuYW5jaG9yLmxpbmspXG4gICAgY29uc3QgY29udGVudExpbmsgPSBvcHBvc2l0ZUxpbmsoYXhpcywgcG9zLmNvbnRlbnQubGluaylcbiAgICBjb25zdCBvcHBvc2l0ZVBsYWNlbWVudCA9IHBsYWNlbWVudEFyZWEocG9zLCBhbmNob3JMaW5rLCBjb250ZW50TGluaylcblxuICAgIGlmIChjbXAoY3VycmVudCwgb3Bwb3NpdGVQbGFjZW1lbnQuYXJlYVt3aF0pKSB7XG4gICAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldFBsYWNlbWVudChwb3MsIG9wcG9zaXRlUGxhY2VtZW50KVxufVxuXG5mdW5jdGlvbiBvcHBvc2l0ZUxpbmsoYXhpczogRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMsIGxpbms6IEFsaWdubWVudCk6IEFsaWdubWVudCB7XG4gICAgaWYgKGF4aXMgPT09IEZsb2F0aW5nUG9zaXRpb25BbHRBeGlzLkhvcml6b250YWwpIHtcbiAgICAgICAgcmV0dXJuIHsgaG9yaXpvbnRhbDogQWxpZ25Ib3Jpem9udGFsT3Bwb3NpdGVbbGluay5ob3Jpem9udGFsXSwgdmVydGljYWw6IGxpbmsudmVydGljYWwgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7IGhvcml6b250YWw6IGxpbmsuaG9yaXpvbnRhbCwgdmVydGljYWw6IEFsaWduVmVydGljYWxPcHBvc2l0ZVtsaW5rLnZlcnRpY2FsXSB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvYXRpbmdQb3NpdGlvblRvU3R5bGUocG9zOiBSZWFkb25seTxGbG9hdGluZ1Bvc2l0aW9uPik6IFBhcnRpYWw8Q1NTU3R5bGVEZWNsYXJhdGlvbj4ge1xuICAgIGNvbnN0IGNvbnRlbnRSZWN0ID0gcG9zLmNvbnRlbnQucmVjdFxuICAgIGNvbnN0IHBsYWNlbWVudFJlY3QgPSBwb3MucGxhY2VtZW50LnJlY3RcbiAgICBjb25zdCBzdHlsZTogUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPiA9IHt9XG5cbiAgICBpZiAocG9zLmNvbnRlbnQubGluay5ob3Jpem9udGFsID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgc3R5bGVbXCJyaWdodFwiXSA9IGAke3BsYWNlbWVudFJlY3Qud2lkdGggLSAoY29udGVudFJlY3QueCArIGNvbnRlbnRSZWN0LndpZHRoKX1weGBcbiAgICAgICAgc3R5bGVbXCJsZWZ0XCJdID0gXCJhdXRvXCJcbiAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZVtcImxlZnRcIl0gPSBgJHtjb250ZW50UmVjdC54fXB4YFxuICAgICAgICBzdHlsZVtcInJpZ2h0XCJdID0gXCJhdXRvXCJcbiAgICB9XG5cbiAgICBpZiAocG9zLmNvbnRlbnQubGluay52ZXJ0aWNhbCA9PT0gXCJib3R0b21cIikge1xuICAgICAgICBzdHlsZVtcImJvdHRvbVwiXSA9IGAke3BsYWNlbWVudFJlY3QuaGVpZ2h0IC0gKGNvbnRlbnRSZWN0LnkgKyBjb250ZW50UmVjdC5oZWlnaHQpfXB4YFxuICAgICAgICBzdHlsZVtcInRvcFwiXSA9IFwiYXV0b1wiXG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVbXCJ0b3BcIl0gPSBgJHtjb250ZW50UmVjdC55fXB4YFxuICAgICAgICBzdHlsZVtcImJvdHRvbVwiXSA9IFwiYXV0b1wiXG4gICAgfVxuXG4gICAgcmV0dXJuIHN0eWxlXG59XG4iXX0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXRpbmctcG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdHlsZS9zcmMvdXRpbC9mbG9hdGluZy1wb3NpdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTlCLE9BQU8sRUFDSCx1QkFBdUIsRUFHdkIsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUN4QixNQUFNLGFBQWEsQ0FBQTtBQUNwQixzRUFBc0U7QUFDdEUsT0FBTyxFQUE2QixZQUFZLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDeEcsT0FBTyxFQUFxQixjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUE7QUF3RjNELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUN0QyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO0FBRXRDLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQXlCO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFBO0lBQ3BHLE1BQU0sU0FBUyxHQUFrQztRQUM3QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7UUFDcEIsT0FBTyxFQUFFLE9BQU87UUFDaEIsZUFBZSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQztRQUN0RCxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7S0FDOUIsQ0FBQTtJQUVELE1BQU0sTUFBTSxHQUErQjtR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QUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLCtDQUFtQztRQUN2QyxDQUFDO1FBRUQsbURBQXFDO0lBQ3pDLENBQUM7U0FBTSxDQUFDO1FBQ0osSUFBSSxXQUFXLENBQUMsVUFBVSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3JDLG1EQUFxQztRQUN6QyxDQUFDO1FBRUQscURBQXNDO0lBQzFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xhbXAgfSBmcm9tIFwibG9kYXNoXCJcblxuaW1wb3J0IHtcbiAgICBBbGlnbkhvcml6b250YWxPcHBvc2l0ZSxcbiAgICBBbGlnbm1lbnQsXG4gICAgQWxpZ25tZW50SW5wdXQsXG4gICAgYWxpZ25tZW50Tm9ybWFsaXplLFxuICAgIEFsaWduVmVydGljYWxPcHBvc2l0ZVxufSBmcm9tIFwiLi9hbGlnbm1lbnRcIlxuLy8gaW1wb3J0IHR5cGUgeyBGbG9hdGluZ1Bvc2l0aW9uT3B0aW9uc05vcm1hbGl6ZWQgfSBmcm9tIFwiLi9wb3NpdGlvblwiXG5pbXBvcnQgeyBEaW1lbnNpb24sIFBvc2l0aW9uLCBSZWN0LCByZWN0Q29udHJhY3QsIHJlY3RFeHBhbmQsIHJlY3RNb3ZlT3JpZ2luLCByZWN0T3JpZ2luIH0gZnJvbSBcIi4vcmVjdFwiXG5pbXBvcnQgeyBTaWRlcywgU2lkZXNJbnB1dCwgc2lkZXNOb3JtYWxpemUgfSBmcm9tIFwiLi9zaWRlc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvYXRpbmdQb3NpdGlvbklucHV0IHtcbiAgICBkaW1zOiBGbG9hdGluZ1Bvc2l0aW9uRGltc1xuICAgIG9wdGlvbnM6IEZsb2F0aW5nUG9zaXRpb25PcHRpb25zXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvYXRpbmdQb3NpdGlvbkRpbXMge1xuICAgIGNvbnRlbnQ6IERpbWVuc2lvblxuICAgIGFuY2hvcjogUmVjdFxuICAgIHBsYWNlbWVudDogUmVjdFxuICAgIGNvbnN0cmFpbnRzPzogRmxvYXRpbmdQb3NpdGlvbkNvbnN0cmFpbnRzSW5wdXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG9hdGluZ1Bvc2l0aW9uT3B0aW9ucyB7XG4gICAgY29udGVudDogRmxvYXRpbmdQb3NpdGlvbkNvbnRlbnRPcHRpb25zXG4gICAgYW5jaG9yOiBGbG9hdGluZ1Bvc2l0aW9uQW5jaG9yT3B0aW9uc1xuICAgIHBsYWNlbWVudDogRmxvYXRpbmdQb3NpdGlvblBsYWNlbWVudE9wdGlvbnNcbiAgICBob3Jpem9udGFsQWx0PzogRmxvYXRpbmdQb3NpdGlvbkFsdElucHV0XG4gICAgdmVydGljYWxBbHQ/OiBGbG9hdGluZ1Bvc2l0aW9uQWx0SW5wdXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG9hdGluZ1Bvc2l0aW9uQ29udGVudE9wdGlvbnMge1xuICAgIGxpbms6IEFsaWdubWVudElucHV0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvYXRpbmdQb3NpdGlvbkNvbnN0cmFpbnRzSW5wdXQge1xuICAgIG1pbldpZHRoPzogbnVtYmVyXG4gICAgbWF4V2lkdGg/OiBudW1iZXJcbiAgICBtaW5IZWlnaHQ/OiBudW1iZXJcbiAgICBtYXhIZWlnaHQ/OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG9hdGluZ1Bvc2l0aW9uQW5jaG9yT3B0aW9ucyB7XG4gICAgbGluazogQWxpZ25tZW50SW5wdXRcbiAgICBtYXJnaW4/OiBTaWRlc0lucHV0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvYXRpbmdQb3NpdGlvblBsYWNlbWVudE9wdGlvbnMge1xuICAgIHBhZGRpbmc/OiBTaWRlc0lucHV0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvYXRpbmdQb3NpdGlvbiB7XG4gICAgY29udGVudDoge1xuICAgICAgICByZWN0OiBQb3NpdGlvbiAmIFJlYWRvbmx5PERpbWVuc2lvbj5cbiAgICAgICAgbGluazogQWxpZ25tZW50XG4gICAgICAgIHJlYWRvbmx5IGNvbnN0cmFpbmVkOiBSZWFkb25seTxEaW1lbnNpb24+XG4gICAgfVxuICAgIGFuY2hvcjoge1xuICAgICAgICByZWFkb25seSByZWN0OiBSZWFkb25seTxSZWN0PlxuICAgICAgICBsaW5rOiBBbGlnbm1lbnRcbiAgICB9XG4gICAgcGxhY2VtZW50OiB7XG4gICAgICAgIHJlYWRvbmx5IHJlY3Q6IFJlYWRvbmx5PFJlY3Q+XG4gICAgICAgIHJlYWRvbmx5IHBhZGRpbmc6IFJlYWRvbmx5PFNpZGVzPlxuICAgICAgICByZWFkb25seSByZWN0V2l0aFBhZGRpbmc6IFJlYWRvbmx5PFJlY3Q+XG4gICAgICAgIGFyZWE6IFJlYWRvbmx5PFJlY3Q+XG4gICAgfVxuICAgIGNvbm5lY3Rpb246IFBvc2l0aW9uXG4gICAgZGlyZWN0aW9uOiBGbG9hdGluZ1Bvc2l0aW9uRGlyZWN0aW9uXG4gICAgY29uc3RyYWludHM/OiBGbG9hdGluZ1Bvc2l0aW9uQ29uc3RyYWludHNJbnB1dFxufVxuXG5pbnRlcmZhY2UgUGxhY2VtZW50QXJlYSB7XG4gICAgYW5jaG9yTGluazogQWxpZ25tZW50XG4gICAgY29udGVudExpbms6IEFsaWdubWVudFxuICAgIGFyZWE6IEZsb2F0aW5nUG9zaXRpb25bXCJwbGFjZW1lbnRcIl1bXCJhcmVhXCJdXG4gICAgY29ubmVjdGlvbjogUG9zaXRpb25cbn1cblxudHlwZSBGbG9hdGluZ1Bvc2l0aW9uQWx0Q29uc3QgPVxuICAgIHwgXCJub25lXCJcbiAgICB8IFwiZmxpcFwiXG4gICAgfCBcInNoaWZ0XCJcbiAgICB8IFwiZmxpcC1zaGlmdFwiXG4gICAgfCBcImdyZWF0ZXN0XCJcbiAgICB8IFwiZ3JlYXRlc3Qtc2hpZnRcIlxuICAgIHwgXCJzbWFsbGVzdFwiXG4gICAgfCBcInNtYWxsZXN0LXNoaWZ0XCJcbmV4cG9ydCB0eXBlIEZsb2F0aW5nUG9zaXRpb25BbHRJbnB1dCA9IEZsb2F0aW5nUG9zaXRpb25BbHRDb25zdCB8IEZsb2F0aW5nUG9zaXRpb25BbHRGdW5jXG5leHBvcnQgdHlwZSBGbG9hdGluZ1Bvc2l0aW9uQWx0RnVuYyA9IChwb3M6IEZsb2F0aW5nUG9zaXRpb24sIGF4aXM6IEZsb2F0aW5nUG9zaXRpb25BbHRBeGlzKSA9PiB2b2lkXG5leHBvcnQgdHlwZSBGbG9hdGluZ1Bvc2l0aW9uQWx0Tm9ybSA9IEFycmF5PEZsb2F0aW5nUG9zaXRpb25BbHRGdW5jPlxuXG5leHBvcnQgY29uc3QgZW51bSBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcyB7XG4gICAgSG9yaXpvbnRhbCA9IFwiSFwiLFxuICAgIFZlcnRpY2FsID0gXCJWXCJcbn1cblxuY29uc3QgWkVST19QQURESU5HID0gc2lkZXNOb3JtYWxpemUoMClcbmNvbnN0IFpFUk9fQ09OTkVDVElPTiA9IHsgeDogMCwgeTogMCB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdGluZ1Bvc2l0aW9uKHsgZGltcywgb3B0aW9ucyB9OiBGbG9hdGluZ1Bvc2l0aW9uSW5wdXQpOiBGbG9hdGluZ1Bvc2l0aW9uIHtcbiAgICBjb25zdCBwYWRkaW5nID0gb3B0aW9ucy5wbGFjZW1lbnQucGFkZGluZyA/IHNpZGVzTm9ybWFsaXplKG9wdGlvbnMucGxhY2VtZW50LnBhZGRpbmcpIDogWkVST19QQURESU5HXG4gICAgY29uc3QgcGxhY2VtZW50OiBGbG9hdGluZ1Bvc2l0aW9uW1wicGxhY2VtZW50XCJdID0ge1xuICAgICAgICByZWN0OiBkaW1zLnBsYWNlbWVudCxcbiAgICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgICAgcmVjdFdpdGhQYWRkaW5nOiByZWN0Q29udHJhY3QoZGltcy5wbGFjZW1lbnQsIHBhZGRpbmcpLFxuICAgICAgICBhcmVhOiB7IC4uLmRpbXMucGxhY2VtZW50IH1cbiAgICB9XG5cbiAgICBjb25zdCBhbmNob3I6IEZsb2F0aW5nUG9zaXRpb25bXCJhbmNob3JcIl0gPSB7XG4gICAgICAgIHJlY3Q6IG9wdGlvbnMuYW5jaG9yLm1hcmdpbiA/IHJlY3RFeHBhbmQoZGltcy5hbmNob3IsIG9wdGlvbnMuYW5jaG9yLm1hcmdpbikgOiBkaW1zLmFuY2hvcixcbiAgICAgICAgbGluazogYWxpZ25tZW50Tm9ybWFsaXplKG9wdGlvbnMuYW5jaG9yLmxpbmspXG4gICAgfVxuXG4gICAgY29uc3QgbWluV2lkdGggPSBkaW1zLmNvbnN0cmFpbnRzPy5taW5XaWR0aCB8fCAwXG4gICAgY29uc3QgbWluSGVpZ2h0ID0gZGltcy5jb25zdHJhaW50cz8ubWluSGVpZ2h0IHx8IDBcbiAgICBjb25zdCBtYXhXaWR0aCA9IGRpbXMuY29uc3RyYWludHM/Lm1heFdpZHRoIHx8IEluZmluaXR5XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gZGltcy5jb25zdHJhaW50cz8ubWF4SGVpZ2h0IHx8IEluZmluaXR5XG4gICAgY29uc3QgY29udGVudDogRmxvYXRpbmdQb3NpdGlvbltcImNvbnRlbnRcIl0gPSB7XG4gICAgICAgIHJlY3Q6IHsgeDogMCwgeTogMCwgLi4uZGltcy5jb250ZW50IH0sXG4gICAgICAgIGxpbms6IGFsaWdubWVudE5vcm1hbGl6ZShvcHRpb25zLmNvbnRlbnQubGluayksXG4gICAgICAgIGNvbnN0cmFpbmVkOiB7XG4gICAgICAgICAgICB3aWR0aDogY2xhbXAoZGltcy5jb250ZW50LndpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgpLFxuICAgICAgICAgICAgaGVpZ2h0OiBjbGFtcChkaW1zLmNvbnRlbnQuaGVpZ2h0LCBtaW5IZWlnaHQsIG1heEhlaWdodClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBvc2l0aW9uID0ge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgY29ubmVjdGlvbjogWkVST19DT05ORUNUSU9OLFxuICAgICAgICBjb25zdHJhaW5zOiBkaW1zLmNvbnN0cmFpbnRzLFxuICAgICAgICBkaXJlY3Rpb246IEZsb2F0aW5nUG9zaXRpb25EaXJlY3Rpb24uRG93blxuICAgIH1cbiAgICBjb25zdCBhcmVhID0gcGxhY2VtZW50QXJlYShwb3NpdGlvbiwgYW5jaG9yLmxpbmssIGNvbnRlbnQubGluaylcbiAgICBzZXRQbGFjZW1lbnQocG9zaXRpb24sIGFyZWEpXG5cbiAgICBpZiAob3B0aW9ucy5ob3Jpem9udGFsQWx0KSB7XG4gICAgICAgIGFwcGx5QWx0cyhwb3NpdGlvbiwgRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMuSG9yaXpvbnRhbCwgb3B0aW9ucy5ob3Jpem9udGFsQWx0KVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnZlcnRpY2FsQWx0KSB7XG4gICAgICAgIGFwcGx5QWx0cyhwb3NpdGlvbiwgRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMuVmVydGljYWwsIG9wdGlvbnMudmVydGljYWxBbHQpXG4gICAgfVxuXG4gICAgcG9zaXRpb24uZGlyZWN0aW9uID0gZmxvYXRpbmdQb3NpdGlvbkRpcmVjdGlvbihwb3NpdGlvbilcbiAgICByZXR1cm4gcG9zaXRpb25cbn1cblxuZnVuY3Rpb24gcGxhY2VtZW50QXJlYShwb3M6IEZsb2F0aW5nUG9zaXRpb24sIGFuY2hvckxpbms6IEFsaWdubWVudCwgY29udGVudExpbms6IEFsaWdubWVudCk6IFBsYWNlbWVudEFyZWEge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSByZWN0T3JpZ2luKHBvcy5hbmNob3IucmVjdCwgYW5jaG9yTGluaylcbiAgICBsZXQgeyB4LCB5IH0gPSBjb25uZWN0aW9uXG4gICAgY29uc3QgcGxhY2VtZW50ID0gcG9zLnBsYWNlbWVudC5yZWN0XG4gICAgY29uc3QgcGxhY2VtZW50UGFkID0gcG9zLnBsYWNlbWVudC5wYWRkaW5nXG4gICAgbGV0IHdpZHRoID0gMFxuICAgIGxldCBoZWlnaHQgPSAwXG5cbiAgICBzd2l0Y2ggKGNvbnRlbnRMaW5rLmhvcml6b250YWwpIHtcbiAgICAgICAgY2FzZSBcImxlZnRcIjpcbiAgICAgICAgY2FzZSBcInN0YXJ0XCI6XG4gICAgICAgICAgICB3aWR0aCA9IHBsYWNlbWVudC53aWR0aCAtIHhcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgXCJjZW50ZXJcIjpcbiAgICAgICAgICAgIGlmIChhbmNob3JMaW5rLmhvcml6b250YWwgPT09IFwiY2VudGVyXCIpIHtcbiAgICAgICAgICAgICAgICB3aWR0aCA9IHBsYWNlbWVudC53aWR0aFxuICAgICAgICAgICAgICAgIHggPSBwbGFjZW1lbnQueFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWZ0U2l6ZSA9IHggLSBwbGFjZW1lbnRQYWQubGVmdC52YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0U2l6ZSA9IHBsYWNlbWVudC53aWR0aCAtIHggLSBwbGFjZW1lbnRQYWQucmlnaHQudmFsdWVcbiAgICAgICAgICAgICAgICBjb25zdCBtdyA9IE1hdGgubWF4KDAsIE1hdGgubWluKGxlZnRTaXplLCByaWdodFNpemUpKVxuICAgICAgICAgICAgICAgIHdpZHRoID0gbXcgKiAyXG4gICAgICAgICAgICAgICAgeCAtPSBtd1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgICAgICAgIHdpZHRoID0geCAtIHBsYWNlbWVudC54XG4gICAgICAgICAgICB4ID0gcGxhY2VtZW50LnhcbiAgICAgICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgc3dpdGNoIChjb250ZW50TGluay52ZXJ0aWNhbCkge1xuICAgICAgICBjYXNlIFwidG9wXCI6XG4gICAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnQuaGVpZ2h0IC0geVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxuICAgICAgICAgICAgaWYgKGFuY2hvckxpbmsudmVydGljYWwgPT09IFwibWlkZGxlXCIpIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnQuaGVpZ2h0XG4gICAgICAgICAgICAgICAgeSA9IHBsYWNlbWVudC55XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvcFNpemUgPSB5IC0gcGxhY2VtZW50UGFkLnRvcC52YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IGJvdHRvbVNpemUgPSBwbGFjZW1lbnQuaGVpZ2h0IC0geSAtIHBsYWNlbWVudFBhZC5ib3R0b20udmFsdWVcbiAgICAgICAgICAgICAgICBjb25zdCBtaCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRvcFNpemUsIGJvdHRvbVNpemUpKVxuICAgICAgICAgICAgICAgIGhlaWdodCA9IG1oICogMlxuICAgICAgICAgICAgICAgIHkgLT0gbWhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgICAgICAgaGVpZ2h0ID0geSAtIHBsYWNlbWVudC55XG4gICAgICAgICAgICB5ID0gcGxhY2VtZW50LnlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY29uc3QgY29uc3RyYWludCA9IHBvcy5wbGFjZW1lbnQucmVjdFdpdGhQYWRkaW5nXG4gICAgY29uc3QgbmV3WCA9IE1hdGgubWF4KHgsIGNvbnN0cmFpbnQueClcbiAgICBjb25zdCBuZXdZID0gTWF0aC5tYXgoeSwgY29uc3RyYWludC55KVxuICAgIGNvbnN0IGRpZmZYID0gbmV3WCAtIHhcbiAgICBjb25zdCBkaWZmWSA9IG5ld1kgLSB5XG5cbiAgICBjb25zdCBhcmVhID0ge1xuICAgICAgICB4OiBuZXdYLFxuICAgICAgICB5OiBuZXdZLFxuICAgICAgICB3aWR0aDogTWF0aC5taW4obmV3WCArIHdpZHRoIC0gZGlmZlgsIGNvbnN0cmFpbnQueCArIGNvbnN0cmFpbnQud2lkdGgpIC0gbmV3WCxcbiAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbihuZXdZICsgaGVpZ2h0IC0gZGlmZlksIGNvbnN0cmFpbnQueSArIGNvbnN0cmFpbnQuaGVpZ2h0KSAtIG5ld1lcbiAgICB9XG5cbiAgICByZXR1cm4geyBhcmVhLCBjb250ZW50TGluaywgYW5jaG9yTGluaywgY29ubmVjdGlvbiB9XG59XG5cbmZ1bmN0aW9uIHNldFBsYWNlbWVudChwb3NpdGlvbjogRmxvYXRpbmdQb3NpdGlvbiwgeyBhcmVhLCBhbmNob3JMaW5rLCBjb250ZW50TGluaywgY29ubmVjdGlvbiB9OiBQbGFjZW1lbnRBcmVhKTogdm9pZCB7XG4gICAgcG9zaXRpb24ucGxhY2VtZW50LmFyZWEgPSBhcmVhXG4gICAgcG9zaXRpb24uYW5jaG9yLmxpbmsgPSBhbmNob3JMaW5rXG4gICAgcG9zaXRpb24uY29udGVudC5saW5rID0gY29udGVudExpbmtcblxuICAgIGNvbnN0IHBsYW5uZWRDb250ZW50UmVjdCA9IHJlY3RNb3ZlT3JpZ2luKHBvc2l0aW9uLmNvbnRlbnQucmVjdCwgY29udGVudExpbmssIGNvbm5lY3Rpb24pXG4gICAgcG9zaXRpb24uY29ubmVjdGlvbiA9IGFkanVzdENvbm5lY3Rpb24oYXJlYSwgcGxhbm5lZENvbnRlbnRSZWN0LCBjb25uZWN0aW9uKVxuICAgIHBvc2l0aW9uLmNvbnRlbnQucmVjdCA9IHJlY3RNb3ZlT3JpZ2luKHBvc2l0aW9uLmNvbnRlbnQucmVjdCwgY29udGVudExpbmssIGNvbm5lY3Rpb24pXG59XG5cbmZ1bmN0aW9uIGFkanVzdENvbm5lY3Rpb24oXG4gICAgcGxhY2VtZW50OiBGbG9hdGluZ1Bvc2l0aW9uW1wicGxhY2VtZW50XCJdW1wiYXJlYVwiXSxcbiAgICBjb250ZW50OiBGbG9hdGluZ1Bvc2l0aW9uW1wiY29udGVudFwiXVtcInJlY3RcIl0sXG4gICAgY29ubmVjdGlvbjogRmxvYXRpbmdQb3NpdGlvbltcImNvbm5lY3Rpb25cIl1cbikge1xuICAgIGNvbnN0IHggPSBNYXRoLm1heChwbGFjZW1lbnQueCwgY29udGVudC54KVxuICAgIGNvbnN0IHkgPSBNYXRoLm1heChwbGFjZW1lbnQueSwgY29udGVudC55KVxuICAgIGNvbnN0IGxlZnREaWZmID0geCAtIGNvbnRlbnQueFxuICAgIGNvbnN0IHRvcERpZmYgPSB5IC0gY29udGVudC55XG4gICAgY29uc3Qgd2lkdGhEaWZmID0gcGxhY2VtZW50LnggKyBwbGFjZW1lbnQud2lkdGggLSAoeCArIGNvbnRlbnQud2lkdGgpXG4gICAgY29uc3QgaGVpZ2h0RGlmZiA9IHBsYWNlbWVudC55ICsgcGxhY2VtZW50LmhlaWdodCAtICh5ICsgY29udGVudC5oZWlnaHQpXG5cbiAgICBjb25zdCByZXN1bHQgPSB7IC4uLmNvbm5lY3Rpb24gfVxuICAgIGNvbm5lY3Rpb24ueCArPSBsZWZ0RGlmZlxuICAgIGNvbm5lY3Rpb24ueSArPSB0b3BEaWZmXG5cbiAgICBpZiAod2lkdGhEaWZmIDwgMCkge1xuICAgICAgICBjb25uZWN0aW9uLnggKz0gd2lkdGhEaWZmXG4gICAgfVxuXG4gICAgaWYgKGhlaWdodERpZmYgPCAwKSB7XG4gICAgICAgIGNvbm5lY3Rpb24ueSArPSBoZWlnaHREaWZmXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gYXBwbHlBbHRzKHBvczogRmxvYXRpbmdQb3NpdGlvbiwgYXhpczogRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMsIGFsdHM6IEZsb2F0aW5nUG9zaXRpb25BbHRJbnB1dCkge1xuICAgIGNvbnN0IG5vcm0gPSBwb3NpdGlvbkFsdE5vcm1hbGl6ZShhbHRzKVxuICAgIGZvciAoY29uc3QgYWx0IG9mIG5vcm0pIHtcbiAgICAgICAgYWx0KHBvcywgYXhpcylcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvbkFsdE5vcm1hbGl6ZShcbiAgICBpbnB1dDogRmxvYXRpbmdQb3NpdGlvbkFsdElucHV0IHwgRmxvYXRpbmdQb3NpdGlvbkFsdE5vcm1cbik6IEZsb2F0aW5nUG9zaXRpb25BbHROb3JtIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gW2lucHV0XVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBhbHRTdHJpbmdUb0ZucyhpbnB1dClcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYWx0IHBvc2l0aW9uOiAke2lucHV0fWApXG4gICAgfVxufVxuXG5mdW5jdGlvbiBhbHRTdHJpbmdUb0ZucyhpbnB1dDogRmxvYXRpbmdQb3NpdGlvbkFsdENvbnN0KTogRmxvYXRpbmdQb3NpdGlvbkFsdE5vcm0ge1xuICAgIHN3aXRjaCAoaW5wdXQpIHtcbiAgICAgICAgY2FzZSBcIm5vbmVcIjpcbiAgICAgICAgICAgIHJldHVybiBbbm9uZV1cbiAgICAgICAgY2FzZSBcImZsaXBcIjpcbiAgICAgICAgICAgIHJldHVybiBbZmxpcF1cbiAgICAgICAgY2FzZSBcInNoaWZ0XCI6XG4gICAgICAgICAgICByZXR1cm4gW3NoaWZ0XVxuICAgICAgICBjYXNlIFwiZmxpcC1zaGlmdFwiOlxuICAgICAgICAgICAgcmV0dXJuIFtmbGlwLCBzaGlmdF1cbiAgICAgICAgY2FzZSBcImdyZWF0ZXN0XCI6XG4gICAgICAgICAgICByZXR1cm4gW2dyZWF0ZXN0XVxuICAgICAgICBjYXNlIFwiZ3JlYXRlc3Qtc2hpZnRcIjpcbiAgICAgICAgICAgIHJldHVybiBbZ3JlYXRlc3QsIHNoaWZ0XVxuICAgICAgICBjYXNlIFwic21hbGxlc3RcIjpcbiAgICAgICAgICAgIHJldHVybiBbc21hbGxlc3RdXG4gICAgICAgIGNhc2UgXCJzbWFsbGVzdC1zaGlmdFwiOlxuICAgICAgICAgICAgcmV0dXJuIFtzbWFsbGVzdCwgc2hpZnRdXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub25lKHBvczogRmxvYXRpbmdQb3NpdGlvbiwgYXhpczogRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMpOiB2b2lkIHt9XG5cbmZ1bmN0aW9uIGZsaXAocG9zOiBGbG9hdGluZ1Bvc2l0aW9uLCBheGlzOiBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcyk6IHZvaWQge1xuICAgIGNvbnN0IHdoOiBcIndpZHRoXCIgfCBcImhlaWdodFwiID0gYXhpcyA9PT0gRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMuSG9yaXpvbnRhbCA/IFwid2lkdGhcIiA6IFwiaGVpZ2h0XCJcbiAgICBpZiAocG9zLnBsYWNlbWVudC5hcmVhW3doXSA+PSBwb3MuY29udGVudC5jb25zdHJhaW5lZFt3aF0pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHJldHVybiBncmVhdGVzdChwb3MsIGF4aXMpXG59XG5cbmZ1bmN0aW9uIHNoaWZ0KHBvczogRmxvYXRpbmdQb3NpdGlvbiwgYXhpczogRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMpOiB2b2lkIHt9XG5cbmZ1bmN0aW9uIGdyZWF0ZXN0KHBvczogRmxvYXRpbmdQb3NpdGlvbiwgYXhpczogRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMpOiB2b2lkIHtcbiAgICBfYnlTaXplKHBvcywgYXhpcywgKGEsIGIpID0+IGEgPj0gYilcbn1cblxuZnVuY3Rpb24gc21hbGxlc3QocG9zOiBGbG9hdGluZ1Bvc2l0aW9uLCBheGlzOiBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcyk6IHZvaWQge1xuICAgIF9ieVNpemUocG9zLCBheGlzLCAoYSwgYikgPT4gYSA8PSBiKVxufVxuXG5mdW5jdGlvbiBfYnlTaXplKHBvczogRmxvYXRpbmdQb3NpdGlvbiwgYXhpczogRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMsIGNtcDogKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgd2g6IFwid2lkdGhcIiB8IFwiaGVpZ2h0XCIgPSBheGlzID09PSBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcy5Ib3Jpem9udGFsID8gXCJ3aWR0aFwiIDogXCJoZWlnaHRcIlxuXG4gICAgY29uc3QgY3VycmVudCA9IHBvcy5wbGFjZW1lbnQuYXJlYVt3aF1cbiAgICBjb25zdCBhbmNob3JMaW5rID0gb3Bwb3NpdGVMaW5rKGF4aXMsIHBvcy5hbmNob3IubGluaylcbiAgICBjb25zdCBjb250ZW50TGluayA9IG9wcG9zaXRlTGluayhheGlzLCBwb3MuY29udGVudC5saW5rKVxuICAgIGNvbnN0IG9wcG9zaXRlUGxhY2VtZW50ID0gcGxhY2VtZW50QXJlYShwb3MsIGFuY2hvckxpbmssIGNvbnRlbnRMaW5rKVxuXG4gICAgaWYgKGNtcChjdXJyZW50LCBvcHBvc2l0ZVBsYWNlbWVudC5hcmVhW3doXSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0UGxhY2VtZW50KHBvcywgb3Bwb3NpdGVQbGFjZW1lbnQpXG59XG5cbmZ1bmN0aW9uIG9wcG9zaXRlTGluayhheGlzOiBGbG9hdGluZ1Bvc2l0aW9uQWx0QXhpcywgbGluazogQWxpZ25tZW50KTogQWxpZ25tZW50IHtcbiAgICBpZiAoYXhpcyA9PT0gRmxvYXRpbmdQb3NpdGlvbkFsdEF4aXMuSG9yaXpvbnRhbCkge1xuICAgICAgICByZXR1cm4geyBob3Jpem9udGFsOiBBbGlnbkhvcml6b250YWxPcHBvc2l0ZVtsaW5rLmhvcml6b250YWxdLCB2ZXJ0aWNhbDogbGluay52ZXJ0aWNhbCB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsgaG9yaXpvbnRhbDogbGluay5ob3Jpem9udGFsLCB2ZXJ0aWNhbDogQWxpZ25WZXJ0aWNhbE9wcG9zaXRlW2xpbmsudmVydGljYWxdIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdGluZ1Bvc2l0aW9uVG9TdHlsZShwb3M6IFJlYWRvbmx5PEZsb2F0aW5nUG9zaXRpb24+KTogUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPiB7XG4gICAgY29uc3QgY29udGVudFJlY3QgPSBwb3MuY29udGVudC5yZWN0XG4gICAgY29uc3QgcGxhY2VtZW50UmVjdCA9IHBvcy5wbGFjZW1lbnQucmVjdFxuICAgIC8vIGNvbnN0IHsgd2lkdGg6IG1heFdpZHRoLCBoZWlnaHQ6IG1heEhlaWdodCB9ID0gcG9zLnBsYWNlbWVudC5hcmVhXG4gICAgY29uc3Qgc3R5bGU6IFBhcnRpYWw8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gPSB7fVxuXG4gICAgaWYgKHBvcy5jb250ZW50LmxpbmsuaG9yaXpvbnRhbCA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHN0eWxlW1wicmlnaHRcIl0gPSBgJHtwbGFjZW1lbnRSZWN0LndpZHRoIC0gKGNvbnRlbnRSZWN0LnggKyBjb250ZW50UmVjdC53aWR0aCl9cHhgXG4gICAgICAgIHN0eWxlW1wibGVmdFwiXSA9IFwiYXV0b1wiXG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVbXCJsZWZ0XCJdID0gYCR7Y29udGVudFJlY3QueH1weGBcbiAgICAgICAgc3R5bGVbXCJyaWdodFwiXSA9IFwiYXV0b1wiXG4gICAgfVxuXG4gICAgaWYgKHBvcy5jb250ZW50LmxpbmsudmVydGljYWwgPT09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgc3R5bGVbXCJib3R0b21cIl0gPSBgJHtwbGFjZW1lbnRSZWN0LmhlaWdodCAtIChjb250ZW50UmVjdC55ICsgY29udGVudFJlY3QuaGVpZ2h0KX1weGBcbiAgICAgICAgc3R5bGVbXCJ0b3BcIl0gPSBcImF1dG9cIlxuICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlW1widG9wXCJdID0gYCR7Y29udGVudFJlY3QueX1weGBcbiAgICAgICAgc3R5bGVbXCJib3R0b21cIl0gPSBcImF1dG9cIlxuICAgIH1cblxuICAgIC8vIHN0eWxlW1wibWF4V2lkdGhcIl0gPSBgJHttYXhXaWR0aH1weGBcbiAgICAvLyBzdHlsZVtcIm1heEhlaWdodFwiXSA9IGAke21heEhlaWdodH1weGBcblxuICAgIHJldHVybiBzdHlsZVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBGbG9hdGluZ1Bvc2l0aW9uRGlyZWN0aW9uIHtcbiAgICBVcCA9IFwidXBcIixcbiAgICBEb3duID0gXCJkb3duXCIsXG4gICAgTGVmdCA9IFwibGVmdFwiLFxuICAgIFJpZ2h0ID0gXCJyaWdodFwiLFxuICAgIENlbnRlciA9IFwiY2VudGVyXCJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb2F0aW5nUG9zaXRpb25EaXJlY3Rpb24ocG9zOiBSZWFkb25seTxGbG9hdGluZ1Bvc2l0aW9uPik6IEZsb2F0aW5nUG9zaXRpb25EaXJlY3Rpb24ge1xuICAgIGNvbnN0IHsgeDogYXgsIHk6IGF5LCB3aWR0aDogYXcsIGhlaWdodDogYWggfSA9IHBvcy5hbmNob3IucmVjdFxuICAgIGNvbnN0IHsgeDogYngsIHk6IGJ5LCB3aWR0aDogYncsIGhlaWdodDogYmggfSA9IHBvcy5jb250ZW50LnJlY3RcbiAgICBjb25zdCBjb250ZW50TGluayA9IHBvcy5jb250ZW50LmxpbmtcbiAgICBjb25zdCBhbmNob3JMaW5rID0gcG9zLmFuY2hvci5saW5rXG5cbiAgICBpZiAoYW5jaG9yTGluay5ob3Jpem9udGFsID09PSBcImNlbnRlclwiICYmIGFuY2hvckxpbmsudmVydGljYWwgPT09IFwibWlkZGxlXCIpIHtcbiAgICAgICAgaWYgKGNvbnRlbnRMaW5rLmhvcml6b250YWwgPT09IFwiY2VudGVyXCIgJiYgY29udGVudExpbmsudmVydGljYWwgPT09IFwibWlkZGxlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBGbG9hdGluZ1Bvc2l0aW9uRGlyZWN0aW9uLkNlbnRlclxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3ggPSBwb3MuY29ubmVjdGlvbi54XG4gICAgICAgIGlmIChjeCA8PSBieCkge1xuICAgICAgICAgICAgcmV0dXJuIEZsb2F0aW5nUG9zaXRpb25EaXJlY3Rpb24uUmlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChjeCA+PSBieCArIGJ3KSB7XG4gICAgICAgICAgICByZXR1cm4gRmxvYXRpbmdQb3NpdGlvbkRpcmVjdGlvbi5MZWZ0XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aE92ZXJsYXBQeCA9IE1hdGgubWluKGF4ICsgYXcsIGJ4ICsgYncpIC0gTWF0aC5tYXgoYXgsIGJ4KVxuICAgIGNvbnN0IHdpZHRoT3ZlcmxhcFBlcmNlbnQgPSB3aWR0aE92ZXJsYXBQeCAvIE1hdGgubWF4KGF3LCBidylcbiAgICBjb25zdCBoZWlnaHRPdmVybGFwUHggPSBNYXRoLm1pbihheSArIGFoLCBieSArIGJoKSAtIE1hdGgubWF4KGF5LCBieSlcbiAgICBjb25zdCBoZWlnaHRPdmVybGFwUGVyY2VudCA9IGhlaWdodE92ZXJsYXBQeCAvIE1hdGgubWF4KGFoLCBiaClcblxuICAgIGlmICh3aWR0aE92ZXJsYXBQZXJjZW50ID49IGhlaWdodE92ZXJsYXBQZXJjZW50KSB7XG4gICAgICAgIGlmIChjb250ZW50TGluay52ZXJ0aWNhbCA9PT0gXCJib3R0b21cIikge1xuICAgICAgICAgICAgcmV0dXJuIEZsb2F0aW5nUG9zaXRpb25EaXJlY3Rpb24uVXBcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBGbG9hdGluZ1Bvc2l0aW9uRGlyZWN0aW9uLkRvd25cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY29udGVudExpbmsuaG9yaXpvbnRhbCA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gRmxvYXRpbmdQb3NpdGlvbkRpcmVjdGlvbi5MZWZ0XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRmxvYXRpbmdQb3NpdGlvbkRpcmVjdGlvbi5SaWdodFxuICAgIH1cbn1cbiJdfQ==
@@ -84,4 +84,7 @@ export function rectContract(rect, padding) {
84
84
  height: rect.height - normMargin.top.value - normMargin.bottom.value
85
85
  };
86
86
  }
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0eWxlL3NyYy91dGlsL3JlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQyxrQkFBa0IsRUFBaUIsTUFBTSxhQUFhLENBQUE7QUFDaEcsT0FBTyxFQUFjLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQWNwRCxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQVUsRUFBRSxNQUFzQjtJQUN6RCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM3QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQTtBQUNySCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFVLEVBQUUsVUFBMkI7SUFDakUsUUFBUSxVQUFVLEVBQUUsQ0FBQztRQUNqQixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssTUFBTTtZQUNQLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUVqQixLQUFLLFFBQVE7WUFDVCxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7UUFFbEMsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLE9BQU87WUFDUixPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQTtJQUNsQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsSUFBVSxFQUFFLFFBQXVCO0lBQzNELFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDZixLQUFLLEtBQUs7WUFDTixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUE7UUFFakIsS0FBSyxRQUFRO1lBQ1QsT0FBTyxJ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VSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLO1FBQ2xFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSztLQUN2RSxDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBVSxFQUFFLE9BQW1CO0lBQ3hELE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMxQyxPQUFPO1FBQ0gsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLO1FBQ2pDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSztRQUNoQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUs7UUFDbEUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLO0tBQ3ZFLENBQUE7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpZ25Ib3Jpem9udGFsLCBBbGlnbm1lbnRJbnB1dCwgYWxpZ25tZW50Tm9ybWFsaXplLCBBbGlnblZlcnRpY2FsIH0gZnJvbSBcIi4vYWxpZ25tZW50XCJcbmltcG9ydCB7IFNpZGVzSW5wdXQsIHNpZGVzTm9ybWFsaXplIH0gZnJvbSBcIi4vc2lkZXNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERpbWVuc2lvbiB7XG4gICAgd2lkdGg6IG51bWJlclxuICAgIGhlaWdodDogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb24ge1xuICAgIHg6IG51bWJlclxuICAgIHk6IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY3QgZXh0ZW5kcyBEaW1lbnNpb24sIFBvc2l0aW9uIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0T3JpZ2luKHJlY3Q6IFJlY3QsIG9yaWdpbjogQWxpZ25tZW50SW5wdXQpOiBQb3NpdGlvbiB7XG4gICAgY29uc3Qgb3JpZ2luTm9ybSA9IGFsaWdubWVudE5vcm1hbGl6ZShvcmlnaW4pXG4gICAgcmV0dXJuIHsgeDogcmVjdEhvcml6b250YWxPcmlnaW4ocmVjdCwgb3JpZ2luTm9ybS5ob3Jpem9udGFsKSwgeTogcmVjdFZlcnRpY2FsT3JpZ2luKHJlY3QsIG9yaWdpbk5vcm0udmVydGljYWwpIH1cbn1cblxuZnVuY3Rpb24gcmVjdEhvcml6b250YWxPcmlnaW4ocmVjdDogUmVjdCwgaG9yaXpvbnRhbDogQWxpZ25Ib3Jpem9udGFsKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKGhvcml6b250YWwpIHtcbiAgICAgICAgY2FzZSBcInN0YXJ0XCI6XG4gICAgICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICAgICAgICByZXR1cm4gcmVjdC54XG5cbiAgICAgICAgY2FzZSBcImNlbnRlclwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlY3QueCArIHJlY3Qud2lkdGggLyAyXG5cbiAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgICAgICAgIHJldHVybiByZWN0LnggKyByZWN0LndpZHRoXG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWN0VmVydGljYWxPcmlnaW4ocmVjdDogUmVjdCwgdmVydGljYWw6IEFsaWduVmVydGljYWwpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodmVydGljYWwpIHtcbiAgICAgICAgY2FzZSBcInRvcFwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlY3QueVxuXG4gICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcbiAgICAgICAgICAgIHJldHVybiByZWN0LnkgKyByZWN0LmhlaWdodCAvIDJcblxuICAgICAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICAgICAgICByZXR1cm4gcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0TW92ZU9yaWdpbihyZWN0OiBSZWN0IHwgRGltZW5zaW9uLCBvcmlnaW46IEFsaWdubWVudElucHV0LCBwb3NpdGlvbjogUG9zaXRpb24pOiBSZWN0IHtcbiAgICBjb25zdCBvcmlnaW5Ob3JtID0gYWxpZ25tZW50Tm9ybWFsaXplKG9yaWdpbilcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5yZWN0LFxuICAgICAgICB4OiByZWN0TW92ZUhvcml6b250YWwocmVjdCwgb3JpZ2luTm9ybS5ob3Jpem9udGFsLCBwb3NpdGlvbiksXG4gICAgICAgIHk6IHJlY3RNb3ZlVmVydGljYWwocmVjdCwgb3JpZ2luTm9ybS52ZXJ0aWNhbCwgcG9zaXRpb24pXG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWN0TW92ZUhvcml6b250YWwocmVjdDogRGltZW5zaW9uLCBob3Jpem9udGFsOiBBbGlnbkhvcml6b250YWwsIHBvc2l0aW9uOiBQb3NpdGlvbik6IG51bWJlciB7XG4gICAgc3dpdGNoIChob3Jpem9udGFsKSB7XG4gICAgICAgIGNhc2UgXCJzdGFydFwiOlxuICAgICAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uLnhcblxuICAgICAgICBjYXNlIFwiY2VudGVyXCI6XG4gICAgICAgICAgICByZXR1cm4gcG9zaXRpb24ueCAtIHJlY3Qud2lkdGggLyAyXG5cbiAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbi54IC0gcmVjdC53aWR0aFxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVjdE1vdmVWZXJ0aWNhbChyZWN0OiBEaW1lbnNpb24sIHZlcnRpY2FsOiBBbGlnblZlcnRpY2FsLCBwb3NpdGlvbjogUG9zaXRpb24pOiBudW1iZXIge1xuICAgIHN3aXRjaCAodmVydGljYWwpIHtcbiAgICAgICAgY2FzZSBcInRvcFwiOlxuICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uLnlcblxuICAgICAgICBjYXNlIFwibWlkZGxlXCI6XG4gICAgICAgICAgICByZXR1cm4gcG9zaXRpb24ueSAtIHJlY3QuaGVpZ2h0IC8gMlxuXG4gICAgICAgIGNhc2UgXCJib3R0b21cIjpcbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbi55IC0gcmVjdC5oZWlnaHRcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0Q29uc3RyYWludChyZWN0OiBSZWN0LCBjb25zdHJhaW50OiBSZWN0KTogUmVjdCB7XG4gICAgY29uc3QgeCA9IE1hdGgubWF4KHJlY3QueCwgY29uc3RyYWludC54KVxuICAgIGNvbnN0IHkgPSBNYXRoLm1heChyZWN0LnksIGNvbnN0cmFpbnQueSlcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiB4LFxuICAgICAgICB5OiB5LFxuICAgICAgICB3aWR0aDogTWF0aC5taW4oeCArIHJlY3Qud2lkdGgsIGNvbnN0cmFpbnQueCArIGNvbnN0cmFpbnQud2lkdGgpIC0geCxcbiAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbih5ICsgcmVjdC5oZWlnaHQsIGNvbnN0cmFpbnQueSArIGNvbnN0cmFpbnQuaGVpZ2h0KSAtIHlcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gcmVjdEV4cGFuZChyZWN0OiBSZWN0LCBtYXJnaW46IFNpZGVzSW5wdXQpOiBSZWN0IHtcbiAgICBjb25zdCBtYXJnaW5Ob3JtID0gc2lkZXNOb3JtYWxpemUobWFyZ2luKVxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJlY3QueCAtIG1hcmdpbk5vcm0ubGVmdC52YWx1ZSxcbiAgICAgICAgeTogcmVjdC55IC0gbWFyZ2luTm9ybS50b3AudmFsdWUsXG4gICAgICAgIHdpZHRoOiByZWN0LndpZHRoICsgbWFyZ2luTm9ybS5sZWZ0LnZhbHVlICsgbWFyZ2luTm9ybS5yaWdodC52YWx1ZSxcbiAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCArIG1hcmdpbk5vcm0udG9wLnZhbHVlICsgbWFyZ2luTm9ybS5ib3R0b20udmFsdWVcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0Q29udHJhY3QocmVjdDogUmVjdCwgcGFkZGluZzogU2lkZXNJbnB1dCk6IFJlY3Qge1xuICAgIGNvbnN0IG5vcm1NYXJnaW4gPSBzaWRlc05vcm1hbGl6ZShwYWRkaW5nKVxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJlY3QueCArIG5vcm1NYXJnaW4ubGVmdC52YWx1ZSxcbiAgICAgICAgeTogcmVjdC55ICsgbm9ybU1hcmdpbi50b3AudmFsdWUsXG4gICAgICAgIHdpZHRoOiByZWN0LndpZHRoIC0gbm9ybU1hcmdpbi5sZWZ0LnZhbHVlIC0gbm9ybU1hcmdpbi5yaWdodC52YWx1ZSxcbiAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCAtIG5vcm1NYXJnaW4udG9wLnZhbHVlIC0gbm9ybU1hcmdpbi5ib3R0b20udmFsdWVcbiAgICB9XG59XG4iXX0=
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=
@@ -3,7 +3,7 @@ import { inject, NgZone, Injectable } from '@angular/core';
3
3
  import { Observable, distinctUntilChanged, shareReplay, map, of, combineLatest } from 'rxjs';
4
4
  import { DOCUMENT } from '@angular/common';
5
5
  import { coerceElement, isPlainObject, __zone_symbol__, rawRequestAnimationFrame, rawCancelAnimationFrame, NumberWithUnit } from '@ngutil/common';
6
- import { isEqual } from 'lodash';
6
+ import { isEqual, clamp } from 'lodash';
7
7
 
8
8
  class MediaWatcher {
9
9
  #zone = inject(NgZone);
@@ -493,6 +493,9 @@ function rectContract(rect, padding) {
493
493
  height: rect.height - normMargin.top.value - normMargin.bottom.value
494
494
  };
495
495
  }
496
+ function rectContainsPoint(rect, point) {
497
+ return point.x >= rect.x && point.x < rect.x + rect.width && point.y >= rect.y && point.y < rect.y + rect.height;
498
+ }
496
499
 
497
500
  const ZERO_PADDING = sidesNormalize(0);
498
501
  const ZERO_CONNECTION = { x: 0, y: 0 };
@@ -508,11 +511,26 @@ function floatingPosition({ dims, options }) {
508
511
  rect: options.anchor.margin ? rectExpand(dims.anchor, options.anchor.margin) : dims.anchor,
509
512
  link: alignmentNormalize(options.anchor.link)
510
513
  };
514
+ const minWidth = dims.constraints?.minWidth || 0;
515
+ const minHeight = dims.constraints?.minHeight || 0;
516
+ const maxWidth = dims.constraints?.maxWidth || Infinity;
517
+ const maxHeight = dims.constraints?.maxHeight || Infinity;
511
518
  const content = {
512
519
  rect: { x: 0, y: 0, ...dims.content },
513
- link: alignmentNormalize(options.content.link)
520
+ link: alignmentNormalize(options.content.link),
521
+ constrained: {
522
+ width: clamp(dims.content.width, minWidth, maxWidth),
523
+ height: clamp(dims.content.height, minHeight, maxHeight)
524
+ }
525
+ };
526
+ const position = {
527
+ placement,
528
+ anchor,
529
+ content,
530
+ connection: ZERO_CONNECTION,
531
+ constrains: dims.constraints,
532
+ direction: "down" /* FloatingPositionDirection.Down */
514
533
  };
515
- const position = { placement, anchor, content, connection: ZERO_CONNECTION };
516
534
  const area = placementArea(position, anchor.link, content.link);
517
535
  setPlacement(position, area);
518
536
  if (options.horizontalAlt) {
@@ -521,6 +539,7 @@ function floatingPosition({ dims, options }) {
521
539
  if (options.verticalAlt) {
522
540
  applyAlts(position, "V" /* FloatingPositionAltAxis.Vertical */, options.verticalAlt);
523
541
  }
542
+ position.direction = floatingPositionDirection(position);
524
543
  return position;
525
544
  }
526
545
  function placementArea(pos, anchorLink, contentLink) {
@@ -658,7 +677,7 @@ function altStringToFns(input) {
658
677
  function none(pos, axis) { }
659
678
  function flip(pos, axis) {
660
679
  const wh = axis === "H" /* FloatingPositionAltAxis.Horizontal */ ? "width" : "height";
661
- if (pos.placement.area[wh] >= pos.content.rect[wh]) {
680
+ if (pos.placement.area[wh] >= pos.content.constrained[wh]) {
662
681
  return;
663
682
  }
664
683
  return greatest(pos, axis);
@@ -692,6 +711,7 @@ function oppositeLink(axis, link) {
692
711
  function floatingPositionToStyle(pos) {
693
712
  const contentRect = pos.content.rect;
694
713
  const placementRect = pos.placement.rect;
714
+ // const { width: maxWidth, height: maxHeight } = pos.placement.area
695
715
  const style = {};
696
716
  if (pos.content.link.horizontal === "right") {
697
717
  style["right"] = `${placementRect.width - (contentRect.x + contentRect.width)}px`;
@@ -709,12 +729,48 @@ function floatingPositionToStyle(pos) {
709
729
  style["top"] = `${contentRect.y}px`;
710
730
  style["bottom"] = "auto";
711
731
  }
732
+ // style["maxWidth"] = `${maxWidth}px`
733
+ // style["maxHeight"] = `${maxHeight}px`
712
734
  return style;
713
735
  }
736
+ function floatingPositionDirection(pos) {
737
+ const { x: ax, y: ay, width: aw, height: ah } = pos.anchor.rect;
738
+ const { x: bx, y: by, width: bw, height: bh } = pos.content.rect;
739
+ const contentLink = pos.content.link;
740
+ const anchorLink = pos.anchor.link;
741
+ if (anchorLink.horizontal === "center" && anchorLink.vertical === "middle") {
742
+ if (contentLink.horizontal === "center" && contentLink.vertical === "middle") {
743
+ return "center" /* FloatingPositionDirection.Center */;
744
+ }
745
+ const cx = pos.connection.x;
746
+ if (cx <= bx) {
747
+ return "right" /* FloatingPositionDirection.Right */;
748
+ }
749
+ else if (cx >= bx + bw) {
750
+ return "left" /* FloatingPositionDirection.Left */;
751
+ }
752
+ }
753
+ const widthOverlapPx = Math.min(ax + aw, bx + bw) - Math.max(ax, bx);
754
+ const widthOverlapPercent = widthOverlapPx / Math.max(aw, bw);
755
+ const heightOverlapPx = Math.min(ay + ah, by + bh) - Math.max(ay, by);
756
+ const heightOverlapPercent = heightOverlapPx / Math.max(ah, bh);
757
+ if (widthOverlapPercent >= heightOverlapPercent) {
758
+ if (contentLink.vertical === "bottom") {
759
+ return "up" /* FloatingPositionDirection.Up */;
760
+ }
761
+ return "down" /* FloatingPositionDirection.Down */;
762
+ }
763
+ else {
764
+ if (contentLink.horizontal === "right") {
765
+ return "left" /* FloatingPositionDirection.Left */;
766
+ }
767
+ return "right" /* FloatingPositionDirection.Right */;
768
+ }
769
+ }
714
770
 
715
771
  /**
716
772
  * Generated bundle index. Do not edit.
717
773
  */
718
774
 
719
- export { ColorSchemeService, DimensionWatcher, Duration, Ease, MediaWatcher, PositionWatcher, RectWatcher, alignmentNormalize, alignmentToTransformOrigin, floatingPosition, floatingPositionToStyle, inAnimation, inTransition, isAnimating, positionAltNormalize, rectConstraint, rectContract, rectExpand, rectMoveOrigin, rectOrigin, sidesNormalize };
775
+ export { ColorSchemeService, DimensionWatcher, Duration, Ease, MediaWatcher, PositionWatcher, RectWatcher, alignmentNormalize, alignmentToTransformOrigin, floatingPosition, floatingPositionDirection, floatingPositionToStyle, inAnimation, inTransition, isAnimating, positionAltNormalize, rectConstraint, rectContainsPoint, rectContract, rectExpand, rectMoveOrigin, rectOrigin, sidesNormalize };
720
776
  //# sourceMappingURL=ngutil-style.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngutil-style.mjs","sources":["../../../../packages/style/src/services/media-watcher.service.ts","../../../../packages/style/src/services/color-scheme.service.ts","../../../../packages/style/src/sass/animation/vars/index.ts","../../../../packages/style/src/services/dimension-watcher.service.ts","../../../../packages/style/src/services/position-watcher.service.ts","../../../../packages/style/src/services/rect-watcher.service.ts","../../../../packages/style/src/util/alignment.ts","../../../../packages/style/src/util/in-animation.ts","../../../../packages/style/src/util/sides.ts","../../../../packages/style/src/util/rect.ts","../../../../packages/style/src/util/floating-position.ts","../../../../packages/style/src/ngutil-style.ts"],"sourcesContent":["import { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, Observable, shareReplay, Subscriber } from \"rxjs\"\n\n@Injectable({ providedIn: \"root\" })\nexport class MediaWatcher {\n readonly #zone = inject(NgZone)\n #watches: { [key: string]: Observable<boolean> } = {}\n\n /**\n * svc.watch(\"(display-mode: standalone)\").subscribe(match => {})\n */\n watch(query: string): Observable<boolean> {\n let watcher = this.#watches[query]\n if (!watcher) {\n watcher = this.#newWatcher(query)\n this.#watches[query] = watcher\n }\n return watcher\n }\n\n #newWatcher(query: string): Observable<boolean> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<boolean>) => {\n const queryWatcher = window.matchMedia(query)\n const listener = (event: MediaQueryListEvent) => {\n sub.next(event.matches)\n }\n queryWatcher.addEventListener(\"change\", listener)\n sub.next(queryWatcher.matches)\n return () => {\n queryWatcher.removeEventListener(\"change\", listener)\n delete this.#watches[query]\n }\n }).pipe(distinctUntilChanged(), shareReplay(1))\n )\n }\n}\n","import { inject, Injectable } from \"@angular/core\"\n\nimport { map, Observable, shareReplay } from \"rxjs\"\n\nimport { MediaWatcher } from \"./media-watcher.service\"\n\n@Injectable({ providedIn: \"root\" })\nexport class ColorSchemeService {\n readonly #mq = inject(MediaWatcher)\n readonly isDark: Observable<boolean> = this.#mq.watch(\"(prefers-color-scheme: dark)\")\n readonly isLight = this.isDark.pipe(\n map(v => !v),\n shareReplay(1)\n )\n\n // TODO: set preferred color scheme (dark/light)\n}\n","/* eslint-disable */\n/* eslint-disable prettier/prettier */\n/* ! AUTO GENERATED DO NOT EDIT ! */\n\nexport class Ease {\n static readonly Deceleration = \"cubic-bezier(0, 0, 0.2, 1)\" as const\n static readonly Standard = \"cubic-bezier(0.4, 0, 0.2, 1)\" as const\n static readonly Acceleration = \"cubic-bezier(0.4, 0, 1, 1)\" as const\n static readonly Sharp = \"cubic-bezier(0.4, 0, 0.6, 1)\" as const\n /**\n * Reach nearly end position fast, and slowly move to final position\n */\n static readonly Emphasized = \"cubic-bezier(0.12, 0.9, 0.12, 0.9)\" as const\n}\n\nexport class Duration {\n static readonly Fast = \"200ms\" as const\n static readonly FastMs = 200 as const\n static readonly Medium = \"300ms\" as const\n static readonly MediumMs = 300 as const\n static readonly Slow = \"400ms\" as const\n static readonly SlowMs = 400 as const\n static readonly Snail = \"600ms\" as const\n static readonly SnailMs = 600 as const\n}\n","import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, Observable, shareReplay, Subscriber } from \"rxjs\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { Dimension } from \"../util/rect\"\n\nexport type WatchBox = ResizeObserverBoxOptions | \"scroll-box\"\nexport type Watches = Map<HTMLElement | Window, Observable<Dimension>>\n\n@Injectable({ providedIn: \"root\" })\nexport class DimensionWatcher {\n readonly #zone = inject(NgZone)\n readonly #document = inject(DOCUMENT)\n readonly #watches: { [key in WatchBox]?: Watches } = {}\n\n watch(element: ElementInput | Window, box: WatchBox): Observable<Dimension> {\n element = coerceElement(element)\n\n let watches = this.#watches[box]\n if (watches == null) {\n watches = new Map()\n this.#watches[box] = watches\n }\n\n let watcher = watches.get(element)\n if (watcher == null) {\n if (element instanceof Window) {\n watcher = this.#createWindowResizeWatcher()\n } else {\n if (box === \"scroll-box\") {\n watcher = this.#createScollWatcher(watches, element)\n } else {\n watcher = this.#createResizeWatcher(watches, element, box)\n }\n }\n\n watches.set(element, watcher)\n }\n\n return watcher\n }\n\n #createResizeWatcher(watches: Watches, el: HTMLElement, box: WatchBox): Observable<Dimension> {\n if (box !== \"border-box\") {\n throw new Error(`Currently not implemented box mode: ${box}`)\n }\n\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n const observer = new ResizeObserver(entries => {\n if (!this.#document.contains(el)) {\n return\n }\n\n for (const entry of entries) {\n if (entry.borderBoxSize) {\n sub.next({\n width: entry.borderBoxSize[0].inlineSize,\n height: entry.borderBoxSize[0].blockSize\n })\n } else {\n sub.next({\n width: el.offsetWidth,\n height: el.offsetHeight\n })\n }\n }\n })\n observer.observe(el, { box: box as ResizeObserverBoxOptions })\n\n return () => {\n observer.disconnect()\n watches.delete(el)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n\n #createScollWatcher(watches: Watches, el: HTMLElement): Observable<Dimension> {\n const borderBox = this.watch(el, \"border-box\")\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n let lastSw: number = NaN\n let lastSh: number = NaN\n\n const emit = () => {\n const sw = el.scrollWidth\n const sh = el.scrollHeight\n if (lastSw !== sw || lastSh !== sh) {\n lastSw = sw\n lastSh = sh\n sub.next({ width: lastSw, height: lastSh })\n }\n }\n\n const dimSum = borderBox.subscribe(emit)\n const mutation = new MutationObserver(emit)\n mutation.observe(el, {\n subtree: true,\n childList: true,\n attributes: true,\n characterData: true\n })\n emit()\n\n return () => {\n dimSum.unsubscribe()\n mutation.disconnect()\n watches.delete(el)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n\n #createWindowResizeWatcher(): Observable<Dimension> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n const onResize = () => {\n sub.next({\n width: window.innerWidth,\n height: window.innerHeight\n })\n }\n onResize()\n window.addEventListener(\"resize\", onResize)\n return () => {\n window.removeEventListener(\"resize\", onResize)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n}\n\nfunction dimensionIsEq(a: Dimension, b: Dimension) {\n return a && b && a.width === b.width && a.height === b.height\n}\n","import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, Observable, of, shareReplay, Subscriber } from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { Position } from \"../util/rect\"\n\n@Injectable({ providedIn: \"root\" })\nexport class PositionWatcher {\n readonly #zone = inject(NgZone)\n readonly #document = inject(DOCUMENT)\n readonly #watches: Map<HTMLElement, Observable<Position>> = new Map()\n\n watch(element: ElementInput | Window): Observable<Position> {\n if (element instanceof Window) {\n return of({ x: 0, y: 0 })\n }\n\n element = coerceElement(element)\n\n let watcher = this.#watches.get(element)\n if (watcher == null) {\n watcher = this.#createWatcher(element)\n this.#watches.set(element, watcher)\n }\n\n return watcher\n }\n\n #createWatcher(element: HTMLElement): Observable<Position> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((dest: Subscriber<Position>) => {\n let rafId: number | undefined = undefined\n const emit = () => {\n if (!this.#document.contains(element)) {\n return\n }\n\n const rect = element.getBoundingClientRect()\n dest.next({\n x: rect.x,\n y: rect.y\n })\n if (!dest.closed) {\n rafId = requestAnimationFrame(emit)\n }\n }\n emit()\n return () => {\n rafId && cancelAnimationFrame(rafId)\n }\n }).pipe(distinctUntilChanged(isEqual), shareReplay(1))\n )\n }\n}\n","import { inject, Injectable } from \"@angular/core\"\n\nimport { combineLatest, map, Observable, Subscriber } from \"rxjs\"\n\nimport { ElementInput } from \"@ngutil/common\"\n\nimport { Rect } from \"../util/rect\"\nimport { DimensionWatcher, WatchBox } from \"./dimension-watcher.service\"\nimport { PositionWatcher } from \"./position-watcher.service\"\n\n@Injectable({ providedIn: \"root\" })\nexport class RectWatcher {\n readonly #dimWatcher = inject(DimensionWatcher)\n readonly #posWatcher = inject(PositionWatcher)\n\n watch(element: ElementInput | Window, watchBox: WatchBox): Observable<Rect> {\n return new Observable((dest: Subscriber<Rect>) =>\n combineLatest({\n dim: this.#dimWatcher.watch(element, watchBox),\n pos: this.#posWatcher.watch(element)\n })\n .pipe(\n map(({ dim, pos }) => {\n return { ...dim, ...pos }\n })\n )\n .subscribe(dest)\n )\n }\n}\n","import { isPlainObject } from \"@ngutil/common\"\n\nconst HORIZONTAL = [\"start\", \"left\", \"center\", \"end\", \"right\"] as const\nexport type AlignHorizontal = (typeof HORIZONTAL)[number]\n\nexport const AlignHorizontalOpposite: Record<AlignHorizontal, AlignHorizontal> = {\n start: \"end\",\n left: \"right\",\n center: \"center\",\n end: \"start\",\n right: \"left\"\n}\n\nconst VERTICAL = [\"top\", \"middle\", \"bottom\"] as const\nexport type AlignVertical = (typeof VERTICAL)[number]\n\nexport const AlignVerticalOpposite: Record<AlignVertical, AlignVertical> = {\n top: \"bottom\",\n middle: \"middle\",\n bottom: \"top\"\n}\n\nexport type AlignmentInput =\n | `${AlignHorizontal} ${AlignVertical}`\n | `${AlignVertical} ${AlignHorizontal}`\n | AlignVertical\n | AlignHorizontal\n | Alignment\n\nexport interface Alignment {\n horizontal: AlignHorizontal\n vertical: AlignVertical\n}\n\nconst DEFAULT: Alignment = { horizontal: \"center\", vertical: \"middle\" }\n\nexport function alignmentNormalize(value?: AlignmentInput): Alignment {\n if (value == null) {\n return DEFAULT\n }\n\n if (isPlainObject(value)) {\n if (\"horizontal\" in value && \"vertical\" in value) {\n return value\n } else {\n throw new Error(`Invalid alignment: ${value}`)\n }\n }\n\n if (typeof value !== \"string\") {\n throw new Error(`Invalid alignment: ${value}`)\n }\n\n const entries = Array.from(new Set(value.split(/\\s+/g))) as [string, string]\n if (entries.length > 2) {\n throw new Error(`Cannot parse: ${value}`)\n }\n\n const horizontal = HORIZONTAL.find(v => entries[0] === v || entries[1] === v) || \"center\"\n const vertical = VERTICAL.find(v => entries[0] === v || entries[1] === v) || \"middle\"\n\n return { horizontal, vertical }\n}\n\nconst HorizontalOrigin: Record<AlignHorizontal, \"left\" | \"center\" | \"right\"> = {\n start: \"left\",\n left: \"left\",\n center: \"center\",\n right: \"right\",\n end: \"right\"\n}\n\nconst VerticalOrigin: Record<AlignVertical, \"top\" | \"center\" | \"bottom\"> = {\n top: \"top\",\n middle: \"center\",\n bottom: \"bottom\"\n}\n\nexport function alignmentToTransformOrigin(alignment: Alignment): string {\n return `${HorizontalOrigin[alignment.horizontal] || \"center\"} ${VerticalOrigin[alignment.vertical] || \"center\"}`\n}\n","import { combineLatest, distinctUntilChanged, map, Observable, Subscriber } from \"rxjs\"\n\nimport { __zone_symbol__, rawCancelAnimationFrame, rawRequestAnimationFrame } from \"@ngutil/common\"\n\nconst addEventListener = __zone_symbol__(\"addEventListener\")\nconst removeEventListener = __zone_symbol__(\"removeEventListener\")\n\nexport function inAnimation<T extends HTMLElement>(el: T, animations?: string[]) {\n return _in(\n el,\n \"animationName\",\n \"animationstart\",\n \"animationiteration\",\n \"animationend\",\n \"animationcancel\",\n animations\n )\n}\n\nexport function inTransition<T extends HTMLElement>(el: T, properties?: string[]) {\n return _in(el, \"propertyName\", \"transitionstart\", \"transitionrun\", \"transitionend\", \"transitioncancel\", properties)\n}\n\nexport function isAnimating<T extends HTMLElement>(el: T) {\n return combineLatest([inAnimation(el), inTransition(el)]).pipe(\n map(values => !!(values[0] || values[1])),\n distinctUntilChanged()\n )\n}\n\nfunction _in<T extends HTMLElement>(\n el: T,\n keyName: string,\n beginName: string,\n doingName: string,\n endName: string,\n cancelName: string,\n keys?: string[]\n) {\n return new Observable((dest: Subscriber<string[] | null>) => {\n const state: { [key: string]: number } = {}\n\n const start = (event: any) => {\n const key = event[keyName]\n if (keys && keys.length > 0 && !keys.includes(key)) {\n return\n }\n\n if (key in state) {\n state[key]++\n } else {\n state[key] = 1\n }\n dest.next(Object.keys(state))\n }\n\n const doing = (event: any) => {\n const key = event[keyName]\n if (keys && keys.length > 0 && !keys.includes(key)) {\n return\n }\n\n if (!(key in state)) {\n state[key] = 1\n dest.next(Object.keys(state))\n }\n }\n\n const end = (event: any) => {\n if (event[keyName] in state) {\n const key = event[keyName]\n state[key]--\n if (state[key] <= 0) {\n delete state[key]\n }\n }\n\n if (Object.keys(state).length === 0) {\n dest.next(null)\n }\n }\n\n el[addEventListener](beginName, start)\n el[addEventListener](doingName, doing)\n el[addEventListener](endName, end)\n el[addEventListener](cancelName, end)\n\n const raf = rawRequestAnimationFrame(() => {\n if (Object.keys(state).length === 0) {\n dest.next(null)\n }\n })\n\n return () => {\n rawCancelAnimationFrame(raf)\n el[removeEventListener](beginName, start)\n el[removeEventListener](doingName, doing)\n el[removeEventListener](endName, end)\n el[removeEventListener](cancelName, end)\n }\n }).pipe(distinctUntilChanged())\n}\n","import { isPlainObject, NumberWithUnit } from \"@ngutil/common\"\n\nexport interface Sides {\n top: NumberWithUnit\n right: NumberWithUnit\n bottom: NumberWithUnit\n left: NumberWithUnit\n}\n\nexport type SidesUnit = \"px\" | \"%\"\nexport type SidesNumber = `${number}${SidesUnit}` | number\nexport type SidesInputObj = { top?: SidesNumber; right?: SidesNumber; bottom?: SidesNumber; left?: SidesNumber }\nexport type SidesInput =\n | Sides\n | SidesNumber\n | SidesInputObj\n | `${SidesNumber} ${SidesNumber}`\n | `${SidesNumber} ${SidesNumber} ${SidesNumber}`\n | `${SidesNumber} ${SidesNumber} ${SidesNumber} ${SidesNumber}`\n\nexport function sidesNormalize(value: SidesInput): Sides {\n if (isPlainObject(value)) {\n return {\n top: NumberWithUnit.coerce(value.top || 0, \"px\"),\n right: NumberWithUnit.coerce(value.right || 0, \"px\"),\n bottom: NumberWithUnit.coerce(value.bottom || 0, \"px\"),\n left: NumberWithUnit.coerce(value.left || 0, \"px\")\n }\n } else if (typeof value === \"number\") {\n return sidesNormalize(`${value}px`)\n } else if (typeof value !== \"string\") {\n throw new Error(`Invalid sides: ${value}`)\n }\n\n const entries = value.split(/\\s+/g).map(v => NumberWithUnit.coerce(v, \"px\")) as [NumberWithUnit]\n\n if (entries.length < 0 || entries.length > 4) {\n throw new Error(`Cannot parse: ${value}`)\n }\n\n return compose(...entries)\n}\n\nfunction compose(\n top: NumberWithUnit,\n right: NumberWithUnit = top,\n bottom: NumberWithUnit = top,\n left: NumberWithUnit = right\n): Sides {\n return { top, right, bottom, left }\n}\n","import { AlignHorizontal, AlignmentInput, alignmentNormalize, AlignVertical } from \"./alignment\"\nimport { SidesInput, sidesNormalize } from \"./sides\"\n\nexport interface Dimension {\n width: number\n height: number\n}\n\nexport interface Position {\n x: number\n y: number\n}\n\nexport interface Rect extends Dimension, Position {}\n\nexport function rectOrigin(rect: Rect, origin: AlignmentInput): Position {\n const originNorm = alignmentNormalize(origin)\n return { x: rectHorizontalOrigin(rect, originNorm.horizontal), y: rectVerticalOrigin(rect, originNorm.vertical) }\n}\n\nfunction rectHorizontalOrigin(rect: Rect, horizontal: AlignHorizontal): number {\n switch (horizontal) {\n case \"start\":\n case \"left\":\n return rect.x\n\n case \"center\":\n return rect.x + rect.width / 2\n\n case \"end\":\n case \"right\":\n return rect.x + rect.width\n }\n}\n\nfunction rectVerticalOrigin(rect: Rect, vertical: AlignVertical): number {\n switch (vertical) {\n case \"top\":\n return rect.y\n\n case \"middle\":\n return rect.y + rect.height / 2\n\n case \"bottom\":\n return rect.y + rect.height\n }\n}\n\nexport function rectMoveOrigin(rect: Rect | Dimension, origin: AlignmentInput, position: Position): Rect {\n const originNorm = alignmentNormalize(origin)\n return {\n ...rect,\n x: rectMoveHorizontal(rect, originNorm.horizontal, position),\n y: rectMoveVertical(rect, originNorm.vertical, position)\n }\n}\n\nfunction rectMoveHorizontal(rect: Dimension, horizontal: AlignHorizontal, position: Position): number {\n switch (horizontal) {\n case \"start\":\n case \"left\":\n return position.x\n\n case \"center\":\n return position.x - rect.width / 2\n\n case \"end\":\n case \"right\":\n return position.x - rect.width\n }\n}\n\nfunction rectMoveVertical(rect: Dimension, vertical: AlignVertical, position: Position): number {\n switch (vertical) {\n case \"top\":\n return position.y\n\n case \"middle\":\n return position.y - rect.height / 2\n\n case \"bottom\":\n return position.y - rect.height\n }\n}\n\nexport function rectConstraint(rect: Rect, constraint: Rect): Rect {\n const x = Math.max(rect.x, constraint.x)\n const y = Math.max(rect.y, constraint.y)\n return {\n x: x,\n y: y,\n width: Math.min(x + rect.width, constraint.x + constraint.width) - x,\n height: Math.min(y + rect.height, constraint.y + constraint.height) - y\n }\n}\nexport function rectExpand(rect: Rect, margin: SidesInput): Rect {\n const marginNorm = sidesNormalize(margin)\n return {\n x: rect.x - marginNorm.left.value,\n y: rect.y - marginNorm.top.value,\n width: rect.width + marginNorm.left.value + marginNorm.right.value,\n height: rect.height + marginNorm.top.value + marginNorm.bottom.value\n }\n}\n\nexport function rectContract(rect: Rect, padding: SidesInput): Rect {\n const normMargin = sidesNormalize(padding)\n return {\n x: rect.x + normMargin.left.value,\n y: rect.y + normMargin.top.value,\n width: rect.width - normMargin.left.value - normMargin.right.value,\n height: rect.height - normMargin.top.value - normMargin.bottom.value\n }\n}\n","import {\n AlignHorizontalOpposite,\n Alignment,\n AlignmentInput,\n alignmentNormalize,\n AlignVerticalOpposite\n} from \"./alignment\"\n// import type { FloatingPositionOptionsNormalized } from \"./position\"\nimport { Dimension, Position, Rect, rectContract, rectExpand, rectMoveOrigin, rectOrigin } from \"./rect\"\nimport { Sides, SidesInput, sidesNormalize } from \"./sides\"\n\nexport interface FloatingPositionInput {\n dims: FloatingPositionDims\n options: FloatingPositionOptions\n}\n\nexport interface FloatingPositionDims {\n content: Dimension\n anchor: Rect\n placement: Rect\n}\n\nexport interface FloatingPositionOptions {\n content: FloatingPositionContentOptions\n anchor: FloatingPositionAnchorOptions\n placement: FloatingPositionPlacementOptions\n horizontalAlt?: FloatingPositionAltInput\n verticalAlt?: FloatingPositionAltInput\n}\n\nexport interface FloatingPositionContentOptions {\n link: AlignmentInput\n}\n\nexport interface FloatingPositionAnchorOptions {\n link: AlignmentInput\n margin?: SidesInput\n}\n\nexport interface FloatingPositionPlacementOptions {\n padding?: SidesInput\n}\n\nexport interface FloatingPosition {\n content: {\n rect: Position & Readonly<Dimension>\n link: Alignment\n }\n anchor: {\n readonly rect: Readonly<Rect>\n link: Alignment\n }\n placement: {\n readonly rect: Readonly<Rect>\n readonly padding: Readonly<Sides>\n readonly rectWithPadding: Readonly<Rect>\n area: Readonly<Rect>\n }\n connection: Position\n}\n\ninterface PlacementArea {\n anchorLink: Alignment\n contentLink: Alignment\n area: FloatingPosition[\"placement\"][\"area\"]\n connection: Position\n}\n\ntype FloatingPositionAltConst =\n | \"none\"\n | \"flip\"\n | \"shift\"\n | \"flip-shift\"\n | \"greatest\"\n | \"greatest-shift\"\n | \"smallest\"\n | \"smallest-shift\"\nexport type FloatingPositionAltInput = FloatingPositionAltConst | FloatingPositionAltFunc\nexport type FloatingPositionAltFunc = (pos: FloatingPosition, axis: FloatingPositionAltAxis) => void\nexport type FloatingPositionAltNorm = Array<FloatingPositionAltFunc>\n\nexport const enum FloatingPositionAltAxis {\n Horizontal = \"H\",\n Vertical = \"V\"\n}\n\nconst ZERO_PADDING = sidesNormalize(0)\nconst ZERO_CONNECTION = { x: 0, y: 0 }\n\nexport function floatingPosition({ dims, options }: FloatingPositionInput): FloatingPosition {\n const padding = options.placement.padding ? sidesNormalize(options.placement.padding) : ZERO_PADDING\n const placement: FloatingPosition[\"placement\"] = {\n rect: dims.placement,\n padding: padding,\n rectWithPadding: rectContract(dims.placement, padding),\n area: { ...dims.placement }\n }\n\n const anchor: FloatingPosition[\"anchor\"] = {\n rect: options.anchor.margin ? rectExpand(dims.anchor, options.anchor.margin) : dims.anchor,\n link: alignmentNormalize(options.anchor.link)\n }\n\n const content: FloatingPosition[\"content\"] = {\n rect: { x: 0, y: 0, ...dims.content },\n link: alignmentNormalize(options.content.link)\n }\n\n const position = { placement, anchor, content, connection: ZERO_CONNECTION }\n const area = placementArea(position, anchor.link, content.link)\n setPlacement(position, area)\n\n if (options.horizontalAlt) {\n applyAlts(position, FloatingPositionAltAxis.Horizontal, options.horizontalAlt)\n }\n\n if (options.verticalAlt) {\n applyAlts(position, FloatingPositionAltAxis.Vertical, options.verticalAlt)\n }\n\n return position\n}\n\nfunction placementArea(pos: FloatingPosition, anchorLink: Alignment, contentLink: Alignment): PlacementArea {\n const connection = rectOrigin(pos.anchor.rect, anchorLink)\n let { x, y } = connection\n const placement = pos.placement.rect\n const placementPad = pos.placement.padding\n let width = 0\n let height = 0\n\n switch (contentLink.horizontal) {\n case \"left\":\n case \"start\":\n width = placement.width - x\n break\n case \"center\":\n if (anchorLink.horizontal === \"center\") {\n width = placement.width\n x = placement.x\n } else {\n const leftSize = x - placementPad.left.value\n const rightSize = placement.width - x - placementPad.right.value\n const mw = Math.max(0, Math.min(leftSize, rightSize))\n width = mw * 2\n x -= mw\n }\n break\n case \"end\":\n case \"right\":\n width = x - placement.x\n x = placement.x\n break\n }\n\n switch (contentLink.vertical) {\n case \"top\":\n height = placement.height - y\n break\n case \"middle\":\n if (anchorLink.vertical === \"middle\") {\n height = placement.height\n y = placement.y\n } else {\n const topSize = y - placementPad.top.value\n const bottomSize = placement.height - y - placementPad.bottom.value\n const mh = Math.max(0, Math.min(topSize, bottomSize))\n height = mh * 2\n y -= mh\n }\n\n break\n case \"bottom\":\n height = y - placement.y\n y = placement.y\n break\n }\n\n const constraint = pos.placement.rectWithPadding\n const newX = Math.max(x, constraint.x)\n const newY = Math.max(y, constraint.y)\n const diffX = newX - x\n const diffY = newY - y\n\n const area = {\n x: newX,\n y: newY,\n width: Math.min(newX + width - diffX, constraint.x + constraint.width) - newX,\n height: Math.min(newY + height - diffY, constraint.y + constraint.height) - newY\n }\n\n return { area, contentLink, anchorLink, connection }\n}\n\nfunction setPlacement(position: FloatingPosition, { area, anchorLink, contentLink, connection }: PlacementArea): void {\n position.placement.area = area\n position.anchor.link = anchorLink\n position.content.link = contentLink\n\n const plannedContentRect = rectMoveOrigin(position.content.rect, contentLink, connection)\n position.connection = adjustConnection(area, plannedContentRect, connection)\n position.content.rect = rectMoveOrigin(position.content.rect, contentLink, connection)\n}\n\nfunction adjustConnection(\n placement: FloatingPosition[\"placement\"][\"area\"],\n content: FloatingPosition[\"content\"][\"rect\"],\n connection: FloatingPosition[\"connection\"]\n) {\n const x = Math.max(placement.x, content.x)\n const y = Math.max(placement.y, content.y)\n const leftDiff = x - content.x\n const topDiff = y - content.y\n const widthDiff = placement.x + placement.width - (x + content.width)\n const heightDiff = placement.y + placement.height - (y + content.height)\n\n const result = { ...connection }\n connection.x += leftDiff\n connection.y += topDiff\n\n if (widthDiff < 0) {\n connection.x += widthDiff\n }\n\n if (heightDiff < 0) {\n connection.y += heightDiff\n }\n return result\n}\n\nfunction applyAlts(pos: FloatingPosition, axis: FloatingPositionAltAxis, alts: FloatingPositionAltInput) {\n const norm = positionAltNormalize(alts)\n for (const alt of norm) {\n alt(pos, axis)\n }\n}\n\nexport function positionAltNormalize(\n input: FloatingPositionAltInput | FloatingPositionAltNorm\n): FloatingPositionAltNorm {\n if (Array.isArray(input)) {\n return input\n } else if (typeof input === \"function\") {\n return [input]\n } else if (typeof input === \"string\") {\n return altStringToFns(input)\n } else {\n throw new Error(`Invalid alt position: ${input}`)\n }\n}\n\nfunction altStringToFns(input: FloatingPositionAltConst): FloatingPositionAltNorm {\n switch (input) {\n case \"none\":\n return [none]\n case \"flip\":\n return [flip]\n case \"shift\":\n return [shift]\n case \"flip-shift\":\n return [flip, shift]\n case \"greatest\":\n return [greatest]\n case \"greatest-shift\":\n return [greatest, shift]\n case \"smallest\":\n return [smallest]\n case \"smallest-shift\":\n return [smallest, shift]\n }\n}\n\nfunction none(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {}\n\nfunction flip(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {\n const wh: \"width\" | \"height\" = axis === FloatingPositionAltAxis.Horizontal ? \"width\" : \"height\"\n if (pos.placement.area[wh] >= pos.content.rect[wh]) {\n return\n }\n return greatest(pos, axis)\n}\n\nfunction shift(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {}\n\nfunction greatest(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {\n _bySize(pos, axis, (a, b) => a >= b)\n}\n\nfunction smallest(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {\n _bySize(pos, axis, (a, b) => a <= b)\n}\n\nfunction _bySize(pos: FloatingPosition, axis: FloatingPositionAltAxis, cmp: (a: number, b: number) => boolean): void {\n const wh: \"width\" | \"height\" = axis === FloatingPositionAltAxis.Horizontal ? \"width\" : \"height\"\n\n const current = pos.placement.area[wh]\n const anchorLink = oppositeLink(axis, pos.anchor.link)\n const contentLink = oppositeLink(axis, pos.content.link)\n const oppositePlacement = placementArea(pos, anchorLink, contentLink)\n\n if (cmp(current, oppositePlacement.area[wh])) {\n return\n }\n\n setPlacement(pos, oppositePlacement)\n}\n\nfunction oppositeLink(axis: FloatingPositionAltAxis, link: Alignment): Alignment {\n if (axis === FloatingPositionAltAxis.Horizontal) {\n return { horizontal: AlignHorizontalOpposite[link.horizontal], vertical: link.vertical }\n } else {\n return { horizontal: link.horizontal, vertical: AlignVerticalOpposite[link.vertical] }\n }\n}\n\nexport function floatingPositionToStyle(pos: Readonly<FloatingPosition>): Partial<CSSStyleDeclaration> {\n const contentRect = pos.content.rect\n const placementRect = pos.placement.rect\n const style: Partial<CSSStyleDeclaration> = {}\n\n if (pos.content.link.horizontal === \"right\") {\n style[\"right\"] = `${placementRect.width - (contentRect.x + contentRect.width)}px`\n style[\"left\"] = \"auto\"\n } else {\n style[\"left\"] = `${contentRect.x}px`\n style[\"right\"] = \"auto\"\n }\n\n if (pos.content.link.vertical === \"bottom\") {\n style[\"bottom\"] = `${placementRect.height - (contentRect.y + contentRect.height)}px`\n style[\"top\"] = \"auto\"\n } else {\n style[\"top\"] = `${contentRect.y}px`\n style[\"bottom\"] = \"auto\"\n }\n\n return style\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngutil-style.mjs","sources":["../../../../packages/style/src/services/media-watcher.service.ts","../../../../packages/style/src/services/color-scheme.service.ts","../../../../packages/style/src/sass/animation/vars/index.ts","../../../../packages/style/src/services/dimension-watcher.service.ts","../../../../packages/style/src/services/position-watcher.service.ts","../../../../packages/style/src/services/rect-watcher.service.ts","../../../../packages/style/src/util/alignment.ts","../../../../packages/style/src/util/in-animation.ts","../../../../packages/style/src/util/sides.ts","../../../../packages/style/src/util/rect.ts","../../../../packages/style/src/util/floating-position.ts","../../../../packages/style/src/ngutil-style.ts"],"sourcesContent":["import { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, Observable, shareReplay, Subscriber } from \"rxjs\"\n\n@Injectable({ providedIn: \"root\" })\nexport class MediaWatcher {\n readonly #zone = inject(NgZone)\n #watches: { [key: string]: Observable<boolean> } = {}\n\n /**\n * svc.watch(\"(display-mode: standalone)\").subscribe(match => {})\n */\n watch(query: string): Observable<boolean> {\n let watcher = this.#watches[query]\n if (!watcher) {\n watcher = this.#newWatcher(query)\n this.#watches[query] = watcher\n }\n return watcher\n }\n\n #newWatcher(query: string): Observable<boolean> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<boolean>) => {\n const queryWatcher = window.matchMedia(query)\n const listener = (event: MediaQueryListEvent) => {\n sub.next(event.matches)\n }\n queryWatcher.addEventListener(\"change\", listener)\n sub.next(queryWatcher.matches)\n return () => {\n queryWatcher.removeEventListener(\"change\", listener)\n delete this.#watches[query]\n }\n }).pipe(distinctUntilChanged(), shareReplay(1))\n )\n }\n}\n","import { inject, Injectable } from \"@angular/core\"\n\nimport { map, Observable, shareReplay } from \"rxjs\"\n\nimport { MediaWatcher } from \"./media-watcher.service\"\n\n@Injectable({ providedIn: \"root\" })\nexport class ColorSchemeService {\n readonly #mq = inject(MediaWatcher)\n readonly isDark: Observable<boolean> = this.#mq.watch(\"(prefers-color-scheme: dark)\")\n readonly isLight = this.isDark.pipe(\n map(v => !v),\n shareReplay(1)\n )\n\n // TODO: set preferred color scheme (dark/light)\n}\n","/* eslint-disable */\n/* eslint-disable prettier/prettier */\n/* ! AUTO GENERATED DO NOT EDIT ! */\n\nexport class Ease {\n static readonly Deceleration = \"cubic-bezier(0, 0, 0.2, 1)\" as const\n static readonly Standard = \"cubic-bezier(0.4, 0, 0.2, 1)\" as const\n static readonly Acceleration = \"cubic-bezier(0.4, 0, 1, 1)\" as const\n static readonly Sharp = \"cubic-bezier(0.4, 0, 0.6, 1)\" as const\n /**\n * Reach nearly end position fast, and slowly move to final position\n */\n static readonly Emphasized = \"cubic-bezier(0.12, 0.9, 0.12, 0.9)\" as const\n}\n\nexport class Duration {\n static readonly Fast = \"200ms\" as const\n static readonly FastMs = 200 as const\n static readonly Medium = \"300ms\" as const\n static readonly MediumMs = 300 as const\n static readonly Slow = \"400ms\" as const\n static readonly SlowMs = 400 as const\n static readonly Snail = \"600ms\" as const\n static readonly SnailMs = 600 as const\n}\n","import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, Observable, shareReplay, Subscriber } from \"rxjs\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { Dimension } from \"../util/rect\"\n\nexport type WatchBox = ResizeObserverBoxOptions | \"scroll-box\"\nexport type Watches = Map<HTMLElement | Window, Observable<Dimension>>\n\n@Injectable({ providedIn: \"root\" })\nexport class DimensionWatcher {\n readonly #zone = inject(NgZone)\n readonly #document = inject(DOCUMENT)\n readonly #watches: { [key in WatchBox]?: Watches } = {}\n\n watch(element: ElementInput | Window, box: WatchBox): Observable<Dimension> {\n element = coerceElement(element)\n\n let watches = this.#watches[box]\n if (watches == null) {\n watches = new Map()\n this.#watches[box] = watches\n }\n\n let watcher = watches.get(element)\n if (watcher == null) {\n if (element instanceof Window) {\n watcher = this.#createWindowResizeWatcher()\n } else {\n if (box === \"scroll-box\") {\n watcher = this.#createScollWatcher(watches, element)\n } else {\n watcher = this.#createResizeWatcher(watches, element, box)\n }\n }\n\n watches.set(element, watcher)\n }\n\n return watcher\n }\n\n #createResizeWatcher(watches: Watches, el: HTMLElement, box: WatchBox): Observable<Dimension> {\n if (box !== \"border-box\") {\n throw new Error(`Currently not implemented box mode: ${box}`)\n }\n\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n const observer = new ResizeObserver(entries => {\n if (!this.#document.contains(el)) {\n return\n }\n\n for (const entry of entries) {\n if (entry.borderBoxSize) {\n sub.next({\n width: entry.borderBoxSize[0].inlineSize,\n height: entry.borderBoxSize[0].blockSize\n })\n } else {\n sub.next({\n width: el.offsetWidth,\n height: el.offsetHeight\n })\n }\n }\n })\n observer.observe(el, { box: box as ResizeObserverBoxOptions })\n\n return () => {\n observer.disconnect()\n watches.delete(el)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n\n #createScollWatcher(watches: Watches, el: HTMLElement): Observable<Dimension> {\n const borderBox = this.watch(el, \"border-box\")\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n let lastSw: number = NaN\n let lastSh: number = NaN\n\n const emit = () => {\n const sw = el.scrollWidth\n const sh = el.scrollHeight\n if (lastSw !== sw || lastSh !== sh) {\n lastSw = sw\n lastSh = sh\n sub.next({ width: lastSw, height: lastSh })\n }\n }\n\n const dimSum = borderBox.subscribe(emit)\n const mutation = new MutationObserver(emit)\n mutation.observe(el, {\n subtree: true,\n childList: true,\n attributes: true,\n characterData: true\n })\n emit()\n\n return () => {\n dimSum.unsubscribe()\n mutation.disconnect()\n watches.delete(el)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n\n #createWindowResizeWatcher(): Observable<Dimension> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n const onResize = () => {\n sub.next({\n width: window.innerWidth,\n height: window.innerHeight\n })\n }\n onResize()\n window.addEventListener(\"resize\", onResize)\n return () => {\n window.removeEventListener(\"resize\", onResize)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n}\n\nfunction dimensionIsEq(a: Dimension, b: Dimension) {\n return a && b && a.width === b.width && a.height === b.height\n}\n","import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, Observable, of, shareReplay, Subscriber } from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { Position } from \"../util/rect\"\n\n@Injectable({ providedIn: \"root\" })\nexport class PositionWatcher {\n readonly #zone = inject(NgZone)\n readonly #document = inject(DOCUMENT)\n readonly #watches: Map<HTMLElement, Observable<Position>> = new Map()\n\n watch(element: ElementInput | Window): Observable<Position> {\n if (element instanceof Window) {\n return of({ x: 0, y: 0 })\n }\n\n element = coerceElement(element)\n\n let watcher = this.#watches.get(element)\n if (watcher == null) {\n watcher = this.#createWatcher(element)\n this.#watches.set(element, watcher)\n }\n\n return watcher\n }\n\n #createWatcher(element: HTMLElement): Observable<Position> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((dest: Subscriber<Position>) => {\n let rafId: number | undefined = undefined\n const emit = () => {\n if (!this.#document.contains(element)) {\n return\n }\n\n const rect = element.getBoundingClientRect()\n dest.next({\n x: rect.x,\n y: rect.y\n })\n if (!dest.closed) {\n rafId = requestAnimationFrame(emit)\n }\n }\n emit()\n return () => {\n rafId && cancelAnimationFrame(rafId)\n }\n }).pipe(distinctUntilChanged(isEqual), shareReplay(1))\n )\n }\n}\n","import { inject, Injectable } from \"@angular/core\"\n\nimport { combineLatest, map, Observable, Subscriber } from \"rxjs\"\n\nimport { ElementInput } from \"@ngutil/common\"\n\nimport { Rect } from \"../util/rect\"\nimport { DimensionWatcher, WatchBox } from \"./dimension-watcher.service\"\nimport { PositionWatcher } from \"./position-watcher.service\"\n\n@Injectable({ providedIn: \"root\" })\nexport class RectWatcher {\n readonly #dimWatcher = inject(DimensionWatcher)\n readonly #posWatcher = inject(PositionWatcher)\n\n watch(element: ElementInput | Window, watchBox: WatchBox): Observable<Rect> {\n return new Observable((dest: Subscriber<Rect>) =>\n combineLatest({\n dim: this.#dimWatcher.watch(element, watchBox),\n pos: this.#posWatcher.watch(element)\n })\n .pipe(\n map(({ dim, pos }) => {\n return { ...dim, ...pos }\n })\n )\n .subscribe(dest)\n )\n }\n}\n","import { isPlainObject } from \"@ngutil/common\"\n\nconst HORIZONTAL = [\"start\", \"left\", \"center\", \"end\", \"right\"] as const\nexport type AlignHorizontal = (typeof HORIZONTAL)[number]\n\nexport const AlignHorizontalOpposite: Record<AlignHorizontal, AlignHorizontal> = {\n start: \"end\",\n left: \"right\",\n center: \"center\",\n end: \"start\",\n right: \"left\"\n}\n\nconst VERTICAL = [\"top\", \"middle\", \"bottom\"] as const\nexport type AlignVertical = (typeof VERTICAL)[number]\n\nexport const AlignVerticalOpposite: Record<AlignVertical, AlignVertical> = {\n top: \"bottom\",\n middle: \"middle\",\n bottom: \"top\"\n}\n\nexport type AlignmentInput =\n | `${AlignHorizontal} ${AlignVertical}`\n | `${AlignVertical} ${AlignHorizontal}`\n | AlignVertical\n | AlignHorizontal\n | Alignment\n\nexport interface Alignment {\n horizontal: AlignHorizontal\n vertical: AlignVertical\n}\n\nconst DEFAULT: Alignment = { horizontal: \"center\", vertical: \"middle\" }\n\nexport function alignmentNormalize(value?: AlignmentInput): Alignment {\n if (value == null) {\n return DEFAULT\n }\n\n if (isPlainObject(value)) {\n if (\"horizontal\" in value && \"vertical\" in value) {\n return value\n } else {\n throw new Error(`Invalid alignment: ${value}`)\n }\n }\n\n if (typeof value !== \"string\") {\n throw new Error(`Invalid alignment: ${value}`)\n }\n\n const entries = Array.from(new Set(value.split(/\\s+/g))) as [string, string]\n if (entries.length > 2) {\n throw new Error(`Cannot parse: ${value}`)\n }\n\n const horizontal = HORIZONTAL.find(v => entries[0] === v || entries[1] === v) || \"center\"\n const vertical = VERTICAL.find(v => entries[0] === v || entries[1] === v) || \"middle\"\n\n return { horizontal, vertical }\n}\n\nconst HorizontalOrigin: Record<AlignHorizontal, \"left\" | \"center\" | \"right\"> = {\n start: \"left\",\n left: \"left\",\n center: \"center\",\n right: \"right\",\n end: \"right\"\n}\n\nconst VerticalOrigin: Record<AlignVertical, \"top\" | \"center\" | \"bottom\"> = {\n top: \"top\",\n middle: \"center\",\n bottom: \"bottom\"\n}\n\nexport function alignmentToTransformOrigin(alignment: Alignment): string {\n return `${HorizontalOrigin[alignment.horizontal] || \"center\"} ${VerticalOrigin[alignment.vertical] || \"center\"}`\n}\n","import { combineLatest, distinctUntilChanged, map, Observable, Subscriber } from \"rxjs\"\n\nimport { __zone_symbol__, rawCancelAnimationFrame, rawRequestAnimationFrame } from \"@ngutil/common\"\n\nconst addEventListener = __zone_symbol__(\"addEventListener\")\nconst removeEventListener = __zone_symbol__(\"removeEventListener\")\n\nexport function inAnimation<T extends HTMLElement>(el: T, animations?: string[]) {\n return _in(\n el,\n \"animationName\",\n \"animationstart\",\n \"animationiteration\",\n \"animationend\",\n \"animationcancel\",\n animations\n )\n}\n\nexport function inTransition<T extends HTMLElement>(el: T, properties?: string[]) {\n return _in(el, \"propertyName\", \"transitionstart\", \"transitionrun\", \"transitionend\", \"transitioncancel\", properties)\n}\n\nexport function isAnimating<T extends HTMLElement>(el: T) {\n return combineLatest([inAnimation(el), inTransition(el)]).pipe(\n map(values => !!(values[0] || values[1])),\n distinctUntilChanged()\n )\n}\n\nfunction _in<T extends HTMLElement>(\n el: T,\n keyName: string,\n beginName: string,\n doingName: string,\n endName: string,\n cancelName: string,\n keys?: string[]\n) {\n return new Observable((dest: Subscriber<string[] | null>) => {\n const state: { [key: string]: number } = {}\n\n const start = (event: any) => {\n const key = event[keyName]\n if (keys && keys.length > 0 && !keys.includes(key)) {\n return\n }\n\n if (key in state) {\n state[key]++\n } else {\n state[key] = 1\n }\n dest.next(Object.keys(state))\n }\n\n const doing = (event: any) => {\n const key = event[keyName]\n if (keys && keys.length > 0 && !keys.includes(key)) {\n return\n }\n\n if (!(key in state)) {\n state[key] = 1\n dest.next(Object.keys(state))\n }\n }\n\n const end = (event: any) => {\n if (event[keyName] in state) {\n const key = event[keyName]\n state[key]--\n if (state[key] <= 0) {\n delete state[key]\n }\n }\n\n if (Object.keys(state).length === 0) {\n dest.next(null)\n }\n }\n\n el[addEventListener](beginName, start)\n el[addEventListener](doingName, doing)\n el[addEventListener](endName, end)\n el[addEventListener](cancelName, end)\n\n const raf = rawRequestAnimationFrame(() => {\n if (Object.keys(state).length === 0) {\n dest.next(null)\n }\n })\n\n return () => {\n rawCancelAnimationFrame(raf)\n el[removeEventListener](beginName, start)\n el[removeEventListener](doingName, doing)\n el[removeEventListener](endName, end)\n el[removeEventListener](cancelName, end)\n }\n }).pipe(distinctUntilChanged())\n}\n","import { isPlainObject, NumberWithUnit } from \"@ngutil/common\"\n\nexport interface Sides {\n top: NumberWithUnit\n right: NumberWithUnit\n bottom: NumberWithUnit\n left: NumberWithUnit\n}\n\nexport type SidesUnit = \"px\" | \"%\"\nexport type SidesNumber = `${number}${SidesUnit}` | number\nexport type SidesInputObj = { top?: SidesNumber; right?: SidesNumber; bottom?: SidesNumber; left?: SidesNumber }\nexport type SidesInput =\n | Sides\n | SidesNumber\n | SidesInputObj\n | `${SidesNumber} ${SidesNumber}`\n | `${SidesNumber} ${SidesNumber} ${SidesNumber}`\n | `${SidesNumber} ${SidesNumber} ${SidesNumber} ${SidesNumber}`\n\nexport function sidesNormalize(value: SidesInput): Sides {\n if (isPlainObject(value)) {\n return {\n top: NumberWithUnit.coerce(value.top || 0, \"px\"),\n right: NumberWithUnit.coerce(value.right || 0, \"px\"),\n bottom: NumberWithUnit.coerce(value.bottom || 0, \"px\"),\n left: NumberWithUnit.coerce(value.left || 0, \"px\")\n }\n } else if (typeof value === \"number\") {\n return sidesNormalize(`${value}px`)\n } else if (typeof value !== \"string\") {\n throw new Error(`Invalid sides: ${value}`)\n }\n\n const entries = value.split(/\\s+/g).map(v => NumberWithUnit.coerce(v, \"px\")) as [NumberWithUnit]\n\n if (entries.length < 0 || entries.length > 4) {\n throw new Error(`Cannot parse: ${value}`)\n }\n\n return compose(...entries)\n}\n\nfunction compose(\n top: NumberWithUnit,\n right: NumberWithUnit = top,\n bottom: NumberWithUnit = top,\n left: NumberWithUnit = right\n): Sides {\n return { top, right, bottom, left }\n}\n","import { AlignHorizontal, AlignmentInput, alignmentNormalize, AlignVertical } from \"./alignment\"\nimport { SidesInput, sidesNormalize } from \"./sides\"\n\nexport interface Dimension {\n width: number\n height: number\n}\n\nexport interface Position {\n x: number\n y: number\n}\n\nexport interface Rect extends Dimension, Position {}\n\nexport function rectOrigin(rect: Rect, origin: AlignmentInput): Position {\n const originNorm = alignmentNormalize(origin)\n return { x: rectHorizontalOrigin(rect, originNorm.horizontal), y: rectVerticalOrigin(rect, originNorm.vertical) }\n}\n\nfunction rectHorizontalOrigin(rect: Rect, horizontal: AlignHorizontal): number {\n switch (horizontal) {\n case \"start\":\n case \"left\":\n return rect.x\n\n case \"center\":\n return rect.x + rect.width / 2\n\n case \"end\":\n case \"right\":\n return rect.x + rect.width\n }\n}\n\nfunction rectVerticalOrigin(rect: Rect, vertical: AlignVertical): number {\n switch (vertical) {\n case \"top\":\n return rect.y\n\n case \"middle\":\n return rect.y + rect.height / 2\n\n case \"bottom\":\n return rect.y + rect.height\n }\n}\n\nexport function rectMoveOrigin(rect: Rect | Dimension, origin: AlignmentInput, position: Position): Rect {\n const originNorm = alignmentNormalize(origin)\n return {\n ...rect,\n x: rectMoveHorizontal(rect, originNorm.horizontal, position),\n y: rectMoveVertical(rect, originNorm.vertical, position)\n }\n}\n\nfunction rectMoveHorizontal(rect: Dimension, horizontal: AlignHorizontal, position: Position): number {\n switch (horizontal) {\n case \"start\":\n case \"left\":\n return position.x\n\n case \"center\":\n return position.x - rect.width / 2\n\n case \"end\":\n case \"right\":\n return position.x - rect.width\n }\n}\n\nfunction rectMoveVertical(rect: Dimension, vertical: AlignVertical, position: Position): number {\n switch (vertical) {\n case \"top\":\n return position.y\n\n case \"middle\":\n return position.y - rect.height / 2\n\n case \"bottom\":\n return position.y - rect.height\n }\n}\n\nexport function rectConstraint(rect: Rect, constraint: Rect): Rect {\n const x = Math.max(rect.x, constraint.x)\n const y = Math.max(rect.y, constraint.y)\n return {\n x: x,\n y: y,\n width: Math.min(x + rect.width, constraint.x + constraint.width) - x,\n height: Math.min(y + rect.height, constraint.y + constraint.height) - y\n }\n}\nexport function rectExpand(rect: Rect, margin: SidesInput): Rect {\n const marginNorm = sidesNormalize(margin)\n return {\n x: rect.x - marginNorm.left.value,\n y: rect.y - marginNorm.top.value,\n width: rect.width + marginNorm.left.value + marginNorm.right.value,\n height: rect.height + marginNorm.top.value + marginNorm.bottom.value\n }\n}\n\nexport function rectContract(rect: Rect, padding: SidesInput): Rect {\n const normMargin = sidesNormalize(padding)\n return {\n x: rect.x + normMargin.left.value,\n y: rect.y + normMargin.top.value,\n width: rect.width - normMargin.left.value - normMargin.right.value,\n height: rect.height - normMargin.top.value - normMargin.bottom.value\n }\n}\n\nexport function rectContainsPoint(rect: Rect, point: Position): boolean {\n return point.x >= rect.x && point.x < rect.x + rect.width && point.y >= rect.y && point.y < rect.y + rect.height\n}\n","import { clamp } from \"lodash\"\n\nimport {\n AlignHorizontalOpposite,\n Alignment,\n AlignmentInput,\n alignmentNormalize,\n AlignVerticalOpposite\n} from \"./alignment\"\n// import type { FloatingPositionOptionsNormalized } from \"./position\"\nimport { Dimension, Position, Rect, rectContract, rectExpand, rectMoveOrigin, rectOrigin } from \"./rect\"\nimport { Sides, SidesInput, sidesNormalize } from \"./sides\"\n\nexport interface FloatingPositionInput {\n dims: FloatingPositionDims\n options: FloatingPositionOptions\n}\n\nexport interface FloatingPositionDims {\n content: Dimension\n anchor: Rect\n placement: Rect\n constraints?: FloatingPositionConstraintsInput\n}\n\nexport interface FloatingPositionOptions {\n content: FloatingPositionContentOptions\n anchor: FloatingPositionAnchorOptions\n placement: FloatingPositionPlacementOptions\n horizontalAlt?: FloatingPositionAltInput\n verticalAlt?: FloatingPositionAltInput\n}\n\nexport interface FloatingPositionContentOptions {\n link: AlignmentInput\n}\n\nexport interface FloatingPositionConstraintsInput {\n minWidth?: number\n maxWidth?: number\n minHeight?: number\n maxHeight?: number\n}\n\nexport interface FloatingPositionAnchorOptions {\n link: AlignmentInput\n margin?: SidesInput\n}\n\nexport interface FloatingPositionPlacementOptions {\n padding?: SidesInput\n}\n\nexport interface FloatingPosition {\n content: {\n rect: Position & Readonly<Dimension>\n link: Alignment\n readonly constrained: Readonly<Dimension>\n }\n anchor: {\n readonly rect: Readonly<Rect>\n link: Alignment\n }\n placement: {\n readonly rect: Readonly<Rect>\n readonly padding: Readonly<Sides>\n readonly rectWithPadding: Readonly<Rect>\n area: Readonly<Rect>\n }\n connection: Position\n direction: FloatingPositionDirection\n constraints?: FloatingPositionConstraintsInput\n}\n\ninterface PlacementArea {\n anchorLink: Alignment\n contentLink: Alignment\n area: FloatingPosition[\"placement\"][\"area\"]\n connection: Position\n}\n\ntype FloatingPositionAltConst =\n | \"none\"\n | \"flip\"\n | \"shift\"\n | \"flip-shift\"\n | \"greatest\"\n | \"greatest-shift\"\n | \"smallest\"\n | \"smallest-shift\"\nexport type FloatingPositionAltInput = FloatingPositionAltConst | FloatingPositionAltFunc\nexport type FloatingPositionAltFunc = (pos: FloatingPosition, axis: FloatingPositionAltAxis) => void\nexport type FloatingPositionAltNorm = Array<FloatingPositionAltFunc>\n\nexport const enum FloatingPositionAltAxis {\n Horizontal = \"H\",\n Vertical = \"V\"\n}\n\nconst ZERO_PADDING = sidesNormalize(0)\nconst ZERO_CONNECTION = { x: 0, y: 0 }\n\nexport function floatingPosition({ dims, options }: FloatingPositionInput): FloatingPosition {\n const padding = options.placement.padding ? sidesNormalize(options.placement.padding) : ZERO_PADDING\n const placement: FloatingPosition[\"placement\"] = {\n rect: dims.placement,\n padding: padding,\n rectWithPadding: rectContract(dims.placement, padding),\n area: { ...dims.placement }\n }\n\n const anchor: FloatingPosition[\"anchor\"] = {\n rect: options.anchor.margin ? rectExpand(dims.anchor, options.anchor.margin) : dims.anchor,\n link: alignmentNormalize(options.anchor.link)\n }\n\n const minWidth = dims.constraints?.minWidth || 0\n const minHeight = dims.constraints?.minHeight || 0\n const maxWidth = dims.constraints?.maxWidth || Infinity\n const maxHeight = dims.constraints?.maxHeight || Infinity\n const content: FloatingPosition[\"content\"] = {\n rect: { x: 0, y: 0, ...dims.content },\n link: alignmentNormalize(options.content.link),\n constrained: {\n width: clamp(dims.content.width, minWidth, maxWidth),\n height: clamp(dims.content.height, minHeight, maxHeight)\n }\n }\n\n const position = {\n placement,\n anchor,\n content,\n connection: ZERO_CONNECTION,\n constrains: dims.constraints,\n direction: FloatingPositionDirection.Down\n }\n const area = placementArea(position, anchor.link, content.link)\n setPlacement(position, area)\n\n if (options.horizontalAlt) {\n applyAlts(position, FloatingPositionAltAxis.Horizontal, options.horizontalAlt)\n }\n\n if (options.verticalAlt) {\n applyAlts(position, FloatingPositionAltAxis.Vertical, options.verticalAlt)\n }\n\n position.direction = floatingPositionDirection(position)\n return position\n}\n\nfunction placementArea(pos: FloatingPosition, anchorLink: Alignment, contentLink: Alignment): PlacementArea {\n const connection = rectOrigin(pos.anchor.rect, anchorLink)\n let { x, y } = connection\n const placement = pos.placement.rect\n const placementPad = pos.placement.padding\n let width = 0\n let height = 0\n\n switch (contentLink.horizontal) {\n case \"left\":\n case \"start\":\n width = placement.width - x\n break\n case \"center\":\n if (anchorLink.horizontal === \"center\") {\n width = placement.width\n x = placement.x\n } else {\n const leftSize = x - placementPad.left.value\n const rightSize = placement.width - x - placementPad.right.value\n const mw = Math.max(0, Math.min(leftSize, rightSize))\n width = mw * 2\n x -= mw\n }\n break\n case \"end\":\n case \"right\":\n width = x - placement.x\n x = placement.x\n break\n }\n\n switch (contentLink.vertical) {\n case \"top\":\n height = placement.height - y\n break\n case \"middle\":\n if (anchorLink.vertical === \"middle\") {\n height = placement.height\n y = placement.y\n } else {\n const topSize = y - placementPad.top.value\n const bottomSize = placement.height - y - placementPad.bottom.value\n const mh = Math.max(0, Math.min(topSize, bottomSize))\n height = mh * 2\n y -= mh\n }\n\n break\n case \"bottom\":\n height = y - placement.y\n y = placement.y\n break\n }\n\n const constraint = pos.placement.rectWithPadding\n const newX = Math.max(x, constraint.x)\n const newY = Math.max(y, constraint.y)\n const diffX = newX - x\n const diffY = newY - y\n\n const area = {\n x: newX,\n y: newY,\n width: Math.min(newX + width - diffX, constraint.x + constraint.width) - newX,\n height: Math.min(newY + height - diffY, constraint.y + constraint.height) - newY\n }\n\n return { area, contentLink, anchorLink, connection }\n}\n\nfunction setPlacement(position: FloatingPosition, { area, anchorLink, contentLink, connection }: PlacementArea): void {\n position.placement.area = area\n position.anchor.link = anchorLink\n position.content.link = contentLink\n\n const plannedContentRect = rectMoveOrigin(position.content.rect, contentLink, connection)\n position.connection = adjustConnection(area, plannedContentRect, connection)\n position.content.rect = rectMoveOrigin(position.content.rect, contentLink, connection)\n}\n\nfunction adjustConnection(\n placement: FloatingPosition[\"placement\"][\"area\"],\n content: FloatingPosition[\"content\"][\"rect\"],\n connection: FloatingPosition[\"connection\"]\n) {\n const x = Math.max(placement.x, content.x)\n const y = Math.max(placement.y, content.y)\n const leftDiff = x - content.x\n const topDiff = y - content.y\n const widthDiff = placement.x + placement.width - (x + content.width)\n const heightDiff = placement.y + placement.height - (y + content.height)\n\n const result = { ...connection }\n connection.x += leftDiff\n connection.y += topDiff\n\n if (widthDiff < 0) {\n connection.x += widthDiff\n }\n\n if (heightDiff < 0) {\n connection.y += heightDiff\n }\n return result\n}\n\nfunction applyAlts(pos: FloatingPosition, axis: FloatingPositionAltAxis, alts: FloatingPositionAltInput) {\n const norm = positionAltNormalize(alts)\n for (const alt of norm) {\n alt(pos, axis)\n }\n}\n\nexport function positionAltNormalize(\n input: FloatingPositionAltInput | FloatingPositionAltNorm\n): FloatingPositionAltNorm {\n if (Array.isArray(input)) {\n return input\n } else if (typeof input === \"function\") {\n return [input]\n } else if (typeof input === \"string\") {\n return altStringToFns(input)\n } else {\n throw new Error(`Invalid alt position: ${input}`)\n }\n}\n\nfunction altStringToFns(input: FloatingPositionAltConst): FloatingPositionAltNorm {\n switch (input) {\n case \"none\":\n return [none]\n case \"flip\":\n return [flip]\n case \"shift\":\n return [shift]\n case \"flip-shift\":\n return [flip, shift]\n case \"greatest\":\n return [greatest]\n case \"greatest-shift\":\n return [greatest, shift]\n case \"smallest\":\n return [smallest]\n case \"smallest-shift\":\n return [smallest, shift]\n }\n}\n\nfunction none(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {}\n\nfunction flip(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {\n const wh: \"width\" | \"height\" = axis === FloatingPositionAltAxis.Horizontal ? \"width\" : \"height\"\n if (pos.placement.area[wh] >= pos.content.constrained[wh]) {\n return\n }\n return greatest(pos, axis)\n}\n\nfunction shift(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {}\n\nfunction greatest(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {\n _bySize(pos, axis, (a, b) => a >= b)\n}\n\nfunction smallest(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {\n _bySize(pos, axis, (a, b) => a <= b)\n}\n\nfunction _bySize(pos: FloatingPosition, axis: FloatingPositionAltAxis, cmp: (a: number, b: number) => boolean): void {\n const wh: \"width\" | \"height\" = axis === FloatingPositionAltAxis.Horizontal ? \"width\" : \"height\"\n\n const current = pos.placement.area[wh]\n const anchorLink = oppositeLink(axis, pos.anchor.link)\n const contentLink = oppositeLink(axis, pos.content.link)\n const oppositePlacement = placementArea(pos, anchorLink, contentLink)\n\n if (cmp(current, oppositePlacement.area[wh])) {\n return\n }\n\n setPlacement(pos, oppositePlacement)\n}\n\nfunction oppositeLink(axis: FloatingPositionAltAxis, link: Alignment): Alignment {\n if (axis === FloatingPositionAltAxis.Horizontal) {\n return { horizontal: AlignHorizontalOpposite[link.horizontal], vertical: link.vertical }\n } else {\n return { horizontal: link.horizontal, vertical: AlignVerticalOpposite[link.vertical] }\n }\n}\n\nexport function floatingPositionToStyle(pos: Readonly<FloatingPosition>): Partial<CSSStyleDeclaration> {\n const contentRect = pos.content.rect\n const placementRect = pos.placement.rect\n // const { width: maxWidth, height: maxHeight } = pos.placement.area\n const style: Partial<CSSStyleDeclaration> = {}\n\n if (pos.content.link.horizontal === \"right\") {\n style[\"right\"] = `${placementRect.width - (contentRect.x + contentRect.width)}px`\n style[\"left\"] = \"auto\"\n } else {\n style[\"left\"] = `${contentRect.x}px`\n style[\"right\"] = \"auto\"\n }\n\n if (pos.content.link.vertical === \"bottom\") {\n style[\"bottom\"] = `${placementRect.height - (contentRect.y + contentRect.height)}px`\n style[\"top\"] = \"auto\"\n } else {\n style[\"top\"] = `${contentRect.y}px`\n style[\"bottom\"] = \"auto\"\n }\n\n // style[\"maxWidth\"] = `${maxWidth}px`\n // style[\"maxHeight\"] = `${maxHeight}px`\n\n return style\n}\n\nexport const enum FloatingPositionDirection {\n Up = \"up\",\n Down = \"down\",\n Left = \"left\",\n Right = \"right\",\n Center = \"center\"\n}\n\nexport function floatingPositionDirection(pos: Readonly<FloatingPosition>): FloatingPositionDirection {\n const { x: ax, y: ay, width: aw, height: ah } = pos.anchor.rect\n const { x: bx, y: by, width: bw, height: bh } = pos.content.rect\n const contentLink = pos.content.link\n const anchorLink = pos.anchor.link\n\n if (anchorLink.horizontal === \"center\" && anchorLink.vertical === \"middle\") {\n if (contentLink.horizontal === \"center\" && contentLink.vertical === \"middle\") {\n return FloatingPositionDirection.Center\n }\n\n const cx = pos.connection.x\n if (cx <= bx) {\n return FloatingPositionDirection.Right\n } else if (cx >= bx + bw) {\n return FloatingPositionDirection.Left\n }\n }\n\n const widthOverlapPx = Math.min(ax + aw, bx + bw) - Math.max(ax, bx)\n const widthOverlapPercent = widthOverlapPx / Math.max(aw, bw)\n const heightOverlapPx = Math.min(ay + ah, by + bh) - Math.max(ay, by)\n const heightOverlapPercent = heightOverlapPx / Math.max(ah, bh)\n\n if (widthOverlapPercent >= heightOverlapPercent) {\n if (contentLink.vertical === \"bottom\") {\n return FloatingPositionDirection.Up\n }\n\n return FloatingPositionDirection.Down\n } else {\n if (contentLink.horizontal === \"right\") {\n return FloatingPositionDirection.Left\n }\n\n return FloatingPositionDirection.Right\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -7,5 +7,5 @@ export { RectWatcher } from "./services/rect-watcher.service";
7
7
  export { AlignmentInput, alignmentNormalize, Alignment, AlignHorizontal, AlignVertical, alignmentToTransformOrigin } from "./util/alignment";
8
8
  export { inAnimation, inTransition, isAnimating } from "./util/in-animation";
9
9
  export * from "./util/floating-position";
10
- export { Dimension, Rect, Position, rectConstraint, rectContract, rectExpand, rectMoveOrigin, rectOrigin } from "./util/rect";
10
+ export * from "./util/rect";
11
11
  export { SidesInput, sidesNormalize, Sides } from "./util/sides";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngutil/style",
3
- "version": "0.0.65",
3
+ "version": "0.0.67",
4
4
  "exports": {
5
5
  ".": {
6
6
  "sass": "./index.scss",
@@ -18,7 +18,7 @@
18
18
  "@angular/common": "18.2.6",
19
19
  "@angular/core": "18.2.6",
20
20
  "rxjs": "^7.8.1",
21
- "@ngutil/common": "0.0.65"
21
+ "@ngutil/common": "0.0.67"
22
22
  },
23
23
  "publishConfig": {
24
24
  "access": "public",
@@ -9,6 +9,7 @@ export interface FloatingPositionDims {
9
9
  content: Dimension;
10
10
  anchor: Rect;
11
11
  placement: Rect;
12
+ constraints?: FloatingPositionConstraintsInput;
12
13
  }
13
14
  export interface FloatingPositionOptions {
14
15
  content: FloatingPositionContentOptions;
@@ -20,6 +21,12 @@ export interface FloatingPositionOptions {
20
21
  export interface FloatingPositionContentOptions {
21
22
  link: AlignmentInput;
22
23
  }
24
+ export interface FloatingPositionConstraintsInput {
25
+ minWidth?: number;
26
+ maxWidth?: number;
27
+ minHeight?: number;
28
+ maxHeight?: number;
29
+ }
23
30
  export interface FloatingPositionAnchorOptions {
24
31
  link: AlignmentInput;
25
32
  margin?: SidesInput;
@@ -31,6 +38,7 @@ export interface FloatingPosition {
31
38
  content: {
32
39
  rect: Position & Readonly<Dimension>;
33
40
  link: Alignment;
41
+ readonly constrained: Readonly<Dimension>;
34
42
  };
35
43
  anchor: {
36
44
  readonly rect: Readonly<Rect>;
@@ -43,6 +51,8 @@ export interface FloatingPosition {
43
51
  area: Readonly<Rect>;
44
52
  };
45
53
  connection: Position;
54
+ direction: FloatingPositionDirection;
55
+ constraints?: FloatingPositionConstraintsInput;
46
56
  }
47
57
  type FloatingPositionAltConst = "none" | "flip" | "shift" | "flip-shift" | "greatest" | "greatest-shift" | "smallest" | "smallest-shift";
48
58
  export type FloatingPositionAltInput = FloatingPositionAltConst | FloatingPositionAltFunc;
@@ -55,4 +65,12 @@ export declare const enum FloatingPositionAltAxis {
55
65
  export declare function floatingPosition({ dims, options }: FloatingPositionInput): FloatingPosition;
56
66
  export declare function positionAltNormalize(input: FloatingPositionAltInput | FloatingPositionAltNorm): FloatingPositionAltNorm;
57
67
  export declare function floatingPositionToStyle(pos: Readonly<FloatingPosition>): Partial<CSSStyleDeclaration>;
68
+ export declare const enum FloatingPositionDirection {
69
+ Up = "up",
70
+ Down = "down",
71
+ Left = "left",
72
+ Right = "right",
73
+ Center = "center"
74
+ }
75
+ export declare function floatingPositionDirection(pos: Readonly<FloatingPosition>): FloatingPositionDirection;
58
76
  export {};
package/util/rect.d.ts CHANGED
@@ -15,3 +15,4 @@ export declare function rectMoveOrigin(rect: Rect | Dimension, origin: Alignment
15
15
  export declare function rectConstraint(rect: Rect, constraint: Rect): Rect;
16
16
  export declare function rectExpand(rect: Rect, margin: SidesInput): Rect;
17
17
  export declare function rectContract(rect: Rect, padding: SidesInput): Rect;
18
+ export declare function rectContainsPoint(rect: Rect, point: Position): boolean;