@dnd-kit/dom 0.0.2 → 0.0.3-beta-20240617115949

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/utilities.cjs CHANGED
@@ -244,15 +244,18 @@ function isSVGElement(node) {
244
244
  return node instanceof getWindow(node).SVGElement;
245
245
  }
246
246
 
247
+ // src/utilities/styles/getComputedStyles.ts
248
+ function getComputedStyles(element) {
249
+ return getWindow(element).getComputedStyle(element);
250
+ }
251
+
247
252
  // src/utilities/scroll/isFixed.ts
248
- function isFixed(node, computedStyle = getWindow(node).getComputedStyle(node)) {
253
+ function isFixed(node, computedStyle = getComputedStyles(node)) {
249
254
  return computedStyle.position === "fixed" || computedStyle.position === "sticky";
250
255
  }
251
256
 
252
257
  // src/utilities/scroll/isScrollable.ts
253
- function isScrollable(element, computedStyle = getWindow(element).getComputedStyle(
254
- element
255
- )) {
258
+ function isScrollable(element, computedStyle = getComputedStyles(element)) {
256
259
  const overflowRegex = /(auto|scroll|overlay)/;
257
260
  const properties = ["overflow", "overflowX", "overflowY"];
258
261
  return properties.find((property) => {
@@ -288,8 +291,7 @@ function getScrollableAncestors(element, options = defaultOptions) {
288
291
  if (scrollParents.has(node)) {
289
292
  return scrollParents;
290
293
  }
291
- const { getComputedStyle } = getWindow(node);
292
- const computedStyle = getComputedStyle(node);
294
+ const computedStyle = getComputedStyles(node);
293
295
  if (excludeElement && node === element) ; else if (isScrollable(node, computedStyle)) {
294
296
  scrollParents.add(node);
295
297
  }
@@ -390,7 +392,7 @@ function scrollIntoViewIfNeeded(el, centerIfNeeded = false) {
390
392
  if (!(parent instanceof HTMLElement)) {
391
393
  return;
392
394
  }
393
- const parentComputedStyle = getWindow(parent).getComputedStyle(parent, null), parentBorderTopWidth = parseInt(
395
+ const parentComputedStyle = getComputedStyles(parent), parentBorderTopWidth = parseInt(
394
396
  parentComputedStyle.getPropertyValue("border-top-width")
395
397
  ), parentBorderLeftWidth = parseInt(
396
398
  parentComputedStyle.getPropertyValue("border-left-width")
@@ -500,7 +502,7 @@ function animateTransform({
500
502
  onFinish
501
503
  }) {
502
504
  const styles = new Styles(element);
503
- const { transitionProperty } = getWindow(element).getComputedStyle(element);
505
+ const { transitionProperty } = getComputedStyles(element);
504
506
  const properties = transitionProperty.split(", ");
505
507
  styles.set({
506
508
  "transition-property": properties.length ? properties.filter(
@@ -514,21 +516,18 @@ function animateTransform({
514
516
  });
515
517
  }
516
518
 
517
- // src/utilities/transform/parseScale.ts
518
- function parseScale(scale) {
519
- if (scale === "none") {
520
- return null;
521
- }
522
- const values = scale.split(" ");
523
- const x = parseFloat(values[0]);
524
- const y = parseFloat(values[1]);
525
- if (isNaN(x) && isNaN(y)) {
526
- return null;
519
+ // src/utilities/keyframes/getFinalKeyframe.ts
520
+ function getFinalKeyframe(element) {
521
+ const animations = element.getAnimations();
522
+ if (animations.length > 0) {
523
+ const [animation] = animations;
524
+ const { effect } = animation;
525
+ const keyframes = effect instanceof KeyframeEffect ? effect.getKeyframes() : [];
526
+ if (keyframes.length > 0) {
527
+ return keyframes?.[keyframes.length - 1];
528
+ }
527
529
  }
528
- return {
529
- x: isNaN(x) ? y : x,
530
- y: isNaN(y) ? x : y
531
- };
530
+ return null;
532
531
  }
533
532
 
534
533
  // src/utilities/transform/parseTranslate.ts
@@ -548,29 +547,74 @@ function parseTranslate(translate) {
548
547
  };
549
548
  }
550
549
 
550
+ // src/utilities/transform/computeTranslate.ts
551
+ function computeTranslate(element) {
552
+ const keyframe = getFinalKeyframe(element);
553
+ if (keyframe) {
554
+ const { translate: translate2 = "" } = keyframe;
555
+ if (typeof translate2 === "string") {
556
+ const finalTranslate = parseTranslate(translate2);
557
+ if (finalTranslate) {
558
+ return finalTranslate;
559
+ }
560
+ }
561
+ }
562
+ const { translate } = getComputedStyles(element);
563
+ if (translate) {
564
+ const finalTranslate = parseTranslate(translate);
565
+ if (finalTranslate) {
566
+ return finalTranslate;
567
+ }
568
+ }
569
+ return { x: 0, y: 0, z: 0 };
570
+ }
571
+
572
+ // src/utilities/transform/parseScale.ts
573
+ function parseScale(scale) {
574
+ if (scale === "none") {
575
+ return null;
576
+ }
577
+ const values = scale.split(" ");
578
+ const x = parseFloat(values[0]);
579
+ const y = parseFloat(values[1]);
580
+ if (isNaN(x) && isNaN(y)) {
581
+ return null;
582
+ }
583
+ return {
584
+ x: isNaN(x) ? y : x,
585
+ y: isNaN(y) ? x : y
586
+ };
587
+ }
588
+
551
589
  // src/utilities/transform/parseTransform.ts
552
590
  function parseTransform(computedStyles) {
553
591
  const { scale, transform, translate } = computedStyles;
554
592
  const parsedScale = parseScale(scale);
555
593
  const parsedTranslate = parseTranslate(translate);
556
- if (parsedScale && parsedTranslate) {
557
- return {
558
- x: parsedTranslate.x,
559
- y: parsedTranslate.y,
560
- z: parsedTranslate.z,
561
- scaleX: parsedScale.x,
562
- scaleY: parsedScale.y
563
- };
564
- }
565
594
  const parsedMatrix = parseTransformMatrix(transform);
566
595
  if (!parsedMatrix && !parsedScale && !parsedTranslate) {
567
596
  return null;
568
597
  }
598
+ const normalizedScale = {
599
+ x: parsedScale?.x ?? 1,
600
+ y: parsedScale?.y ?? 1
601
+ };
602
+ const normalizedTranslate = {
603
+ x: parsedTranslate?.x ?? 0,
604
+ y: parsedTranslate?.y ?? 0
605
+ };
606
+ const normalizedMatrix = {
607
+ x: parsedMatrix?.x ?? 0,
608
+ y: parsedMatrix?.y ?? 0,
609
+ scaleX: parsedMatrix?.scaleX ?? 1,
610
+ scaleY: parsedMatrix?.scaleY ?? 1
611
+ };
569
612
  return {
570
- x: parsedTranslate?.x ?? parsedMatrix?.x ?? 0,
571
- y: parsedTranslate?.y ?? parsedMatrix?.y ?? 0,
572
- scaleX: parsedScale?.x ?? parsedMatrix?.scaleX ?? 1,
573
- scaleY: parsedScale?.y ?? parsedMatrix?.scaleY ?? 1
613
+ x: normalizedTranslate.x + normalizedMatrix.x,
614
+ y: normalizedTranslate.y + normalizedMatrix.y,
615
+ z: parsedTranslate?.z ?? 0,
616
+ scaleX: normalizedScale.x * normalizedMatrix.scaleX,
617
+ scaleY: normalizedScale.y * normalizedMatrix.scaleY
574
618
  };
575
619
  }
576
620
  function parseTransformMatrix(transform) {
@@ -603,13 +647,14 @@ function stringifyTransform({ x, y, z, scaleX, scaleY }) {
603
647
  var DOMRectangle = class extends geometry.Rectangle {
604
648
  constructor(element, ignoreTransforms = false) {
605
649
  let { top, left, right, bottom, width, height } = getBoundingRectangle(element);
606
- const computedStyles = getWindow(element).getComputedStyle(element);
650
+ const computedStyles = getComputedStyles(element);
607
651
  const parsedTransform = parseTransform(computedStyles);
608
652
  const scale = {
609
653
  x: parsedTransform?.scaleX ?? 1,
610
654
  y: parsedTransform?.scaleY ?? 1
611
655
  };
612
- if (parsedTransform && ignoreTransforms) {
656
+ const projectedTransform = getProjectedTransform(element);
657
+ if (parsedTransform && (ignoreTransforms || projectedTransform)) {
613
658
  const updated = inverseTransform(
614
659
  { top, left, right, bottom, width, height },
615
660
  parsedTransform,
@@ -620,10 +665,32 @@ var DOMRectangle = class extends geometry.Rectangle {
620
665
  width = updated.width;
621
666
  height = updated.height;
622
667
  }
668
+ if (projectedTransform && !ignoreTransforms) {
669
+ top = top + projectedTransform.y;
670
+ left = left + projectedTransform.x;
671
+ width = width * projectedTransform.scaleX;
672
+ height = height * projectedTransform.scaleY;
673
+ scale.x = projectedTransform.scaleX;
674
+ scale.y = projectedTransform.scaleY;
675
+ }
623
676
  super(left, top, width, height);
624
677
  this.scale = scale;
625
678
  }
626
679
  };
680
+ function getProjectedTransform(element) {
681
+ const keyframe = getFinalKeyframe(element);
682
+ if (keyframe) {
683
+ const { transform = "", translate = "", scale = "" } = keyframe;
684
+ if (transform || translate || scale) {
685
+ return parseTransform({
686
+ transform: typeof transform === "string" ? transform : "",
687
+ translate: typeof translate === "string" ? translate : "",
688
+ scale: typeof scale === "string" ? scale : ""
689
+ });
690
+ }
691
+ }
692
+ return null;
693
+ }
627
694
 
628
695
  // src/utilities/type-guards/isKeyboardEvent.ts
629
696
  function isKeyboardEvent(event) {
@@ -644,9 +711,11 @@ exports.animateTransform = animateTransform;
644
711
  exports.canScroll = canScroll;
645
712
  exports.canUseDOM = canUseDOM;
646
713
  exports.cloneElement = cloneElement;
714
+ exports.computeTranslate = computeTranslate;
647
715
  exports.createPlaceholder = createPlaceholder;
648
716
  exports.detectScrollIntent = detectScrollIntent;
649
717
  exports.getBoundingRectangle = getBoundingRectangle;
718
+ exports.getComputedStyles = getComputedStyles;
650
719
  exports.getDocument = getDocument;
651
720
  exports.getFirstScrollableAncestor = getFirstScrollableAncestor;
652
721
  exports.getScrollableAncestors = getScrollableAncestors;
@@ -656,6 +725,7 @@ exports.inverseTransform = inverseTransform;
656
725
  exports.isDocumentScrollingElement = isDocumentScrollingElement;
657
726
  exports.isKeyboardEvent = isKeyboardEvent;
658
727
  exports.parseTransform = parseTransform;
728
+ exports.parseTranslate = parseTranslate;
659
729
  exports.scheduler = scheduler;
660
730
  exports.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded;
661
731
  exports.showPopover = showPopover;
package/utilities.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["src/utilities/bounding-rectangle/getBoundingRectangle.ts","src/utilities/execution-context/canUseDOM.ts","src/utilities/type-guards/isWindow.ts","src/utilities/type-guards/isNode.ts","src/utilities/execution-context/getWindow.ts","src/utilities/type-guards/isDocument.ts","src/utilities/type-guards/isHTMLElement.ts","src/utilities/execution-context/getDocument.ts","src/utilities/bounding-rectangle/getViewportBoundingRectangle.ts","src/utilities/element/cloneElement.ts","src/utilities/type-guards/supportsStyle.ts","src/utilities/element/createPlaceholder.ts","src/utilities/event-listeners/Listeners.ts","src/utilities/popover/supportsPopover.ts","src/utilities/popover/showPopover.ts","src/utilities/scroll/documentScrollingElement.ts","src/utilities/scroll/getScrollPosition.ts","src/utilities/scroll/canScroll.ts","src/utilities/type-guards/isSVGElement.ts","src/utilities/scroll/isFixed.ts","src/utilities/scroll/isScrollable.ts","src/utilities/scroll/getScrollableAncestors.ts","src/utilities/scroll/detectScrollIntent.ts","src/utilities/scroll/scrollIntoViewIfNeeded.ts","src/utilities/scheduler/scheduler.ts","src/utilities/shapes/DOMRectangle.ts","src/utilities/transform/inverseTransform.ts","src/utilities/styles/Styles.ts","src/utilities/transform/animateTransform.ts","src/utilities/transform/parseScale.ts","src/utilities/transform/parseTranslate.ts","src/utilities/transform/parseTransform.ts","src/utilities/transform/stringifyTransform.ts","src/utilities/type-guards/isKeyboardEvent.ts","src/utilities/type-guards/supportsViewTransition.ts"],"names":["target","ScrollDirection","document"],"mappings":";AAEO,SAAS,qBAAqB,SAAqC;AACxE,QAAM,EAAC,OAAO,QAAQ,KAAK,MAAM,QAAQ,MAAK,IAC5C,QAAQ,sBAAsB;AAEhC,SAAO,EAAC,OAAO,QAAQ,KAAK,MAAM,QAAQ,MAAK;AACjD;;;ACNO,IAAM,YACX,OAAO,WAAW,eAClB,OAAO,OAAO,aAAa,eAC3B,OAAO,OAAO,SAAS,kBAAkB;;;ACJpC,SAAS,SAAS,SAA2C;AAClE,QAAM,gBAAgB,OAAO,UAAU,SAAS,KAAK,OAAO;AAC5D,SACE,kBAAkB;AAAA,EAElB,kBAAkB;AAEtB;;;ACPO,SAAS,OAAO,MAA4B;AACjD,SAAO,cAAc;AACvB;;;ACCO,SAAS,UAAU,QAAwC;AAChE,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,MAAM,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,OAAO,MAAM,GAAG;AACnB,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,eAAe,eAAe;AAC9C;;;ACfO,SAAS,WAAW,MAA8B;AACvD,QAAM,EAAC,SAAQ,IAAI,UAAU,IAAI;AAEjC,SAAO,gBAAgB;AACzB;;;ACFO,SAAS,cAAc,MAA0C;AACtE,MAAI,SAAS,IAAI,GAAG;AAClB,WAAO;AAAA,EACT;AAEA,SAAO,gBAAgB,UAAU,IAAI,EAAE;AACzC;;;ACLO,SAAS,YAAY,QAAmC;AAC7D,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,MAAM,GAAG;AACpB,WAAO,OAAO;AAAA,EAChB;AAEA,MAAI,CAAC,OAAO,MAAM,GAAG;AACnB,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,MAAM,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,MAAI,cAAc,MAAM,GAAG;AACzB,WAAO,OAAO;AAAA,EAChB;AAEA,SAAO;AACT;;;ACvBO,SAAS,6BACd,SACmB;AACnB,QAAM,EAAC,gBAAe,IAAI,YAAY,OAAO;AAC7C,QAAM,QAAQ,gBAAgB;AAC9B,QAAM,SAAS,gBAAgB;AAE/B,SAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;;;ACnBO,SAAS,aAAa,SAA2B;AACtD,QAAM,WAAW;AACjB,QAAM,gBAAgB,QAAQ,UAAU,IAAI;AAC5C,QAAM,SAAS,MAAM,KAAK,QAAQ,iBAAiB,QAAQ,CAAC;AAC5D,QAAM,eAAe,MAAM,KAAK,cAAc,iBAAiB,QAAQ,CAAC;AAExE,eAAa,QAAQ,CAAC,OAAO,UAAU;AACrC,UAAM,gBAAgB,OAAO,KAAK;AAElC,QAAI,QAAQ,KAAK,KAAK,QAAQ,aAAa,GAAG;AAC5C,UAAI,MAAM,SAAS,QAAQ;AACzB,cAAM,QAAQ,cAAc;AAAA,MAC9B;AAIA,UAAI,MAAM,SAAS,WAAW,MAAM,MAAM;AACxC,cAAM,OAAO,WAAW,MAAM,IAAI;AAAA,MACpC;AAAA,IACF;AAEA,QACE,iBAAiB,qBACjB,yBAAyB,qBACzB,cAAc,QAAQ,KACtB,cAAc,SAAS,GACvB;AACA,YAAM,UAAU,MAAM,WAAW,IAAI;AACrC,eAAS,UAAU,eAAe,GAAG,CAAC;AAAA,IACxC;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEA,SAAS,QACP,SACuE;AACvE,SAAO,WAAW;AACpB;;;ACrCO,SAAS,cACd,SACmD;AACnD,SACE,WAAW,WACX,QAAQ,iBAAiB,UAAU,OAAO,EAAE;AAEhD;;;ACNO,SAAS,kBACd,SACA,QAAQ,OACR,YACS;AACT,QAAM,cAAc,aAAa,OAAO;AAExC,MAAI,cAAc,WAAW,GAAG;AAC9B,QAAI,CAAC,OAAO;AACV,kBAAY,MAAM,YAAY,WAAW,GAAG;AAAA,IAC9C;AAAA,EACF;AAEA,cAAY,aAAa,SAAS,MAAM;AACxC,cAAY,aAAa,aAAa,IAAI;AAC1C,cAAY,aAAa,eAAe,MAAM;AAE9C,MAAI,YAAY;AACd,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACrD,kBAAY,aAAa,KAAK,KAAK;AAAA,IACrC;AAAA,EACF;AAEA,SAAO;AACT;;;ACjBO,IAAM,YAAN,MAAgB;AAAA,EAGrB,cAAc;AAFd,SAAQ,UAAmC,oBAAI,IAAI;AAwBnD,SAAO,QAAQ,MAAM;AACnB,iBAAW,SAAS,KAAK,SAAS;AAChC,cAAM,CAAC,QAAQ,EAAC,MAAM,UAAU,QAAO,CAAC,IAAI;AAE5C,eAAO,oBAAoB,MAAM,UAAU,OAAO;AAAA,MACpD;AAEA,WAAK,QAAQ,MAAM;AAAA,IACrB;AAAA,EA9Be;AAAA,EAER,KAAK,QAAqB,OAA2B;AAC1D,UAAM,YAAY,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACvD,UAAM,UAAgC,CAAC;AAEvC,eAAW,cAAc,WAAW;AAClC,YAAM,EAAC,MAAM,UAAU,QAAO,IAAI;AAClC,YAAM,QAA4B,CAAC,QAAQ,UAAU;AAErD,aAAO,iBAAiB,MAAM,UAAU,OAAO;AAC/C,WAAK,QAAQ,IAAI,KAAK;AACtB,cAAQ,KAAK,KAAK;AAAA,IACpB;AAEA,WAAO,SAAS,UAAU;AACxB,iBAAW,CAACA,SAAQ,EAAC,MAAM,UAAU,QAAO,CAAC,KAAK,SAAS;AACzD,QAAAA,QAAO,oBAAoB,MAAM,UAAU,OAAO;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AAWF;;;AC5CO,SAAS,gBAAgB,SAG9B;AACA,SACE,iBAAiB,WACjB,iBAAiB,WACjB,OAAO,QAAQ,gBAAgB,cAC/B,OAAO,QAAQ,gBAAgB;AAEnC;;;ACRO,SAAS,YAAY,SAAkB;AAC5C,MACE,gBAAgB,OAAO,KACvB,QAAQ,eACR,QAAQ,aAAa,SAAS,GAC9B;AACA,YAAQ,YAAY;AAAA,EACtB;AACF;;;ACPO,SAAS,2BAA2B,SAAyB;AAClE,MAAI,CAAC,aAAa,CAAC,SAAS;AAC1B,WAAO;AAAA,EACT;AAEA,SAAO,YAAY,YAAY,OAAO,EAAE;AAC1C;;;ACLO,SAAS,kBAAkB,mBAA4B;AAC5D,QAAM,OAAO,2BAA2B,iBAAiB,IACrD,6BAA6B,iBAAiB,IAC9C,qBAAqB,iBAAiB;AAE1C,QAAM,aAAa,2BAA2B,iBAAiB,IAC3D;AAAA,IACE,QAAQ,OAAO;AAAA,IACf,OAAO,OAAO;AAAA,EAChB,IACA;AAAA,IACE,QAAQ,kBAAkB;AAAA,IAC1B,OAAO,kBAAkB;AAAA,EAC3B;AACJ,QAAM,WAAW;AAAA,IACf,SAAS;AAAA,MACP,GAAG,kBAAkB;AAAA,MACrB,GAAG,kBAAkB;AAAA,IACvB;AAAA,IACA,KAAK;AAAA,MACH,GAAG,kBAAkB,cAAc,WAAW;AAAA,MAC9C,GAAG,kBAAkB,eAAe,WAAW;AAAA,IACjD;AAAA,EACF;AAEA,QAAM,QAAQ,SAAS,QAAQ,KAAK;AACpC,QAAM,SAAS,SAAS,QAAQ,KAAK;AACrC,QAAM,WAAW,SAAS,QAAQ,KAAK,SAAS,IAAI;AACpD,QAAM,UAAU,SAAS,QAAQ,KAAK,SAAS,IAAI;AAEnD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACtCO,SAAS,UAAU,mBAA4B,IAAkB;AACtE,QAAM,EAAC,OAAO,UAAU,QAAQ,SAAS,SAAQ,IAC/C,kBAAkB,iBAAiB;AAErC,QAAM,EAAC,GAAG,EAAC,IAAI,MAAM,EAAC,GAAG,GAAG,GAAG,EAAC;AAEhC,QAAM,MAAM,CAAC,SAAS,SAAS,QAAQ,IAAI,IAAI;AAC/C,QAAM,SAAS,CAAC,YAAY,SAAS,QAAQ,IAAI,IAAI,SAAS,IAAI;AAClE,QAAM,OAAO,CAAC,UAAU,SAAS,QAAQ,IAAI,IAAI;AACjD,QAAM,QAAQ,CAAC,WAAW,SAAS,QAAQ,IAAI,IAAI,SAAS,IAAI;AAEhE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,QAAQ;AAAA,IACX,GAAG,OAAO;AAAA,EACZ;AACF;;;ACrBO,SAAS,aAAa,MAAgC;AAC3D,SAAO,gBAAgB,UAAU,IAAI,EAAE;AACzC;;;ACFO,SAAS,QACd,MACA,gBAAqC,UAAU,IAAI,EAAE,iBAAiB,IAAI,GACjE;AACT,SACE,cAAc,aAAa,WAAW,cAAc,aAAa;AAErE;;;ACPO,SAAS,aACd,SACA,gBAAqC,UAAU,OAAO,EAAE;AAAA,EACtD;AACF,GACS;AACT,QAAM,gBAAgB;AACtB,QAAM,aAAa,CAAC,YAAY,aAAa,WAAW;AAExD,SACE,WAAW,KAAK,CAAC,aAAa;AAC5B,UAAM,QAAQ,cAAc,QAAqC;AAEjE,WAAO,OAAO,UAAU,WAAW,cAAc,KAAK,KAAK,IAAI;AAAA,EACjE,CAAC,KAAK;AAEV;;;ACNA,IAAM,iBAA0B;AAAA,EAC9B,gBAAgB;AAClB;AAEO,SAAS,uBACd,SACA,UAAmB,gBACL;AACd,QAAM,EAAC,OAAO,eAAc,IAAI;AAChC,QAAM,gBAAgB,oBAAI,IAAa;AAEvC,WAAS,wBAAwB,MAAiC;AAChE,QAAI,SAAS,QAAQ,cAAc,QAAQ,OAAO;AAChD,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AAEA,QACE,WAAW,IAAI,KACf,KAAK,oBAAoB,QACzB,CAAC,cAAc,IAAI,KAAK,gBAAgB,GACxC;AACA,oBAAc,IAAI,KAAK,gBAAgB;AAEvC,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,cAAc,IAAI,GAAG;AACxB,UAAI,aAAa,IAAI,GAAG;AACtB,eAAO,wBAAwB,KAAK,aAAa;AAAA,MACnD;AAEA,aAAO;AAAA,IACT;AAEA,QAAI,cAAc,IAAI,IAAI,GAAG;AAC3B,aAAO;AAAA,IACT;AAEA,UAAM,EAAC,iBAAgB,IAAI,UAAU,IAAI;AACzC,UAAM,gBAAgB,iBAAiB,IAAI;AAE3C,QAAI,kBAAkB,SAAS,SAAS;AAAA,IAExC,WAAW,aAAa,MAAM,aAAa,GAAG;AAC5C,oBAAc,IAAI,IAAI;AAAA,IACxB;AAEA,QAAI,QAAQ,MAAM,aAAa,GAAG;AAChC,YAAM,EAAC,iBAAgB,IAAI,KAAK;AAEhC,UAAI;AAAkB,sBAAc,IAAI,gBAAgB;AAExD,aAAO;AAAA,IACT;AAEA,WAAO,wBAAwB,KAAK,UAAU;AAAA,EAChD;AAEA,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,SAAO,wBAAwB,OAAO;AACxC;AAEO,SAAS,2BAA2B,MAAmC;AAC5E,QAAM,CAAC,uBAAuB,IAAI,uBAAuB,MAAM,EAAC,OAAO,EAAC,CAAC;AAEzE,SAAO,2BAA2B;AACpC;;;ACjFO,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,kCAAA,UAAO,KAAP;AACA,EAAAA,kCAAA,aAAU,KAAV;AACA,EAAAA,kCAAA,aAAU,MAAV;AAHU,SAAAA;AAAA,GAAA;AAMZ,IAAM,mBAAyC;AAAA,EAC7C,GAAG;AAAA,EACH,GAAG;AACL;AAEA,IAAM,mBAAyC;AAAA,EAC7C,GAAG;AAAA,EACH,GAAG;AACL;AAOO,SAAS,mBACd,mBACA,aACA,QACA,eAAe,IACf,sBAAsB,kBACtB,YAAY,kBACZ;AACA,QAAM;AAAA,IACJ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,kBAAkB,iBAAiB;AAEvC,QAAM,YAA2C;AAAA,IAC/C,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACA,QAAM,QAAQ;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACA,QAAM,YAAY;AAAA,IAChB,QAAQ,oBAAoB,SAAS,oBAAoB;AAAA,IACzD,OAAO,oBAAoB,QAAQ,oBAAoB;AAAA,EACzD;AAEA,MACE,CAAC,SACD,YAAY,KAAK,oBAAoB,MAAM,UAAU,UACrD,QAAQ,MAAM,mBACd,YAAY,KAAK,oBAAoB,OAAO,UAAU,KACtD,YAAY,KAAK,oBAAoB,QAAQ,UAAU,GACvD;AAEA,cAAU,IAAI;AACd,UAAM,IACJ,eACA,KAAK;AAAA,OACF,oBAAoB,MAAM,UAAU,SAAS,YAAY,KACxD,UAAU;AAAA,IACd;AAAA,EACJ,WACE,CAAC,YACD,YAAY,KAAK,oBAAoB,SAAS,UAAU,UACxD,QAAQ,MAAM,oBACd,YAAY,KAAK,oBAAoB,OAAO,UAAU,KACtD,YAAY,KAAK,oBAAoB,QAAQ,UAAU,GACvD;AAEA,cAAU,IAAI;AACd,UAAM,IACJ,eACA,KAAK;AAAA,OACF,oBAAoB,SAAS,UAAU,SAAS,YAAY,KAC3D,UAAU;AAAA,IACd;AAAA,EACJ;AAEA,MACE,CAAC,WACD,YAAY,KAAK,oBAAoB,QAAQ,UAAU,SACvD,QAAQ,MAAM,oBACd,YAAY,KAAK,oBAAoB,MAAM,UAAU,KACrD,YAAY,KAAK,oBAAoB,SAAS,UAAU,GACxD;AAEA,cAAU,IAAI;AACd,UAAM,IACJ,eACA,KAAK;AAAA,OACF,oBAAoB,QAAQ,UAAU,QAAQ,YAAY,KACzD,UAAU;AAAA,IACd;AAAA,EACJ,WACE,CAAC,UACD,YAAY,KAAK,oBAAoB,OAAO,UAAU,SACtD,QAAQ,MAAM,mBACd,YAAY,KAAK,oBAAoB,MAAM,UAAU,KACrD,YAAY,KAAK,oBAAoB,SAAS,UAAU,GACxD;AAEA,cAAU,IAAI;AACd,UAAM,IACJ,eACA,KAAK;AAAA,OACF,oBAAoB,OAAO,UAAU,QAAQ,YAAY,KACxD,UAAU;AAAA,IACd;AAAA,EACJ;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ACvHA,SAAS,+BACP,SAGA;AACA,SACE,4BAA4B,WAC5B,OAAO,QAAQ,2BAA2B;AAE9C;AAEO,SAAS,uBAAuB,IAAa,iBAAiB,OAAO;AAC1E,MAAI,+BAA+B,EAAE,GAAG;AACtC,OAAG,uBAAuB,cAAc;AACxC;AAAA,EACF;AAEA,MAAI,EAAE,cAAc,cAAc;AAChC,WAAO,GAAG,eAAe;AAAA,EAC3B;AAEA,MAAI,CAAC,MAAM,IAAI,uBAAuB,IAAI,EAAC,OAAO,EAAC,CAAC;AAEpD,MAAI,EAAE,kBAAkB,cAAc;AACpC;AAAA,EACF;AAEA,QAAM,sBAAsB,UAAU,MAAM,EAAE,iBAAiB,QAAQ,IAAI,GACzE,uBAAuB;AAAA,IACrB,oBAAoB,iBAAiB,kBAAkB;AAAA,EACzD,GACA,wBAAwB;AAAA,IACtB,oBAAoB,iBAAiB,mBAAmB;AAAA,EAC1D,GACA,UAAU,GAAG,YAAY,OAAO,YAAY,OAAO,WACnD,aACE,GAAG,YAAY,OAAO,YAAY,GAAG,eAAe,uBACpD,OAAO,YAAY,OAAO,cAC5B,WAAW,GAAG,aAAa,OAAO,aAAa,OAAO,YACtD,YACE,GAAG,aACD,OAAO,aACP,GAAG,cACH,wBACF,OAAO,aAAa,OAAO,aAC7B,eAAe,WAAW,CAAC;AAE7B,OAAK,WAAW,eAAe,gBAAgB;AAC7C,WAAO,YACL,GAAG,YACH,OAAO,YACP,OAAO,eAAe,IACtB,uBACA,GAAG,eAAe;AAAA,EACtB;AAEA,OAAK,YAAY,cAAc,gBAAgB;AAC7C,WAAO,aACL,GAAG,aACH,OAAO,aACP,OAAO,cAAc,IACrB,wBACA,GAAG,cAAc;AAAA,EACrB;AAEA,OAAK,WAAW,cAAc,YAAY,cAAc,CAAC,gBAAgB;AACvE,OAAG,eAAe,YAAY;AAAA,EAChC;AACF;;;ACvEO,IAAM,YAAN,MAAgB;AAAA,EAAhB;AAEL,SAAQ,QAAyB,oBAAI,IAAI;AAUzC,SAAO,QAAQ,MAAM;AACnB,YAAM,QAAQ,KAAK;AAEnB,WAAK,iBAAiB;AACtB,WAAK,QAAQ,oBAAI,IAAI;AAErB,iBAAW,QAAQ,OAAO;AACxB,aAAK;AAAA,MACP;AAAA,IACF;AAAA;AAAA,EAjBO,SAAS,MAAkB;AAChC,SAAK,MAAM,IAAI,IAAI;AAEnB,QAAI,CAAC,KAAK,gBAAgB;AACxB,WAAK,iBAAiB,sBAAsB,KAAK,KAAK;AAAA,IACxD;AAAA,EACF;AAYF;AAEO,IAAM,YAAY,IAAI,UAAU;;;ACxBvC,SAAQ,iBAAgB;;;ACIjB,SAAS,iBACd,MACA,iBACA,iBACmB;AACnB,QAAM,EAAC,QAAQ,QAAQ,GAAG,YAAY,GAAG,WAAU,IAAI;AACvD,QAAM,IAAI,KAAK,OAAO,cAAc,IAAI,UAAU,WAAW,eAAe;AAC5E,QAAM,IACJ,KAAK,MACL,cACC,IAAI,UACH,WAAW,gBAAgB,MAAM,gBAAgB,QAAQ,GAAG,IAAI,CAAC,CAAC;AACtE,QAAM,IAAI,SAAS,KAAK,QAAQ,SAAS,KAAK;AAC9C,QAAM,IAAI,SAAS,KAAK,SAAS,SAAS,KAAK;AAE/C,SAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,OAAO,IAAI;AAAA,IACX,QAAQ,IAAI;AAAA,IACZ,MAAM;AAAA,EACR;AACF;;;ACjBO,IAAM,SAAN,MAAa;AAAA,EAGlB,YAAoB,SAAkB;AAAlB;AAFpB,SAAQ,UAAU,oBAAI,IAAoB;AAAA,EAEH;AAAA,EAEhC,IAAI,YAA6C,SAAS,IAAI;AACnE,UAAM,EAAC,QAAO,IAAI;AAElB,QAAI,CAAC,cAAc,OAAO,GAAG;AAC3B;AAAA,IACF;AAEA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACrD,YAAM,WAAW,GAAG,MAAM,GAAG,GAAG;AAEhC,UAAI,CAAC,KAAK,QAAQ,IAAI,QAAQ,GAAG;AAC/B,aAAK,QAAQ,IAAI,UAAU,QAAQ,MAAM,iBAAiB,QAAQ,CAAC;AAAA,MACrE;AAEA,cAAQ,MAAM;AAAA,QACZ;AAAA,QACA,OAAO,UAAU,WAAW,QAAQ,GAAG,KAAK;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAAA,EAEO,OAAO,YAAsB,SAAS,IAAI;AAC/C,UAAM,EAAC,QAAO,IAAI;AAElB,QAAI,CAAC,cAAc,OAAO,GAAG;AAC3B;AAAA,IACF;AAEA,eAAW,OAAO,YAAY;AAC5B,YAAM,WAAW,GAAG,MAAM,GAAG,GAAG;AAEhC,cAAQ,MAAM,eAAe,QAAQ;AAAA,IACvC;AAAA,EACF;AAAA,EAEO,QAAQ;AACb,UAAM,EAAC,QAAO,IAAI;AAElB,QAAI,CAAC,cAAc,OAAO,GAAG;AAC3B;AAAA,IACF;AAEA,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,SAAS;AACvC,cAAQ,MAAM,YAAY,KAAK,KAAK;AAAA,IACtC;AAEA,QAAI,QAAQ,aAAa,OAAO,MAAM,IAAI;AACxC,cAAQ,gBAAgB,OAAO;AAAA,IACjC;AAAA,EACF;AACF;;;ACvDO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAc;AACZ,QAAM,SAAS,IAAI,OAAO,OAAO;AACjC,QAAM,EAAC,mBAAkB,IAAI,UAAU,OAAO,EAAE,iBAAiB,OAAO;AAExE,QAAM,aAAa,mBAAmB,MAAM,IAAI;AAEhD,SAAO,IAAI;AAAA,IACT,uBAAuB,WAAW,SAC9B,WACG;AAAA,MACC,CAAC,aACC,CAAC,SAAS,SAAS,WAAW,KAAK,CAAC,SAAS,SAAS,WAAW;AAAA,IACrE,EACC,KAAK,IAAI,IACZ;AAAA,EACN,CAAC;AAED,YAAU;AAEV,UAAQ,QAAQ,WAAW,OAAO,EAAE,SAAS,KAAK,MAAM;AACtD,eAAW;AACX,WAAO,MAAM;AAAA,EACf,CAAC;AACH;;;ACvCO,SAAS,WAAW,OAAe;AACxC,MAAI,UAAU,QAAQ;AACpB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,MAAM,MAAM,GAAG;AAC9B,QAAM,IAAI,WAAW,OAAO,CAAC,CAAC;AAC9B,QAAM,IAAI,WAAW,OAAO,CAAC,CAAC;AAE9B,MAAI,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAG,MAAM,CAAC,IAAI,IAAI;AAAA,IAClB,GAAG,MAAM,CAAC,IAAI,IAAI;AAAA,EACpB;AACF;;;ACjBO,SAAS,eAAe,WAAmB;AAChD,MAAI,cAAc,QAAQ;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,UAAU,MAAM,GAAG;AAC3C,QAAM,SAAS,EAAC,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,GAAG,SAAS,GAAG,EAAE,EAAC;AAEtE,MAAI,MAAM,OAAO,CAAC,KAAK,MAAM,OAAO,CAAC,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAG,MAAM,OAAO,CAAC,IAAI,IAAI,OAAO;AAAA,IAChC,GAAG,MAAM,OAAO,CAAC,IAAI,IAAI,OAAO;AAAA,IAChC,GAAG,MAAM,OAAO,CAAC,IAAI,IAAI,OAAO;AAAA,EAClC;AACF;;;ACNO,SAAS,eACd,gBACkB;AAClB,QAAM,EAAC,OAAO,WAAW,UAAS,IAAI;AACtC,QAAM,cAAc,WAAW,KAAK;AACpC,QAAM,kBAAkB,eAAe,SAAS;AAEhD,MAAI,eAAe,iBAAiB;AAClC,WAAO;AAAA,MACL,GAAG,gBAAgB;AAAA,MACnB,GAAG,gBAAgB;AAAA,MACnB,GAAG,gBAAgB;AAAA,MACnB,QAAQ,YAAY;AAAA,MACpB,QAAQ,YAAY;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,eAAe,qBAAqB,SAAS;AAEnD,MAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,iBAAiB;AACrD,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAG,iBAAiB,KAAK,cAAc,KAAK;AAAA,IAC5C,GAAG,iBAAiB,KAAK,cAAc,KAAK;AAAA,IAC5C,QAAQ,aAAa,KAAK,cAAc,UAAU;AAAA,IAClD,QAAQ,aAAa,KAAK,cAAc,UAAU;AAAA,EACpD;AACF;AAEA,SAAS,qBAAqB,WAAmB;AAC/C,MAAI,UAAU,WAAW,WAAW,GAAG;AACrC,UAAM,iBAAiB,UAAU,MAAM,GAAG,EAAE,EAAE,MAAM,IAAI;AAExD,WAAO;AAAA,MACL,GAAG,CAAC,eAAe,EAAE;AAAA,MACrB,GAAG,CAAC,eAAe,EAAE;AAAA,MACrB,QAAQ,CAAC,eAAe,CAAC;AAAA,MACzB,QAAQ,CAAC,eAAe,CAAC;AAAA,IAC3B;AAAA,EACF,WAAW,UAAU,WAAW,SAAS,GAAG;AAC1C,UAAM,iBAAiB,UAAU,MAAM,GAAG,EAAE,EAAE,MAAM,IAAI;AAExD,WAAO;AAAA,MACL,GAAG,CAAC,eAAe,CAAC;AAAA,MACpB,GAAG,CAAC,eAAe,CAAC;AAAA,MACpB,QAAQ,CAAC,eAAe,CAAC;AAAA,MACzB,QAAQ,CAAC,eAAe,CAAC;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO;AACT;;;AC9DO,SAAS,mBAAmB,EAAC,GAAG,GAAG,GAAG,QAAQ,OAAM,GAAc;AACvE,SAAO,eAAe,CAAC,OAAO,CAAC,OAAO,KAAK,CAAC,WAAW,MAAM,KAAK,MAAM;AAC1E;;;APGO,IAAM,eAAN,cAA2B,UAAU;AAAA,EAC1C,YAAY,SAAkB,mBAAmB,OAAO;AACtD,QAAI,EAAC,KAAK,MAAM,OAAO,QAAQ,OAAO,OAAM,IAC1C,qBAAqB,OAAO;AAC9B,UAAM,iBAAiB,UAAU,OAAO,EAAE,iBAAiB,OAAO;AAClE,UAAM,kBAAkB,eAAe,cAAc;AACrD,UAAM,QAAQ;AAAA,MACZ,GAAG,iBAAiB,UAAU;AAAA,MAC9B,GAAG,iBAAiB,UAAU;AAAA,IAChC;AAEA,QAAI,mBAAmB,kBAAkB;AACvC,YAAM,UAAU;AAAA,QACd,EAAC,KAAK,MAAM,OAAO,QAAQ,OAAO,OAAM;AAAA,QACxC;AAAA,QACA,eAAe;AAAA,MACjB;AAEA,YAAM,QAAQ;AACd,aAAO,QAAQ;AACf,cAAQ,QAAQ;AAChB,eAAS,QAAQ;AAAA,IACnB;AAEA,UAAM,MAAM,KAAK,OAAO,MAAM;AAE9B,SAAK,QAAQ;AAAA,EACf;AACF;;;AQnCO,SAAS,gBACd,OACwB;AACxB,SAAO,iBAAiB;AAC1B;;;ACGO,SAAS,uBACdC,WAGA;AACA,SAAO,yBAAyBA;AAClC","sourcesContent":["import {BoundingRectangle} from '@dnd-kit/geometry';\n\nexport function getBoundingRectangle(element: Element): BoundingRectangle {\n const {width, height, top, left, bottom, right} =\n element.getBoundingClientRect();\n\n return {width, height, top, left, bottom, right};\n}\n","// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nexport const canUseDOM =\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined';\n","export function isWindow(element: Object): element is typeof window {\n const elementString = Object.prototype.toString.call(element);\n return (\n elementString === '[object Window]' ||\n // In Electron context the Window object serializes to [object global]\n elementString === '[object global]'\n );\n}\n","export function isNode(node: Object): node is Node {\n return 'nodeType' in node;\n}\n","import {isWindow} from '../type-guards/isWindow.ts';\nimport {isNode} from '../type-guards/isNode.ts';\n\nexport function getWindow(target: Event['target']): typeof window {\n if (!target) {\n return window;\n }\n\n if (isWindow(target)) {\n return target;\n }\n\n if (!isNode(target)) {\n return window;\n }\n\n return target.ownerDocument?.defaultView ?? window;\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\n\nexport function isDocument(node: Node): node is Document {\n const {Document} = getWindow(node);\n\n return node instanceof Document;\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\n\nimport {isWindow} from './isWindow.ts';\n\nexport function isHTMLElement(node: Node | Window): node is HTMLElement {\n if (isWindow(node)) {\n return false;\n }\n\n return node instanceof getWindow(node).HTMLElement;\n}\n","import {isDocument} from '../type-guards/isDocument.ts';\nimport {isHTMLElement} from '../type-guards/isHTMLElement.ts';\nimport {isNode} from '../type-guards/isNode.ts';\nimport {isWindow} from '../type-guards/isWindow.ts';\n\nexport function getDocument(target: Event['target']): Document {\n if (!target) {\n return document;\n }\n\n if (isWindow(target)) {\n return target.document;\n }\n\n if (!isNode(target)) {\n return document;\n }\n\n if (isDocument(target)) {\n return target;\n }\n\n if (isHTMLElement(target)) {\n return target.ownerDocument;\n }\n\n return document;\n}\n","import type {BoundingRectangle} from '@dnd-kit/geometry';\n\nimport {getDocument} from '../execution-context/index.ts';\n\nexport function getViewportBoundingRectangle(\n element: Element\n): BoundingRectangle {\n const {documentElement} = getDocument(element);\n const width = documentElement.clientWidth;\n const height = documentElement.clientHeight;\n\n return {\n top: 0,\n left: 0,\n right: width,\n bottom: height,\n width,\n height,\n };\n}\n","export function cloneElement(element: Element): Element {\n const selector = 'input, textarea, select, canvas, [contenteditable]';\n const clonedElement = element.cloneNode(true) as HTMLElement;\n const fields = Array.from(element.querySelectorAll(selector));\n const clonedFields = Array.from(clonedElement.querySelectorAll(selector));\n\n clonedFields.forEach((field, index) => {\n const originalField = fields[index];\n\n if (isField(field) && isField(originalField)) {\n if (field.type !== 'file') {\n field.value = originalField.value;\n }\n\n // Fixes an issue with original radio buttons losing their value once the\n // clone is inserted in the DOM, as radio button `name` attributes must be unique\n if (field.type === 'radio' && field.name) {\n field.name = `Cloned__${field.name}`;\n }\n }\n\n if (\n field instanceof HTMLCanvasElement &&\n originalField instanceof HTMLCanvasElement &&\n originalField.width > 0 &&\n originalField.height > 0\n ) {\n const destCtx = field.getContext('2d');\n destCtx?.drawImage(originalField, 0, 0);\n }\n });\n\n return clonedElement;\n}\n\nfunction isField(\n element: Element\n): element is HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement {\n return 'value' in element;\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\n\nexport function supportsStyle(\n element: Element\n): element is Element & {style: CSSStyleDeclaration} {\n return (\n 'style' in element &&\n element.style instanceof getWindow(element).CSSStyleDeclaration\n );\n}\n","import {cloneElement} from './cloneElement.ts';\nimport {supportsStyle} from '../type-guards/supportsStyle.ts';\n\nexport function createPlaceholder(\n element: Element,\n clone = false,\n attributes?: Record<string, string>\n): Element {\n const placeholder = cloneElement(element);\n\n if (supportsStyle(placeholder)) {\n if (!clone) {\n placeholder.style.setProperty('opacity', '0');\n }\n }\n\n placeholder.setAttribute('inert', 'true');\n placeholder.setAttribute('tab-index', '-1');\n placeholder.setAttribute('aria-hidden', 'true');\n\n if (attributes) {\n for (const [key, value] of Object.entries(attributes)) {\n placeholder.setAttribute(key, value);\n }\n }\n\n return placeholder;\n}\n","export interface EventListenerDescriptor {\n type: string;\n listener(event: Event): void;\n options?: AddEventListenerOptions;\n}\n\ntype EventListenerInput = EventListenerDescriptor[] | EventListenerDescriptor;\n\ntype EventListenerEntry = [EventTarget, EventListenerDescriptor];\n\nexport class Listeners {\n private entries: Set<EventListenerEntry> = new Set();\n\n constructor() {}\n\n public bind(target: EventTarget, input: EventListenerInput) {\n const listeners = Array.isArray(input) ? input : [input];\n const entries: EventListenerEntry[] = [];\n\n for (const descriptor of listeners) {\n const {type, listener, options} = descriptor;\n const entry: EventListenerEntry = [target, descriptor];\n\n target.addEventListener(type, listener, options);\n this.entries.add(entry);\n entries.push(entry);\n }\n\n return function cleanup() {\n for (const [target, {type, listener, options}] of entries) {\n target.removeEventListener(type, listener, options);\n }\n };\n }\n\n public clear = () => {\n for (const entry of this.entries) {\n const [target, {type, listener, options}] = entry;\n\n target.removeEventListener(type, listener, options);\n }\n\n this.entries.clear();\n };\n}\n","export function supportsPopover(element: Element): element is Element & {\n showPopover(): void;\n hidePopover(): void;\n} {\n return (\n 'showPopover' in element &&\n 'hidePopover' in element &&\n typeof element.showPopover === 'function' &&\n typeof element.hidePopover === 'function'\n );\n}\n","import {supportsPopover} from './supportsPopover.ts';\n\nexport function showPopover(element: Element) {\n if (\n supportsPopover(element) &&\n element.isConnected &&\n element.hasAttribute('popover')\n ) {\n element.showPopover();\n }\n}\n","import {canUseDOM} from '../execution-context/canUseDOM.ts';\nimport {getDocument} from '../execution-context/getDocument.ts';\n\nexport function isDocumentScrollingElement(element: Element | null) {\n if (!canUseDOM || !element) {\n return false;\n }\n\n return element === getDocument(element).scrollingElement;\n}\n","import {getBoundingRectangle} from '../bounding-rectangle/getBoundingRectangle.ts';\nimport {getViewportBoundingRectangle} from '../bounding-rectangle/getViewportBoundingRectangle.ts';\nimport {isDocumentScrollingElement} from './documentScrollingElement.ts';\n\nexport function getScrollPosition(scrollableElement: Element) {\n const rect = isDocumentScrollingElement(scrollableElement)\n ? getViewportBoundingRectangle(scrollableElement)\n : getBoundingRectangle(scrollableElement);\n\n const dimensions = isDocumentScrollingElement(scrollableElement)\n ? {\n height: window.innerHeight,\n width: window.innerWidth,\n }\n : {\n height: scrollableElement.clientHeight,\n width: scrollableElement.clientWidth,\n };\n const position = {\n current: {\n x: scrollableElement.scrollLeft,\n y: scrollableElement.scrollTop,\n },\n max: {\n x: scrollableElement.scrollWidth - dimensions.width,\n y: scrollableElement.scrollHeight - dimensions.height,\n },\n };\n\n const isTop = position.current.y <= 0;\n const isLeft = position.current.x <= 0;\n const isBottom = position.current.y >= position.max.y;\n const isRight = position.current.x >= position.max.x;\n\n return {\n rect,\n position,\n isTop,\n isLeft,\n isBottom,\n isRight,\n };\n}\n","import type {Coordinates} from '@dnd-kit/geometry';\n\nimport {getScrollPosition} from './getScrollPosition.ts';\n\nexport function canScroll(scrollableElement: Element, by?: Coordinates) {\n const {isTop, isBottom, isLeft, isRight, position} =\n getScrollPosition(scrollableElement);\n\n const {x, y} = by ?? {x: 0, y: 0};\n\n const top = !isTop && position.current.y + y > 0;\n const bottom = !isBottom && position.current.y + y < position.max.y;\n const left = !isLeft && position.current.x + x > 0;\n const right = !isRight && position.current.x + x < position.max.x;\n\n return {\n top,\n bottom,\n left,\n right,\n x: left || right,\n y: top || bottom,\n };\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\n\nexport function isSVGElement(node: Node): node is SVGElement {\n return node instanceof getWindow(node).SVGElement;\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\n\nexport function isFixed(\n node: Element,\n computedStyle: CSSStyleDeclaration = getWindow(node).getComputedStyle(node)\n): boolean {\n return (\n computedStyle.position === 'fixed' || computedStyle.position === 'sticky'\n );\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\n\nexport function isScrollable(\n element: HTMLElement,\n computedStyle: CSSStyleDeclaration = getWindow(element).getComputedStyle(\n element\n )\n): boolean {\n const overflowRegex = /(auto|scroll|overlay)/;\n const properties = ['overflow', 'overflowX', 'overflowY'];\n\n return (\n properties.find((property) => {\n const value = computedStyle[property as keyof CSSStyleDeclaration];\n\n return typeof value === 'string' ? overflowRegex.test(value) : false;\n }) != null\n );\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\nimport {isDocument} from '../type-guards/isDocument.ts';\nimport {isHTMLElement} from '../type-guards/isHTMLElement.ts';\nimport {isSVGElement} from '../type-guards/isSVGElement.ts';\nimport {isFixed} from './isFixed.ts';\nimport {isScrollable} from './isScrollable.ts';\n\ninterface Options {\n limit?: number;\n excludeElement?: boolean;\n}\n\nconst defaultOptions: Options = {\n excludeElement: true,\n};\n\nexport function getScrollableAncestors(\n element: Node | null,\n options: Options = defaultOptions\n): Set<Element> {\n const {limit, excludeElement} = options;\n const scrollParents = new Set<Element>();\n\n function findScrollableAncestors(node: Node | null): Set<Element> {\n if (limit != null && scrollParents.size >= limit) {\n return scrollParents;\n }\n\n if (!node) {\n return scrollParents;\n }\n\n if (\n isDocument(node) &&\n node.scrollingElement != null &&\n !scrollParents.has(node.scrollingElement)\n ) {\n scrollParents.add(node.scrollingElement);\n\n return scrollParents;\n }\n\n if (!isHTMLElement(node)) {\n if (isSVGElement(node)) {\n return findScrollableAncestors(node.parentElement);\n }\n\n return scrollParents;\n }\n\n if (scrollParents.has(node)) {\n return scrollParents;\n }\n\n const {getComputedStyle} = getWindow(node);\n const computedStyle = getComputedStyle(node);\n\n if (excludeElement && node === element) {\n // no-op\n } else if (isScrollable(node, computedStyle)) {\n scrollParents.add(node);\n }\n\n if (isFixed(node, computedStyle)) {\n const {scrollingElement} = node.ownerDocument;\n\n if (scrollingElement) scrollParents.add(scrollingElement);\n\n return scrollParents;\n }\n\n return findScrollableAncestors(node.parentNode);\n }\n\n if (!element) {\n return scrollParents;\n }\n\n return findScrollableAncestors(element);\n}\n\nexport function getFirstScrollableAncestor(node: Node | null): Element | null {\n const [firstScrollableAncestor] = getScrollableAncestors(node, {limit: 1});\n\n return firstScrollableAncestor ?? null;\n}\n","import type {Axis, Coordinates} from '@dnd-kit/geometry';\n\nimport {getScrollPosition} from './getScrollPosition.ts';\n\nexport enum ScrollDirection {\n Idle = 0,\n Forward = 1,\n Reverse = -1,\n}\n\nconst defaultThreshold: Record<Axis, number> = {\n x: 0.2,\n y: 0.2,\n};\n\nconst defaultTolerance: Record<Axis, number> = {\n x: 10,\n y: 10,\n};\n\ninterface ScrollIntent {\n x: ScrollDirection;\n y: ScrollDirection;\n}\n\nexport function detectScrollIntent(\n scrollableElement: Element,\n coordinates: Coordinates,\n intent?: ScrollIntent,\n acceleration = 25,\n thresholdPercentage = defaultThreshold,\n tolerance = defaultTolerance\n) {\n const {\n rect: scrollContainerRect,\n isTop,\n isBottom,\n isLeft,\n isRight,\n } = getScrollPosition(scrollableElement);\n\n const direction: Record<Axis, ScrollDirection> = {\n x: ScrollDirection.Idle,\n y: ScrollDirection.Idle,\n };\n const speed = {\n x: 0,\n y: 0,\n };\n const threshold = {\n height: scrollContainerRect.height * thresholdPercentage.y,\n width: scrollContainerRect.width * thresholdPercentage.x,\n };\n\n if (\n !isTop &&\n coordinates.y <= scrollContainerRect.top + threshold.height &&\n intent?.y !== ScrollDirection.Forward &&\n coordinates.x >= scrollContainerRect.left - tolerance.x &&\n coordinates.x <= scrollContainerRect.right + tolerance.x\n ) {\n // Scroll Up\n direction.y = ScrollDirection.Reverse;\n speed.y =\n acceleration *\n Math.abs(\n (scrollContainerRect.top + threshold.height - coordinates.y) /\n threshold.height\n );\n } else if (\n !isBottom &&\n coordinates.y >= scrollContainerRect.bottom - threshold.height &&\n intent?.y !== ScrollDirection.Reverse &&\n coordinates.x >= scrollContainerRect.left - tolerance.x &&\n coordinates.x <= scrollContainerRect.right + tolerance.x\n ) {\n // Scroll Down\n direction.y = ScrollDirection.Forward;\n speed.y =\n acceleration *\n Math.abs(\n (scrollContainerRect.bottom - threshold.height - coordinates.y) /\n threshold.height\n );\n }\n\n if (\n !isRight &&\n coordinates.x >= scrollContainerRect.right - threshold.width &&\n intent?.x !== ScrollDirection.Reverse &&\n coordinates.y >= scrollContainerRect.top - tolerance.y &&\n coordinates.y <= scrollContainerRect.bottom + tolerance.y\n ) {\n // Scroll Right\n direction.x = ScrollDirection.Forward;\n speed.x =\n acceleration *\n Math.abs(\n (scrollContainerRect.right - threshold.width - coordinates.x) /\n threshold.width\n );\n } else if (\n !isLeft &&\n coordinates.x <= scrollContainerRect.left + threshold.width &&\n intent?.x !== ScrollDirection.Forward &&\n coordinates.y >= scrollContainerRect.top - tolerance.y &&\n coordinates.y <= scrollContainerRect.bottom + tolerance.y\n ) {\n // Scroll Left\n direction.x = ScrollDirection.Reverse;\n speed.x =\n acceleration *\n Math.abs(\n (scrollContainerRect.left + threshold.width - coordinates.x) /\n threshold.width\n );\n }\n\n return {\n direction,\n speed,\n };\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\nimport {getScrollableAncestors} from './getScrollableAncestors.ts';\n\nfunction supportsScrollIntoViewIfNeeded(\n element: Element\n): element is Element & {\n scrollIntoViewIfNeeded: (centerIfNeeded?: boolean) => void;\n} {\n return (\n 'scrollIntoViewIfNeeded' in element &&\n typeof element.scrollIntoViewIfNeeded === 'function'\n );\n}\n\nexport function scrollIntoViewIfNeeded(el: Element, centerIfNeeded = false) {\n if (supportsScrollIntoViewIfNeeded(el)) {\n el.scrollIntoViewIfNeeded(centerIfNeeded);\n return;\n }\n\n if (!(el instanceof HTMLElement)) {\n return el.scrollIntoView();\n }\n\n var [parent] = getScrollableAncestors(el, {limit: 1});\n\n if (!(parent instanceof HTMLElement)) {\n return;\n }\n\n const parentComputedStyle = getWindow(parent).getComputedStyle(parent, null),\n parentBorderTopWidth = parseInt(\n parentComputedStyle.getPropertyValue('border-top-width')\n ),\n parentBorderLeftWidth = parseInt(\n parentComputedStyle.getPropertyValue('border-left-width')\n ),\n overTop = el.offsetTop - parent.offsetTop < parent.scrollTop,\n overBottom =\n el.offsetTop - parent.offsetTop + el.clientHeight - parentBorderTopWidth >\n parent.scrollTop + parent.clientHeight,\n overLeft = el.offsetLeft - parent.offsetLeft < parent.scrollLeft,\n overRight =\n el.offsetLeft -\n parent.offsetLeft +\n el.clientWidth -\n parentBorderLeftWidth >\n parent.scrollLeft + parent.clientWidth,\n alignWithTop = overTop && !overBottom;\n\n if ((overTop || overBottom) && centerIfNeeded) {\n parent.scrollTop =\n el.offsetTop -\n parent.offsetTop -\n parent.clientHeight / 2 -\n parentBorderTopWidth +\n el.clientHeight / 2;\n }\n\n if ((overLeft || overRight) && centerIfNeeded) {\n parent.scrollLeft =\n el.offsetLeft -\n parent.offsetLeft -\n parent.clientWidth / 2 -\n parentBorderLeftWidth +\n el.clientWidth / 2;\n }\n\n if ((overTop || overBottom || overLeft || overRight) && !centerIfNeeded) {\n el.scrollIntoView(alignWithTop);\n }\n}\n","export class Scheduler {\n private animationFrame: number | undefined;\n private tasks: Set<() => void> = new Set();\n\n public schedule(task: () => void) {\n this.tasks.add(task);\n\n if (!this.animationFrame) {\n this.animationFrame = requestAnimationFrame(this.flush);\n }\n }\n\n public flush = () => {\n const tasks = this.tasks;\n\n this.animationFrame = undefined;\n this.tasks = new Set();\n\n for (const task of tasks) {\n task();\n }\n };\n}\n\nexport const scheduler = new Scheduler();\n","import {Rectangle} from '@dnd-kit/geometry';\n\nimport {inverseTransform} from '../transform/inverseTransform.ts';\nimport {getBoundingRectangle} from '../bounding-rectangle/getBoundingRectangle.ts';\nimport {getWindow} from '../execution-context/getWindow.ts';\nimport {parseTransform, parseTranslate} from '../transform/index.ts';\n\nexport class DOMRectangle extends Rectangle {\n constructor(element: Element, ignoreTransforms = false) {\n let {top, left, right, bottom, width, height} =\n getBoundingRectangle(element);\n const computedStyles = getWindow(element).getComputedStyle(element);\n const parsedTransform = parseTransform(computedStyles);\n const scale = {\n x: parsedTransform?.scaleX ?? 1,\n y: parsedTransform?.scaleY ?? 1,\n };\n\n if (parsedTransform && ignoreTransforms) {\n const updated = inverseTransform(\n {top, left, right, bottom, width, height},\n parsedTransform,\n computedStyles.transformOrigin\n );\n\n top = updated.top;\n left = updated.left;\n width = updated.width;\n height = updated.height;\n }\n\n super(left, top, width, height);\n\n this.scale = scale;\n }\n}\n","import type {BoundingRectangle} from '@dnd-kit/geometry';\n\nimport {type Transform} from './parseTransform.ts';\n\nexport function inverseTransform(\n rect: BoundingRectangle,\n parsedTransform: Transform,\n transformOrigin: string\n): BoundingRectangle {\n const {scaleX, scaleY, x: translateX, y: translateY} = parsedTransform;\n const x = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin);\n const y =\n rect.top -\n translateY -\n (1 - scaleY) *\n parseFloat(transformOrigin.slice(transformOrigin.indexOf(' ') + 1));\n const w = scaleX ? rect.width / scaleX : rect.width;\n const h = scaleY ? rect.height / scaleY : rect.height;\n\n return {\n width: w,\n height: h,\n top: y,\n right: x + w,\n bottom: y + h,\n left: x,\n };\n}\n","import {supportsStyle} from '../type-guards/supportsStyle.ts';\n\ntype ExtractStringProperties<T> = {\n [K in keyof T]?: T[K] extends string ? string : never;\n};\n\nexport type StyleDeclaration = ExtractStringProperties<CSSStyleDeclaration> & {\n viewTransitionName?: string;\n};\n\nexport class Styles {\n private initial = new Map<string, string>();\n\n constructor(private element: Element) {}\n\n public set(properties: Record<string, string | number>, prefix = '') {\n const {element} = this;\n\n if (!supportsStyle(element)) {\n return;\n }\n\n for (const [key, value] of Object.entries(properties)) {\n const property = `${prefix}${key}`;\n\n if (!this.initial.has(property)) {\n this.initial.set(property, element.style.getPropertyValue(property));\n }\n\n element.style.setProperty(\n property,\n typeof value === 'string' ? value : `${value}px`\n );\n }\n }\n\n public remove(properties: string[], prefix = '') {\n const {element} = this;\n\n if (!supportsStyle(element)) {\n return;\n }\n\n for (const key of properties) {\n const property = `${prefix}${key}`;\n\n element.style.removeProperty(property);\n }\n }\n\n public reset() {\n const {element} = this;\n\n if (!supportsStyle(element)) {\n return;\n }\n\n for (const [key, value] of this.initial) {\n element.style.setProperty(key, value);\n }\n\n if (element.getAttribute('style') === '') {\n element.removeAttribute('style');\n }\n }\n}\n","import {Styles} from '../styles/index.ts';\nimport {getWindow} from '../execution-context/index.ts';\n\ninterface Arguments {\n element: Element;\n keyframes: PropertyIndexedKeyframes | Keyframe[];\n options: KeyframeAnimationOptions;\n onReady?(): void;\n onFinish?(): void;\n}\nexport function animateTransform({\n element,\n keyframes,\n options,\n onReady,\n onFinish,\n}: Arguments) {\n const styles = new Styles(element);\n const {transitionProperty} = getWindow(element).getComputedStyle(element);\n\n const properties = transitionProperty.split(', ');\n\n styles.set({\n 'transition-property': properties.length\n ? properties\n .filter(\n (property) =>\n !property.includes('transform') && !property.includes('translate')\n )\n .join(', ')\n : 'none',\n });\n\n onReady?.();\n\n element.animate(keyframes, options).finished.then(() => {\n onFinish?.();\n styles.reset();\n });\n}\n","export function parseScale(scale: string) {\n if (scale === 'none') {\n return null;\n }\n\n const values = scale.split(' ');\n const x = parseFloat(values[0]);\n const y = parseFloat(values[1]);\n\n if (isNaN(x) && isNaN(y)) {\n return null;\n }\n\n return {\n x: isNaN(x) ? y : x,\n y: isNaN(y) ? x : y,\n };\n}\n","export function parseTranslate(translate: string) {\n if (translate === 'none') {\n return null;\n }\n\n const [x, y, z = '0'] = translate.split(' ');\n const output = {x: parseFloat(x), y: parseFloat(y), z: parseInt(z, 10)};\n\n if (isNaN(output.x) && isNaN(output.y)) {\n return null;\n }\n\n return {\n x: isNaN(output.x) ? 0 : output.x,\n y: isNaN(output.y) ? 0 : output.y,\n z: isNaN(output.z) ? 0 : output.z,\n };\n}\n","import type {Coordinates} from '@dnd-kit/geometry';\n\nimport {parseScale} from './parseScale.ts';\nimport {parseTranslate} from './parseTranslate.ts';\n\nexport interface Transform extends Coordinates {\n z?: number;\n scaleX: number;\n scaleY: number;\n}\n\nexport function parseTransform(\n computedStyles: CSSStyleDeclaration\n): Transform | null {\n const {scale, transform, translate} = computedStyles;\n const parsedScale = parseScale(scale);\n const parsedTranslate = parseTranslate(translate);\n\n if (parsedScale && parsedTranslate) {\n return {\n x: parsedTranslate.x,\n y: parsedTranslate.y,\n z: parsedTranslate.z,\n scaleX: parsedScale.x,\n scaleY: parsedScale.y,\n };\n }\n\n const parsedMatrix = parseTransformMatrix(transform);\n\n if (!parsedMatrix && !parsedScale && !parsedTranslate) {\n return null;\n }\n\n return {\n x: parsedTranslate?.x ?? parsedMatrix?.x ?? 0,\n y: parsedTranslate?.y ?? parsedMatrix?.y ?? 0,\n scaleX: parsedScale?.x ?? parsedMatrix?.scaleX ?? 1,\n scaleY: parsedScale?.y ?? parsedMatrix?.scaleY ?? 1,\n };\n}\n\nfunction parseTransformMatrix(transform: string) {\n if (transform.startsWith('matrix3d(')) {\n const transformArray = transform.slice(9, -1).split(/, /);\n\n return {\n x: +transformArray[12],\n y: +transformArray[13],\n scaleX: +transformArray[0],\n scaleY: +transformArray[5],\n };\n } else if (transform.startsWith('matrix(')) {\n const transformArray = transform.slice(7, -1).split(/, /);\n\n return {\n x: +transformArray[4],\n y: +transformArray[5],\n scaleX: +transformArray[0],\n scaleY: +transformArray[3],\n };\n }\n\n return null;\n}\n","import type {Transform} from './parseTransform.ts';\n\nexport function stringifyTransform({x, y, z, scaleX, scaleY}: Transform) {\n return `translate3d(${x}px, ${y}px, ${z ?? 0}) scale(${scaleX}, ${scaleY})`;\n}\n","export function isKeyboardEvent(\n event: Event | null | undefined\n): event is KeyboardEvent {\n return event instanceof KeyboardEvent;\n}\n","interface ViewTransition {\n ready: Promise<void>;\n updateCallbackDone: Promise<void>;\n finished: Promise<void>;\n skipTransition(): void;\n}\n\nexport function supportsViewTransition(\n document: Document\n): document is Document & {\n startViewTransition(updateCallback: () => void): ViewTransition;\n} {\n return 'startViewTransition' in document;\n}\n"]}
1
+ {"version":3,"sources":["src/utilities/bounding-rectangle/getBoundingRectangle.ts","src/utilities/execution-context/canUseDOM.ts","src/utilities/type-guards/isWindow.ts","src/utilities/type-guards/isNode.ts","src/utilities/execution-context/getWindow.ts","src/utilities/type-guards/isDocument.ts","src/utilities/type-guards/isHTMLElement.ts","src/utilities/execution-context/getDocument.ts","src/utilities/bounding-rectangle/getViewportBoundingRectangle.ts","src/utilities/element/cloneElement.ts","src/utilities/type-guards/supportsStyle.ts","src/utilities/element/createPlaceholder.ts","src/utilities/event-listeners/Listeners.ts","src/utilities/popover/supportsPopover.ts","src/utilities/popover/showPopover.ts","src/utilities/scroll/documentScrollingElement.ts","src/utilities/scroll/getScrollPosition.ts","src/utilities/scroll/canScroll.ts","src/utilities/type-guards/isSVGElement.ts","src/utilities/styles/getComputedStyles.ts","src/utilities/scroll/isFixed.ts","src/utilities/scroll/isScrollable.ts","src/utilities/scroll/getScrollableAncestors.ts","src/utilities/scroll/detectScrollIntent.ts","src/utilities/scroll/scrollIntoViewIfNeeded.ts","src/utilities/scheduler/scheduler.ts","src/utilities/shapes/DOMRectangle.ts","src/utilities/transform/inverseTransform.ts","src/utilities/styles/Styles.ts","src/utilities/transform/animateTransform.ts","src/utilities/keyframes/getFinalKeyframe.ts","src/utilities/transform/parseTranslate.ts","src/utilities/transform/computeTranslate.ts","src/utilities/transform/parseScale.ts","src/utilities/transform/parseTransform.ts","src/utilities/transform/stringifyTransform.ts","src/utilities/type-guards/isKeyboardEvent.ts","src/utilities/type-guards/supportsViewTransition.ts"],"names":["target","ScrollDirection","translate","document"],"mappings":";AAEO,SAAS,qBAAqB,SAAqC;AACxE,QAAM,EAAC,OAAO,QAAQ,KAAK,MAAM,QAAQ,MAAK,IAC5C,QAAQ,sBAAsB;AAEhC,SAAO,EAAC,OAAO,QAAQ,KAAK,MAAM,QAAQ,MAAK;AACjD;;;ACNO,IAAM,YACX,OAAO,WAAW,eAClB,OAAO,OAAO,aAAa,eAC3B,OAAO,OAAO,SAAS,kBAAkB;;;ACJpC,SAAS,SAAS,SAA2C;AAClE,QAAM,gBAAgB,OAAO,UAAU,SAAS,KAAK,OAAO;AAC5D,SACE,kBAAkB;AAAA,EAElB,kBAAkB;AAEtB;;;ACPO,SAAS,OAAO,MAA4B;AACjD,SAAO,cAAc;AACvB;;;ACCO,SAAS,UAAU,QAAwC;AAChE,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,MAAM,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,OAAO,MAAM,GAAG;AACnB,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,eAAe,eAAe;AAC9C;;;ACfO,SAAS,WAAW,MAA8B;AACvD,QAAM,EAAC,SAAQ,IAAI,UAAU,IAAI;AAEjC,SAAO,gBAAgB;AACzB;;;ACFO,SAAS,cAAc,MAA0C;AACtE,MAAI,SAAS,IAAI,GAAG;AAClB,WAAO;AAAA,EACT;AAEA,SAAO,gBAAgB,UAAU,IAAI,EAAE;AACzC;;;ACLO,SAAS,YAAY,QAAmC;AAC7D,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,MAAM,GAAG;AACpB,WAAO,OAAO;AAAA,EAChB;AAEA,MAAI,CAAC,OAAO,MAAM,GAAG;AACnB,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,MAAM,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,MAAI,cAAc,MAAM,GAAG;AACzB,WAAO,OAAO;AAAA,EAChB;AAEA,SAAO;AACT;;;ACvBO,SAAS,6BACd,SACmB;AACnB,QAAM,EAAC,gBAAe,IAAI,YAAY,OAAO;AAC7C,QAAM,QAAQ,gBAAgB;AAC9B,QAAM,SAAS,gBAAgB;AAE/B,SAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;;;ACnBO,SAAS,aAAa,SAA2B;AACtD,QAAM,WAAW;AACjB,QAAM,gBAAgB,QAAQ,UAAU,IAAI;AAC5C,QAAM,SAAS,MAAM,KAAK,QAAQ,iBAAiB,QAAQ,CAAC;AAC5D,QAAM,eAAe,MAAM,KAAK,cAAc,iBAAiB,QAAQ,CAAC;AAExE,eAAa,QAAQ,CAAC,OAAO,UAAU;AACrC,UAAM,gBAAgB,OAAO,KAAK;AAElC,QAAI,QAAQ,KAAK,KAAK,QAAQ,aAAa,GAAG;AAC5C,UAAI,MAAM,SAAS,QAAQ;AACzB,cAAM,QAAQ,cAAc;AAAA,MAC9B;AAIA,UAAI,MAAM,SAAS,WAAW,MAAM,MAAM;AACxC,cAAM,OAAO,WAAW,MAAM,IAAI;AAAA,MACpC;AAAA,IACF;AAEA,QACE,iBAAiB,qBACjB,yBAAyB,qBACzB,cAAc,QAAQ,KACtB,cAAc,SAAS,GACvB;AACA,YAAM,UAAU,MAAM,WAAW,IAAI;AACrC,eAAS,UAAU,eAAe,GAAG,CAAC;AAAA,IACxC;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEA,SAAS,QACP,SACuE;AACvE,SAAO,WAAW;AACpB;;;ACrCO,SAAS,cACd,SACmD;AACnD,SACE,WAAW,WACX,QAAQ,iBAAiB,UAAU,OAAO,EAAE;AAEhD;;;ACNO,SAAS,kBACd,SACA,QAAQ,OACR,YACS;AACT,QAAM,cAAc,aAAa,OAAO;AAExC,MAAI,cAAc,WAAW,GAAG;AAC9B,QAAI,CAAC,OAAO;AACV,kBAAY,MAAM,YAAY,WAAW,GAAG;AAAA,IAC9C;AAAA,EACF;AAEA,cAAY,aAAa,SAAS,MAAM;AACxC,cAAY,aAAa,aAAa,IAAI;AAC1C,cAAY,aAAa,eAAe,MAAM;AAE9C,MAAI,YAAY;AACd,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACrD,kBAAY,aAAa,KAAK,KAAK;AAAA,IACrC;AAAA,EACF;AAEA,SAAO;AACT;;;ACjBO,IAAM,YAAN,MAAgB;AAAA,EAGrB,cAAc;AAFd,SAAQ,UAAmC,oBAAI,IAAI;AAwBnD,SAAO,QAAQ,MAAM;AACnB,iBAAW,SAAS,KAAK,SAAS;AAChC,cAAM,CAAC,QAAQ,EAAC,MAAM,UAAU,QAAO,CAAC,IAAI;AAE5C,eAAO,oBAAoB,MAAM,UAAU,OAAO;AAAA,MACpD;AAEA,WAAK,QAAQ,MAAM;AAAA,IACrB;AAAA,EA9Be;AAAA,EAER,KAAK,QAAqB,OAA2B;AAC1D,UAAM,YAAY,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACvD,UAAM,UAAgC,CAAC;AAEvC,eAAW,cAAc,WAAW;AAClC,YAAM,EAAC,MAAM,UAAU,QAAO,IAAI;AAClC,YAAM,QAA4B,CAAC,QAAQ,UAAU;AAErD,aAAO,iBAAiB,MAAM,UAAU,OAAO;AAC/C,WAAK,QAAQ,IAAI,KAAK;AACtB,cAAQ,KAAK,KAAK;AAAA,IACpB;AAEA,WAAO,SAAS,UAAU;AACxB,iBAAW,CAACA,SAAQ,EAAC,MAAM,UAAU,QAAO,CAAC,KAAK,SAAS;AACzD,QAAAA,QAAO,oBAAoB,MAAM,UAAU,OAAO;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AAWF;;;AC5CO,SAAS,gBAAgB,SAG9B;AACA,SACE,iBAAiB,WACjB,iBAAiB,WACjB,OAAO,QAAQ,gBAAgB,cAC/B,OAAO,QAAQ,gBAAgB;AAEnC;;;ACRO,SAAS,YAAY,SAAkB;AAC5C,MACE,gBAAgB,OAAO,KACvB,QAAQ,eACR,QAAQ,aAAa,SAAS,GAC9B;AACA,YAAQ,YAAY;AAAA,EACtB;AACF;;;ACPO,SAAS,2BAA2B,SAAyB;AAClE,MAAI,CAAC,aAAa,CAAC,SAAS;AAC1B,WAAO;AAAA,EACT;AAEA,SAAO,YAAY,YAAY,OAAO,EAAE;AAC1C;;;ACLO,SAAS,kBAAkB,mBAA4B;AAC5D,QAAM,OAAO,2BAA2B,iBAAiB,IACrD,6BAA6B,iBAAiB,IAC9C,qBAAqB,iBAAiB;AAE1C,QAAM,aAAa,2BAA2B,iBAAiB,IAC3D;AAAA,IACE,QAAQ,OAAO;AAAA,IACf,OAAO,OAAO;AAAA,EAChB,IACA;AAAA,IACE,QAAQ,kBAAkB;AAAA,IAC1B,OAAO,kBAAkB;AAAA,EAC3B;AACJ,QAAM,WAAW;AAAA,IACf,SAAS;AAAA,MACP,GAAG,kBAAkB;AAAA,MACrB,GAAG,kBAAkB;AAAA,IACvB;AAAA,IACA,KAAK;AAAA,MACH,GAAG,kBAAkB,cAAc,WAAW;AAAA,MAC9C,GAAG,kBAAkB,eAAe,WAAW;AAAA,IACjD;AAAA,EACF;AAEA,QAAM,QAAQ,SAAS,QAAQ,KAAK;AACpC,QAAM,SAAS,SAAS,QAAQ,KAAK;AACrC,QAAM,WAAW,SAAS,QAAQ,KAAK,SAAS,IAAI;AACpD,QAAM,UAAU,SAAS,QAAQ,KAAK,SAAS,IAAI;AAEnD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACtCO,SAAS,UAAU,mBAA4B,IAAkB;AACtE,QAAM,EAAC,OAAO,UAAU,QAAQ,SAAS,SAAQ,IAC/C,kBAAkB,iBAAiB;AAErC,QAAM,EAAC,GAAG,EAAC,IAAI,MAAM,EAAC,GAAG,GAAG,GAAG,EAAC;AAEhC,QAAM,MAAM,CAAC,SAAS,SAAS,QAAQ,IAAI,IAAI;AAC/C,QAAM,SAAS,CAAC,YAAY,SAAS,QAAQ,IAAI,IAAI,SAAS,IAAI;AAClE,QAAM,OAAO,CAAC,UAAU,SAAS,QAAQ,IAAI,IAAI;AACjD,QAAM,QAAQ,CAAC,WAAW,SAAS,QAAQ,IAAI,IAAI,SAAS,IAAI;AAEhE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,QAAQ;AAAA,IACX,GAAG,OAAO;AAAA,EACZ;AACF;;;ACrBO,SAAS,aAAa,MAAgC;AAC3D,SAAO,gBAAgB,UAAU,IAAI,EAAE;AACzC;;;ACFO,SAAS,kBAAkB,SAAkB;AAClD,SAAO,UAAU,OAAO,EAAE,iBAAiB,OAAO;AACpD;;;ACFO,SAAS,QACd,MACA,gBAAqC,kBAAkB,IAAI,GAClD;AACT,SACE,cAAc,aAAa,WAAW,cAAc,aAAa;AAErE;;;ACPO,SAAS,aACd,SACA,gBAAqC,kBAAkB,OAAO,GACrD;AACT,QAAM,gBAAgB;AACtB,QAAM,aAAa,CAAC,YAAY,aAAa,WAAW;AAExD,SACE,WAAW,KAAK,CAAC,aAAa;AAC5B,UAAM,QAAQ,cAAc,QAAqC;AAEjE,WAAO,OAAO,UAAU,WAAW,cAAc,KAAK,KAAK,IAAI;AAAA,EACjE,CAAC,KAAK;AAEV;;;ACHA,IAAM,iBAA0B;AAAA,EAC9B,gBAAgB;AAClB;AAEO,SAAS,uBACd,SACA,UAAmB,gBACL;AACd,QAAM,EAAC,OAAO,eAAc,IAAI;AAChC,QAAM,gBAAgB,oBAAI,IAAa;AAEvC,WAAS,wBAAwB,MAAiC;AAChE,QAAI,SAAS,QAAQ,cAAc,QAAQ,OAAO;AAChD,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AAEA,QACE,WAAW,IAAI,KACf,KAAK,oBAAoB,QACzB,CAAC,cAAc,IAAI,KAAK,gBAAgB,GACxC;AACA,oBAAc,IAAI,KAAK,gBAAgB;AAEvC,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,cAAc,IAAI,GAAG;AACxB,UAAI,aAAa,IAAI,GAAG;AACtB,eAAO,wBAAwB,KAAK,aAAa;AAAA,MACnD;AAEA,aAAO;AAAA,IACT;AAEA,QAAI,cAAc,IAAI,IAAI,GAAG;AAC3B,aAAO;AAAA,IACT;AAEA,UAAM,gBAAgB,kBAAkB,IAAI;AAE5C,QAAI,kBAAkB,SAAS,SAAS;AAAA,IAExC,WAAW,aAAa,MAAM,aAAa,GAAG;AAC5C,oBAAc,IAAI,IAAI;AAAA,IACxB;AAEA,QAAI,QAAQ,MAAM,aAAa,GAAG;AAChC,YAAM,EAAC,iBAAgB,IAAI,KAAK;AAEhC,UAAI;AAAkB,sBAAc,IAAI,gBAAgB;AAExD,aAAO;AAAA,IACT;AAEA,WAAO,wBAAwB,KAAK,UAAU;AAAA,EAChD;AAEA,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,SAAO,wBAAwB,OAAO;AACxC;AAEO,SAAS,2BAA2B,MAAmC;AAC5E,QAAM,CAAC,uBAAuB,IAAI,uBAAuB,MAAM,EAAC,OAAO,EAAC,CAAC;AAEzE,SAAO,2BAA2B;AACpC;;;ACjFO,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,kCAAA,UAAO,KAAP;AACA,EAAAA,kCAAA,aAAU,KAAV;AACA,EAAAA,kCAAA,aAAU,MAAV;AAHU,SAAAA;AAAA,GAAA;AAMZ,IAAM,mBAAyC;AAAA,EAC7C,GAAG;AAAA,EACH,GAAG;AACL;AAEA,IAAM,mBAAyC;AAAA,EAC7C,GAAG;AAAA,EACH,GAAG;AACL;AAOO,SAAS,mBACd,mBACA,aACA,QACA,eAAe,IACf,sBAAsB,kBACtB,YAAY,kBACZ;AACA,QAAM;AAAA,IACJ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,kBAAkB,iBAAiB;AAEvC,QAAM,YAA2C;AAAA,IAC/C,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACA,QAAM,QAAQ;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACA,QAAM,YAAY;AAAA,IAChB,QAAQ,oBAAoB,SAAS,oBAAoB;AAAA,IACzD,OAAO,oBAAoB,QAAQ,oBAAoB;AAAA,EACzD;AAEA,MACE,CAAC,SACD,YAAY,KAAK,oBAAoB,MAAM,UAAU,UACrD,QAAQ,MAAM,mBACd,YAAY,KAAK,oBAAoB,OAAO,UAAU,KACtD,YAAY,KAAK,oBAAoB,QAAQ,UAAU,GACvD;AAEA,cAAU,IAAI;AACd,UAAM,IACJ,eACA,KAAK;AAAA,OACF,oBAAoB,MAAM,UAAU,SAAS,YAAY,KACxD,UAAU;AAAA,IACd;AAAA,EACJ,WACE,CAAC,YACD,YAAY,KAAK,oBAAoB,SAAS,UAAU,UACxD,QAAQ,MAAM,oBACd,YAAY,KAAK,oBAAoB,OAAO,UAAU,KACtD,YAAY,KAAK,oBAAoB,QAAQ,UAAU,GACvD;AAEA,cAAU,IAAI;AACd,UAAM,IACJ,eACA,KAAK;AAAA,OACF,oBAAoB,SAAS,UAAU,SAAS,YAAY,KAC3D,UAAU;AAAA,IACd;AAAA,EACJ;AAEA,MACE,CAAC,WACD,YAAY,KAAK,oBAAoB,QAAQ,UAAU,SACvD,QAAQ,MAAM,oBACd,YAAY,KAAK,oBAAoB,MAAM,UAAU,KACrD,YAAY,KAAK,oBAAoB,SAAS,UAAU,GACxD;AAEA,cAAU,IAAI;AACd,UAAM,IACJ,eACA,KAAK;AAAA,OACF,oBAAoB,QAAQ,UAAU,QAAQ,YAAY,KACzD,UAAU;AAAA,IACd;AAAA,EACJ,WACE,CAAC,UACD,YAAY,KAAK,oBAAoB,OAAO,UAAU,SACtD,QAAQ,MAAM,mBACd,YAAY,KAAK,oBAAoB,MAAM,UAAU,KACrD,YAAY,KAAK,oBAAoB,SAAS,UAAU,GACxD;AAEA,cAAU,IAAI;AACd,UAAM,IACJ,eACA,KAAK;AAAA,OACF,oBAAoB,OAAO,UAAU,QAAQ,YAAY,KACxD,UAAU;AAAA,IACd;AAAA,EACJ;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ACvHA,SAAS,+BACP,SAGA;AACA,SACE,4BAA4B,WAC5B,OAAO,QAAQ,2BAA2B;AAE9C;AAEO,SAAS,uBAAuB,IAAa,iBAAiB,OAAO;AAC1E,MAAI,+BAA+B,EAAE,GAAG;AACtC,OAAG,uBAAuB,cAAc;AACxC;AAAA,EACF;AAEA,MAAI,EAAE,cAAc,cAAc;AAChC,WAAO,GAAG,eAAe;AAAA,EAC3B;AAEA,MAAI,CAAC,MAAM,IAAI,uBAAuB,IAAI,EAAC,OAAO,EAAC,CAAC;AAEpD,MAAI,EAAE,kBAAkB,cAAc;AACpC;AAAA,EACF;AAEA,QAAM,sBAAsB,kBAAkB,MAAM,GAClD,uBAAuB;AAAA,IACrB,oBAAoB,iBAAiB,kBAAkB;AAAA,EACzD,GACA,wBAAwB;AAAA,IACtB,oBAAoB,iBAAiB,mBAAmB;AAAA,EAC1D,GACA,UAAU,GAAG,YAAY,OAAO,YAAY,OAAO,WACnD,aACE,GAAG,YAAY,OAAO,YAAY,GAAG,eAAe,uBACpD,OAAO,YAAY,OAAO,cAC5B,WAAW,GAAG,aAAa,OAAO,aAAa,OAAO,YACtD,YACE,GAAG,aACD,OAAO,aACP,GAAG,cACH,wBACF,OAAO,aAAa,OAAO,aAC7B,eAAe,WAAW,CAAC;AAE7B,OAAK,WAAW,eAAe,gBAAgB;AAC7C,WAAO,YACL,GAAG,YACH,OAAO,YACP,OAAO,eAAe,IACtB,uBACA,GAAG,eAAe;AAAA,EACtB;AAEA,OAAK,YAAY,cAAc,gBAAgB;AAC7C,WAAO,aACL,GAAG,aACH,OAAO,aACP,OAAO,cAAc,IACrB,wBACA,GAAG,cAAc;AAAA,EACrB;AAEA,OAAK,WAAW,cAAc,YAAY,cAAc,CAAC,gBAAgB;AACvE,OAAG,eAAe,YAAY;AAAA,EAChC;AACF;;;ACvEO,IAAM,YAAN,MAAgB;AAAA,EAAhB;AAEL,SAAQ,QAAyB,oBAAI,IAAI;AAUzC,SAAO,QAAQ,MAAM;AACnB,YAAM,QAAQ,KAAK;AAEnB,WAAK,iBAAiB;AACtB,WAAK,QAAQ,oBAAI,IAAI;AAErB,iBAAW,QAAQ,OAAO;AACxB,aAAK;AAAA,MACP;AAAA,IACF;AAAA;AAAA,EAjBO,SAAS,MAAkB;AAChC,SAAK,MAAM,IAAI,IAAI;AAEnB,QAAI,CAAC,KAAK,gBAAgB;AACxB,WAAK,iBAAiB,sBAAsB,KAAK,KAAK;AAAA,IACxD;AAAA,EACF;AAYF;AAEO,IAAM,YAAY,IAAI,UAAU;;;ACxBvC,SAAQ,iBAAgB;;;ACIjB,SAAS,iBACd,MACA,iBACA,iBACmB;AACnB,QAAM,EAAC,QAAQ,QAAQ,GAAG,YAAY,GAAG,WAAU,IAAI;AACvD,QAAM,IAAI,KAAK,OAAO,cAAc,IAAI,UAAU,WAAW,eAAe;AAC5E,QAAM,IACJ,KAAK,MACL,cACC,IAAI,UACH,WAAW,gBAAgB,MAAM,gBAAgB,QAAQ,GAAG,IAAI,CAAC,CAAC;AACtE,QAAM,IAAI,SAAS,KAAK,QAAQ,SAAS,KAAK;AAC9C,QAAM,IAAI,SAAS,KAAK,SAAS,SAAS,KAAK;AAE/C,SAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,OAAO,IAAI;AAAA,IACX,QAAQ,IAAI;AAAA,IACZ,MAAM;AAAA,EACR;AACF;;;ACjBO,IAAM,SAAN,MAAa;AAAA,EAGlB,YAAoB,SAAkB;AAAlB;AAFpB,SAAQ,UAAU,oBAAI,IAAoB;AAAA,EAEH;AAAA,EAEhC,IAAI,YAA6C,SAAS,IAAI;AACnE,UAAM,EAAC,QAAO,IAAI;AAElB,QAAI,CAAC,cAAc,OAAO,GAAG;AAC3B;AAAA,IACF;AAEA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACrD,YAAM,WAAW,GAAG,MAAM,GAAG,GAAG;AAEhC,UAAI,CAAC,KAAK,QAAQ,IAAI,QAAQ,GAAG;AAC/B,aAAK,QAAQ,IAAI,UAAU,QAAQ,MAAM,iBAAiB,QAAQ,CAAC;AAAA,MACrE;AAEA,cAAQ,MAAM;AAAA,QACZ;AAAA,QACA,OAAO,UAAU,WAAW,QAAQ,GAAG,KAAK;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAAA,EAEO,OAAO,YAAsB,SAAS,IAAI;AAC/C,UAAM,EAAC,QAAO,IAAI;AAElB,QAAI,CAAC,cAAc,OAAO,GAAG;AAC3B;AAAA,IACF;AAEA,eAAW,OAAO,YAAY;AAC5B,YAAM,WAAW,GAAG,MAAM,GAAG,GAAG;AAEhC,cAAQ,MAAM,eAAe,QAAQ;AAAA,IACvC;AAAA,EACF;AAAA,EAEO,QAAQ;AACb,UAAM,EAAC,QAAO,IAAI;AAElB,QAAI,CAAC,cAAc,OAAO,GAAG;AAC3B;AAAA,IACF;AAEA,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,SAAS;AACvC,cAAQ,MAAM,YAAY,KAAK,KAAK;AAAA,IACtC;AAEA,QAAI,QAAQ,aAAa,OAAO,MAAM,IAAI;AACxC,cAAQ,gBAAgB,OAAO;AAAA,IACjC;AAAA,EACF;AACF;;;ACvDO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAc;AACZ,QAAM,SAAS,IAAI,OAAO,OAAO;AACjC,QAAM,EAAC,mBAAkB,IAAI,kBAAkB,OAAO;AAEtD,QAAM,aAAa,mBAAmB,MAAM,IAAI;AAEhD,SAAO,IAAI;AAAA,IACT,uBAAuB,WAAW,SAC9B,WACG;AAAA,MACC,CAAC,aACC,CAAC,SAAS,SAAS,WAAW,KAAK,CAAC,SAAS,SAAS,WAAW;AAAA,IACrE,EACC,KAAK,IAAI,IACZ;AAAA,EACN,CAAC;AAED,YAAU;AAEV,UAAQ,QAAQ,WAAW,OAAO,EAAE,SAAS,KAAK,MAAM;AACtD,eAAW;AACX,WAAO,MAAM;AAAA,EACf,CAAC;AACH;;;ACvCO,SAAS,iBAAiB,SAAmC;AAClE,QAAM,aAAa,QAAQ,cAAc;AAEzC,MAAI,WAAW,SAAS,GAAG;AACzB,UAAM,CAAC,SAAS,IAAI;AACpB,UAAM,EAAC,OAAM,IAAI;AACjB,UAAM,YACJ,kBAAkB,iBAAiB,OAAO,aAAa,IAAI,CAAC;AAE9D,QAAI,UAAU,SAAS,GAAG;AACxB,aAAO,YAAY,UAAU,SAAS,CAAC;AAAA,IACzC;AAAA,EACF;AAEA,SAAO;AACT;;;ACfO,SAAS,eAAe,WAAmB;AAChD,MAAI,cAAc,QAAQ;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,UAAU,MAAM,GAAG;AAC3C,QAAM,SAAS,EAAC,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,GAAG,SAAS,GAAG,EAAE,EAAC;AAEtE,MAAI,MAAM,OAAO,CAAC,KAAK,MAAM,OAAO,CAAC,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAG,MAAM,OAAO,CAAC,IAAI,IAAI,OAAO;AAAA,IAChC,GAAG,MAAM,OAAO,CAAC,IAAI,IAAI,OAAO;AAAA,IAChC,GAAG,MAAM,OAAO,CAAC,IAAI,IAAI,OAAO;AAAA,EAClC;AACF;;;ACbO,SAAS,iBAAiB,SAI/B;AACA,QAAM,WAAW,iBAAiB,OAAO;AAEzC,MAAI,UAAU;AACZ,UAAM,EAAC,WAAAC,aAAY,GAAE,IAAI;AAEzB,QAAI,OAAOA,eAAc,UAAU;AACjC,YAAM,iBAAiB,eAAeA,UAAS;AAE/C,UAAI,gBAAgB;AAClB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,QAAM,EAAC,UAAS,IAAI,kBAAkB,OAAO;AAE7C,MAAI,WAAW;AACb,UAAM,iBAAiB,eAAe,SAAS;AAE/C,QAAI,gBAAgB;AAClB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO,EAAC,GAAG,GAAG,GAAG,GAAG,GAAG,EAAC;AAC1B;;;AClCO,SAAS,WAAW,OAAe;AACxC,MAAI,UAAU,QAAQ;AACpB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,MAAM,MAAM,GAAG;AAC9B,QAAM,IAAI,WAAW,OAAO,CAAC,CAAC;AAC9B,QAAM,IAAI,WAAW,OAAO,CAAC,CAAC;AAE9B,MAAI,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAG,MAAM,CAAC,IAAI,IAAI;AAAA,IAClB,GAAG,MAAM,CAAC,IAAI,IAAI;AAAA,EACpB;AACF;;;ACNO,SAAS,eAAe,gBAIV;AACnB,QAAM,EAAC,OAAO,WAAW,UAAS,IAAI;AACtC,QAAM,cAAc,WAAW,KAAK;AACpC,QAAM,kBAAkB,eAAe,SAAS;AAChD,QAAM,eAAe,qBAAqB,SAAS;AAEnD,MAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,iBAAiB;AACrD,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB;AAAA,IACtB,GAAG,aAAa,KAAK;AAAA,IACrB,GAAG,aAAa,KAAK;AAAA,EACvB;AAEA,QAAM,sBAAsB;AAAA,IAC1B,GAAG,iBAAiB,KAAK;AAAA,IACzB,GAAG,iBAAiB,KAAK;AAAA,EAC3B;AAEA,QAAM,mBAAmB;AAAA,IACvB,GAAG,cAAc,KAAK;AAAA,IACtB,GAAG,cAAc,KAAK;AAAA,IACtB,QAAQ,cAAc,UAAU;AAAA,IAChC,QAAQ,cAAc,UAAU;AAAA,EAClC;AAEA,SAAO;AAAA,IACL,GAAG,oBAAoB,IAAI,iBAAiB;AAAA,IAC5C,GAAG,oBAAoB,IAAI,iBAAiB;AAAA,IAC5C,GAAG,iBAAiB,KAAK;AAAA,IACzB,QAAQ,gBAAgB,IAAI,iBAAiB;AAAA,IAC7C,QAAQ,gBAAgB,IAAI,iBAAiB;AAAA,EAC/C;AACF;AAEA,SAAS,qBAAqB,WAAmB;AAC/C,MAAI,UAAU,WAAW,WAAW,GAAG;AACrC,UAAM,iBAAiB,UAAU,MAAM,GAAG,EAAE,EAAE,MAAM,IAAI;AAExD,WAAO;AAAA,MACL,GAAG,CAAC,eAAe,EAAE;AAAA,MACrB,GAAG,CAAC,eAAe,EAAE;AAAA,MACrB,QAAQ,CAAC,eAAe,CAAC;AAAA,MACzB,QAAQ,CAAC,eAAe,CAAC;AAAA,IAC3B;AAAA,EACF,WAAW,UAAU,WAAW,SAAS,GAAG;AAC1C,UAAM,iBAAiB,UAAU,MAAM,GAAG,EAAE,EAAE,MAAM,IAAI;AAExD,WAAO;AAAA,MACL,GAAG,CAAC,eAAe,CAAC;AAAA,MACpB,GAAG,CAAC,eAAe,CAAC;AAAA,MACpB,QAAQ,CAAC,eAAe,CAAC;AAAA,MACzB,QAAQ,CAAC,eAAe,CAAC;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO;AACT;;;ACvEO,SAAS,mBAAmB,EAAC,GAAG,GAAG,GAAG,QAAQ,OAAM,GAAc;AACvE,SAAO,eAAe,CAAC,OAAO,CAAC,OAAO,KAAK,CAAC,WAAW,MAAM,KAAK,MAAM;AAC1E;;;ATIO,IAAM,eAAN,cAA2B,UAAU;AAAA,EAC1C,YAAY,SAAkB,mBAAmB,OAAO;AACtD,QAAI,EAAC,KAAK,MAAM,OAAO,QAAQ,OAAO,OAAM,IAC1C,qBAAqB,OAAO;AAC9B,UAAM,iBAAiB,kBAAkB,OAAO;AAChD,UAAM,kBAAkB,eAAe,cAAc;AACrD,UAAM,QAAQ;AAAA,MACZ,GAAG,iBAAiB,UAAU;AAAA,MAC9B,GAAG,iBAAiB,UAAU;AAAA,IAChC;AACA,UAAM,qBAAqB,sBAAsB,OAAO;AAExD,QAAI,oBAAoB,oBAAoB,qBAAqB;AAC/D,YAAM,UAAU;AAAA,QACd,EAAC,KAAK,MAAM,OAAO,QAAQ,OAAO,OAAM;AAAA,QACxC;AAAA,QACA,eAAe;AAAA,MACjB;AAEA,YAAM,QAAQ;AACd,aAAO,QAAQ;AACf,cAAQ,QAAQ;AAChB,eAAS,QAAQ;AAAA,IACnB;AAEA,QAAI,sBAAsB,CAAC,kBAAkB;AAC3C,YAAM,MAAM,mBAAmB;AAC/B,aAAO,OAAO,mBAAmB;AACjC,cAAQ,QAAQ,mBAAmB;AACnC,eAAS,SAAS,mBAAmB;AACrC,YAAM,IAAI,mBAAmB;AAC7B,YAAM,IAAI,mBAAmB;AAAA,IAC/B;AAEA,UAAM,MAAM,KAAK,OAAO,MAAM;AAE9B,SAAK,QAAQ;AAAA,EACf;AACF;AAKA,SAAS,sBAAsB,SAAoC;AACjE,QAAM,WAAW,iBAAiB,OAAO;AAEzC,MAAI,UAAU;AACZ,UAAM,EAAC,YAAY,IAAI,YAAY,IAAI,QAAQ,GAAE,IAAI;AAErD,QAAI,aAAa,aAAa,OAAO;AACnC,aAAO,eAAe;AAAA,QACpB,WAAW,OAAO,cAAc,WAAW,YAAY;AAAA,QACvD,WAAW,OAAO,cAAc,WAAW,YAAY;AAAA,QACvD,OAAO,OAAO,UAAU,WAAW,QAAQ;AAAA,MAC7C,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;;;AUnEO,SAAS,gBACd,OACwB;AACxB,SAAO,iBAAiB;AAC1B;;;ACGO,SAAS,uBACdC,WAGA;AACA,SAAO,yBAAyBA;AAClC","sourcesContent":["import {BoundingRectangle} from '@dnd-kit/geometry';\n\nexport function getBoundingRectangle(element: Element): BoundingRectangle {\n const {width, height, top, left, bottom, right} =\n element.getBoundingClientRect();\n\n return {width, height, top, left, bottom, right};\n}\n","// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nexport const canUseDOM =\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined';\n","export function isWindow(element: Object): element is typeof window {\n const elementString = Object.prototype.toString.call(element);\n return (\n elementString === '[object Window]' ||\n // In Electron context the Window object serializes to [object global]\n elementString === '[object global]'\n );\n}\n","export function isNode(node: Object): node is Node {\n return 'nodeType' in node;\n}\n","import {isWindow} from '../type-guards/isWindow.ts';\nimport {isNode} from '../type-guards/isNode.ts';\n\nexport function getWindow(target: Event['target']): typeof window {\n if (!target) {\n return window;\n }\n\n if (isWindow(target)) {\n return target;\n }\n\n if (!isNode(target)) {\n return window;\n }\n\n return target.ownerDocument?.defaultView ?? window;\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\n\nexport function isDocument(node: Node): node is Document {\n const {Document} = getWindow(node);\n\n return node instanceof Document;\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\n\nimport {isWindow} from './isWindow.ts';\n\nexport function isHTMLElement(node: Node | Window): node is HTMLElement {\n if (isWindow(node)) {\n return false;\n }\n\n return node instanceof getWindow(node).HTMLElement;\n}\n","import {isDocument} from '../type-guards/isDocument.ts';\nimport {isHTMLElement} from '../type-guards/isHTMLElement.ts';\nimport {isNode} from '../type-guards/isNode.ts';\nimport {isWindow} from '../type-guards/isWindow.ts';\n\nexport function getDocument(target: Event['target']): Document {\n if (!target) {\n return document;\n }\n\n if (isWindow(target)) {\n return target.document;\n }\n\n if (!isNode(target)) {\n return document;\n }\n\n if (isDocument(target)) {\n return target;\n }\n\n if (isHTMLElement(target)) {\n return target.ownerDocument;\n }\n\n return document;\n}\n","import type {BoundingRectangle} from '@dnd-kit/geometry';\n\nimport {getDocument} from '../execution-context/index.ts';\n\nexport function getViewportBoundingRectangle(\n element: Element\n): BoundingRectangle {\n const {documentElement} = getDocument(element);\n const width = documentElement.clientWidth;\n const height = documentElement.clientHeight;\n\n return {\n top: 0,\n left: 0,\n right: width,\n bottom: height,\n width,\n height,\n };\n}\n","export function cloneElement(element: Element): Element {\n const selector = 'input, textarea, select, canvas, [contenteditable]';\n const clonedElement = element.cloneNode(true) as HTMLElement;\n const fields = Array.from(element.querySelectorAll(selector));\n const clonedFields = Array.from(clonedElement.querySelectorAll(selector));\n\n clonedFields.forEach((field, index) => {\n const originalField = fields[index];\n\n if (isField(field) && isField(originalField)) {\n if (field.type !== 'file') {\n field.value = originalField.value;\n }\n\n // Fixes an issue with original radio buttons losing their value once the\n // clone is inserted in the DOM, as radio button `name` attributes must be unique\n if (field.type === 'radio' && field.name) {\n field.name = `Cloned__${field.name}`;\n }\n }\n\n if (\n field instanceof HTMLCanvasElement &&\n originalField instanceof HTMLCanvasElement &&\n originalField.width > 0 &&\n originalField.height > 0\n ) {\n const destCtx = field.getContext('2d');\n destCtx?.drawImage(originalField, 0, 0);\n }\n });\n\n return clonedElement;\n}\n\nfunction isField(\n element: Element\n): element is HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement {\n return 'value' in element;\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\n\nexport function supportsStyle(\n element: Element\n): element is Element & {style: CSSStyleDeclaration} {\n return (\n 'style' in element &&\n element.style instanceof getWindow(element).CSSStyleDeclaration\n );\n}\n","import {cloneElement} from './cloneElement.ts';\nimport {supportsStyle} from '../type-guards/supportsStyle.ts';\n\nexport function createPlaceholder(\n element: Element,\n clone = false,\n attributes?: Record<string, string>\n): Element {\n const placeholder = cloneElement(element);\n\n if (supportsStyle(placeholder)) {\n if (!clone) {\n placeholder.style.setProperty('opacity', '0');\n }\n }\n\n placeholder.setAttribute('inert', 'true');\n placeholder.setAttribute('tab-index', '-1');\n placeholder.setAttribute('aria-hidden', 'true');\n\n if (attributes) {\n for (const [key, value] of Object.entries(attributes)) {\n placeholder.setAttribute(key, value);\n }\n }\n\n return placeholder;\n}\n","export interface EventListenerDescriptor {\n type: string;\n listener(event: Event): void;\n options?: AddEventListenerOptions;\n}\n\ntype EventListenerInput = EventListenerDescriptor[] | EventListenerDescriptor;\n\ntype EventListenerEntry = [EventTarget, EventListenerDescriptor];\n\nexport class Listeners {\n private entries: Set<EventListenerEntry> = new Set();\n\n constructor() {}\n\n public bind(target: EventTarget, input: EventListenerInput) {\n const listeners = Array.isArray(input) ? input : [input];\n const entries: EventListenerEntry[] = [];\n\n for (const descriptor of listeners) {\n const {type, listener, options} = descriptor;\n const entry: EventListenerEntry = [target, descriptor];\n\n target.addEventListener(type, listener, options);\n this.entries.add(entry);\n entries.push(entry);\n }\n\n return function cleanup() {\n for (const [target, {type, listener, options}] of entries) {\n target.removeEventListener(type, listener, options);\n }\n };\n }\n\n public clear = () => {\n for (const entry of this.entries) {\n const [target, {type, listener, options}] = entry;\n\n target.removeEventListener(type, listener, options);\n }\n\n this.entries.clear();\n };\n}\n","export function supportsPopover(element: Element): element is Element & {\n showPopover(): void;\n hidePopover(): void;\n} {\n return (\n 'showPopover' in element &&\n 'hidePopover' in element &&\n typeof element.showPopover === 'function' &&\n typeof element.hidePopover === 'function'\n );\n}\n","import {supportsPopover} from './supportsPopover.ts';\n\nexport function showPopover(element: Element) {\n if (\n supportsPopover(element) &&\n element.isConnected &&\n element.hasAttribute('popover')\n ) {\n element.showPopover();\n }\n}\n","import {canUseDOM} from '../execution-context/canUseDOM.ts';\nimport {getDocument} from '../execution-context/getDocument.ts';\n\nexport function isDocumentScrollingElement(element: Element | null) {\n if (!canUseDOM || !element) {\n return false;\n }\n\n return element === getDocument(element).scrollingElement;\n}\n","import {getBoundingRectangle} from '../bounding-rectangle/getBoundingRectangle.ts';\nimport {getViewportBoundingRectangle} from '../bounding-rectangle/getViewportBoundingRectangle.ts';\nimport {isDocumentScrollingElement} from './documentScrollingElement.ts';\n\nexport function getScrollPosition(scrollableElement: Element) {\n const rect = isDocumentScrollingElement(scrollableElement)\n ? getViewportBoundingRectangle(scrollableElement)\n : getBoundingRectangle(scrollableElement);\n\n const dimensions = isDocumentScrollingElement(scrollableElement)\n ? {\n height: window.innerHeight,\n width: window.innerWidth,\n }\n : {\n height: scrollableElement.clientHeight,\n width: scrollableElement.clientWidth,\n };\n const position = {\n current: {\n x: scrollableElement.scrollLeft,\n y: scrollableElement.scrollTop,\n },\n max: {\n x: scrollableElement.scrollWidth - dimensions.width,\n y: scrollableElement.scrollHeight - dimensions.height,\n },\n };\n\n const isTop = position.current.y <= 0;\n const isLeft = position.current.x <= 0;\n const isBottom = position.current.y >= position.max.y;\n const isRight = position.current.x >= position.max.x;\n\n return {\n rect,\n position,\n isTop,\n isLeft,\n isBottom,\n isRight,\n };\n}\n","import type {Coordinates} from '@dnd-kit/geometry';\n\nimport {getScrollPosition} from './getScrollPosition.ts';\n\nexport function canScroll(scrollableElement: Element, by?: Coordinates) {\n const {isTop, isBottom, isLeft, isRight, position} =\n getScrollPosition(scrollableElement);\n\n const {x, y} = by ?? {x: 0, y: 0};\n\n const top = !isTop && position.current.y + y > 0;\n const bottom = !isBottom && position.current.y + y < position.max.y;\n const left = !isLeft && position.current.x + x > 0;\n const right = !isRight && position.current.x + x < position.max.x;\n\n return {\n top,\n bottom,\n left,\n right,\n x: left || right,\n y: top || bottom,\n };\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\n\nexport function isSVGElement(node: Node): node is SVGElement {\n return node instanceof getWindow(node).SVGElement;\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\n\nexport function getComputedStyles(element: Element) {\n return getWindow(element).getComputedStyle(element);\n}\n","import {getComputedStyles} from '../styles/getComputedStyles.ts';\n\nexport function isFixed(\n node: Element,\n computedStyle: CSSStyleDeclaration = getComputedStyles(node)\n): boolean {\n return (\n computedStyle.position === 'fixed' || computedStyle.position === 'sticky'\n );\n}\n","import {getComputedStyles} from '../styles/getComputedStyles.ts';\n\nexport function isScrollable(\n element: HTMLElement,\n computedStyle: CSSStyleDeclaration = getComputedStyles(element)\n): boolean {\n const overflowRegex = /(auto|scroll|overlay)/;\n const properties = ['overflow', 'overflowX', 'overflowY'];\n\n return (\n properties.find((property) => {\n const value = computedStyle[property as keyof CSSStyleDeclaration];\n\n return typeof value === 'string' ? overflowRegex.test(value) : false;\n }) != null\n );\n}\n","import {getWindow} from '../execution-context/getWindow.ts';\nimport {isDocument} from '../type-guards/isDocument.ts';\nimport {isHTMLElement} from '../type-guards/isHTMLElement.ts';\nimport {isSVGElement} from '../type-guards/isSVGElement.ts';\nimport {getComputedStyles} from '../styles/getComputedStyles.ts';\nimport {isFixed} from './isFixed.ts';\nimport {isScrollable} from './isScrollable.ts';\n\ninterface Options {\n limit?: number;\n excludeElement?: boolean;\n}\n\nconst defaultOptions: Options = {\n excludeElement: true,\n};\n\nexport function getScrollableAncestors(\n element: Node | null,\n options: Options = defaultOptions\n): Set<Element> {\n const {limit, excludeElement} = options;\n const scrollParents = new Set<Element>();\n\n function findScrollableAncestors(node: Node | null): Set<Element> {\n if (limit != null && scrollParents.size >= limit) {\n return scrollParents;\n }\n\n if (!node) {\n return scrollParents;\n }\n\n if (\n isDocument(node) &&\n node.scrollingElement != null &&\n !scrollParents.has(node.scrollingElement)\n ) {\n scrollParents.add(node.scrollingElement);\n\n return scrollParents;\n }\n\n if (!isHTMLElement(node)) {\n if (isSVGElement(node)) {\n return findScrollableAncestors(node.parentElement);\n }\n\n return scrollParents;\n }\n\n if (scrollParents.has(node)) {\n return scrollParents;\n }\n\n const computedStyle = getComputedStyles(node);\n\n if (excludeElement && node === element) {\n // no-op\n } else if (isScrollable(node, computedStyle)) {\n scrollParents.add(node);\n }\n\n if (isFixed(node, computedStyle)) {\n const {scrollingElement} = node.ownerDocument;\n\n if (scrollingElement) scrollParents.add(scrollingElement);\n\n return scrollParents;\n }\n\n return findScrollableAncestors(node.parentNode);\n }\n\n if (!element) {\n return scrollParents;\n }\n\n return findScrollableAncestors(element);\n}\n\nexport function getFirstScrollableAncestor(node: Node | null): Element | null {\n const [firstScrollableAncestor] = getScrollableAncestors(node, {limit: 1});\n\n return firstScrollableAncestor ?? null;\n}\n","import type {Axis, Coordinates} from '@dnd-kit/geometry';\n\nimport {getScrollPosition} from './getScrollPosition.ts';\n\nexport enum ScrollDirection {\n Idle = 0,\n Forward = 1,\n Reverse = -1,\n}\n\nconst defaultThreshold: Record<Axis, number> = {\n x: 0.2,\n y: 0.2,\n};\n\nconst defaultTolerance: Record<Axis, number> = {\n x: 10,\n y: 10,\n};\n\ninterface ScrollIntent {\n x: ScrollDirection;\n y: ScrollDirection;\n}\n\nexport function detectScrollIntent(\n scrollableElement: Element,\n coordinates: Coordinates,\n intent?: ScrollIntent,\n acceleration = 25,\n thresholdPercentage = defaultThreshold,\n tolerance = defaultTolerance\n) {\n const {\n rect: scrollContainerRect,\n isTop,\n isBottom,\n isLeft,\n isRight,\n } = getScrollPosition(scrollableElement);\n\n const direction: Record<Axis, ScrollDirection> = {\n x: ScrollDirection.Idle,\n y: ScrollDirection.Idle,\n };\n const speed = {\n x: 0,\n y: 0,\n };\n const threshold = {\n height: scrollContainerRect.height * thresholdPercentage.y,\n width: scrollContainerRect.width * thresholdPercentage.x,\n };\n\n if (\n !isTop &&\n coordinates.y <= scrollContainerRect.top + threshold.height &&\n intent?.y !== ScrollDirection.Forward &&\n coordinates.x >= scrollContainerRect.left - tolerance.x &&\n coordinates.x <= scrollContainerRect.right + tolerance.x\n ) {\n // Scroll Up\n direction.y = ScrollDirection.Reverse;\n speed.y =\n acceleration *\n Math.abs(\n (scrollContainerRect.top + threshold.height - coordinates.y) /\n threshold.height\n );\n } else if (\n !isBottom &&\n coordinates.y >= scrollContainerRect.bottom - threshold.height &&\n intent?.y !== ScrollDirection.Reverse &&\n coordinates.x >= scrollContainerRect.left - tolerance.x &&\n coordinates.x <= scrollContainerRect.right + tolerance.x\n ) {\n // Scroll Down\n direction.y = ScrollDirection.Forward;\n speed.y =\n acceleration *\n Math.abs(\n (scrollContainerRect.bottom - threshold.height - coordinates.y) /\n threshold.height\n );\n }\n\n if (\n !isRight &&\n coordinates.x >= scrollContainerRect.right - threshold.width &&\n intent?.x !== ScrollDirection.Reverse &&\n coordinates.y >= scrollContainerRect.top - tolerance.y &&\n coordinates.y <= scrollContainerRect.bottom + tolerance.y\n ) {\n // Scroll Right\n direction.x = ScrollDirection.Forward;\n speed.x =\n acceleration *\n Math.abs(\n (scrollContainerRect.right - threshold.width - coordinates.x) /\n threshold.width\n );\n } else if (\n !isLeft &&\n coordinates.x <= scrollContainerRect.left + threshold.width &&\n intent?.x !== ScrollDirection.Forward &&\n coordinates.y >= scrollContainerRect.top - tolerance.y &&\n coordinates.y <= scrollContainerRect.bottom + tolerance.y\n ) {\n // Scroll Left\n direction.x = ScrollDirection.Reverse;\n speed.x =\n acceleration *\n Math.abs(\n (scrollContainerRect.left + threshold.width - coordinates.x) /\n threshold.width\n );\n }\n\n return {\n direction,\n speed,\n };\n}\n","import {getComputedStyles} from '../styles/getComputedStyles.ts';\nimport {getScrollableAncestors} from './getScrollableAncestors.ts';\n\nfunction supportsScrollIntoViewIfNeeded(\n element: Element\n): element is Element & {\n scrollIntoViewIfNeeded: (centerIfNeeded?: boolean) => void;\n} {\n return (\n 'scrollIntoViewIfNeeded' in element &&\n typeof element.scrollIntoViewIfNeeded === 'function'\n );\n}\n\nexport function scrollIntoViewIfNeeded(el: Element, centerIfNeeded = false) {\n if (supportsScrollIntoViewIfNeeded(el)) {\n el.scrollIntoViewIfNeeded(centerIfNeeded);\n return;\n }\n\n if (!(el instanceof HTMLElement)) {\n return el.scrollIntoView();\n }\n\n var [parent] = getScrollableAncestors(el, {limit: 1});\n\n if (!(parent instanceof HTMLElement)) {\n return;\n }\n\n const parentComputedStyle = getComputedStyles(parent),\n parentBorderTopWidth = parseInt(\n parentComputedStyle.getPropertyValue('border-top-width')\n ),\n parentBorderLeftWidth = parseInt(\n parentComputedStyle.getPropertyValue('border-left-width')\n ),\n overTop = el.offsetTop - parent.offsetTop < parent.scrollTop,\n overBottom =\n el.offsetTop - parent.offsetTop + el.clientHeight - parentBorderTopWidth >\n parent.scrollTop + parent.clientHeight,\n overLeft = el.offsetLeft - parent.offsetLeft < parent.scrollLeft,\n overRight =\n el.offsetLeft -\n parent.offsetLeft +\n el.clientWidth -\n parentBorderLeftWidth >\n parent.scrollLeft + parent.clientWidth,\n alignWithTop = overTop && !overBottom;\n\n if ((overTop || overBottom) && centerIfNeeded) {\n parent.scrollTop =\n el.offsetTop -\n parent.offsetTop -\n parent.clientHeight / 2 -\n parentBorderTopWidth +\n el.clientHeight / 2;\n }\n\n if ((overLeft || overRight) && centerIfNeeded) {\n parent.scrollLeft =\n el.offsetLeft -\n parent.offsetLeft -\n parent.clientWidth / 2 -\n parentBorderLeftWidth +\n el.clientWidth / 2;\n }\n\n if ((overTop || overBottom || overLeft || overRight) && !centerIfNeeded) {\n el.scrollIntoView(alignWithTop);\n }\n}\n","export class Scheduler {\n private animationFrame: number | undefined;\n private tasks: Set<() => void> = new Set();\n\n public schedule(task: () => void) {\n this.tasks.add(task);\n\n if (!this.animationFrame) {\n this.animationFrame = requestAnimationFrame(this.flush);\n }\n }\n\n public flush = () => {\n const tasks = this.tasks;\n\n this.animationFrame = undefined;\n this.tasks = new Set();\n\n for (const task of tasks) {\n task();\n }\n };\n}\n\nexport const scheduler = new Scheduler();\n","import {Rectangle} from '@dnd-kit/geometry';\n\nimport {inverseTransform} from '../transform/inverseTransform.ts';\nimport {getBoundingRectangle} from '../bounding-rectangle/getBoundingRectangle.ts';\nimport {getComputedStyles} from '../styles/getComputedStyles.ts';\nimport {parseTransform, type Transform} from '../transform/index.ts';\nimport {getFinalKeyframe} from '../keyframes/getFinalKeyframe.ts';\n\nexport class DOMRectangle extends Rectangle {\n constructor(element: Element, ignoreTransforms = false) {\n let {top, left, right, bottom, width, height} =\n getBoundingRectangle(element);\n const computedStyles = getComputedStyles(element);\n const parsedTransform = parseTransform(computedStyles);\n const scale = {\n x: parsedTransform?.scaleX ?? 1,\n y: parsedTransform?.scaleY ?? 1,\n };\n const projectedTransform = getProjectedTransform(element);\n\n if (parsedTransform && (ignoreTransforms || projectedTransform)) {\n const updated = inverseTransform(\n {top, left, right, bottom, width, height},\n parsedTransform,\n computedStyles.transformOrigin\n );\n\n top = updated.top;\n left = updated.left;\n width = updated.width;\n height = updated.height;\n }\n\n if (projectedTransform && !ignoreTransforms) {\n top = top + projectedTransform.y;\n left = left + projectedTransform.x;\n width = width * projectedTransform.scaleX;\n height = height * projectedTransform.scaleY;\n scale.x = projectedTransform.scaleX;\n scale.y = projectedTransform.scaleY;\n }\n\n super(left, top, width, height);\n\n this.scale = scale;\n }\n}\n\n/*\n * Get the projected transform of an element based on its final keyframe\n */\nfunction getProjectedTransform(element: Element): Transform | null {\n const keyframe = getFinalKeyframe(element);\n\n if (keyframe) {\n const {transform = '', translate = '', scale = ''} = keyframe;\n\n if (transform || translate || scale) {\n return parseTransform({\n transform: typeof transform === 'string' ? transform : '',\n translate: typeof translate === 'string' ? translate : '',\n scale: typeof scale === 'string' ? scale : '',\n });\n }\n }\n\n return null;\n}\n","import type {BoundingRectangle} from '@dnd-kit/geometry';\n\nimport {type Transform} from './parseTransform.ts';\n\nexport function inverseTransform(\n rect: BoundingRectangle,\n parsedTransform: Transform,\n transformOrigin: string\n): BoundingRectangle {\n const {scaleX, scaleY, x: translateX, y: translateY} = parsedTransform;\n const x = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin);\n const y =\n rect.top -\n translateY -\n (1 - scaleY) *\n parseFloat(transformOrigin.slice(transformOrigin.indexOf(' ') + 1));\n const w = scaleX ? rect.width / scaleX : rect.width;\n const h = scaleY ? rect.height / scaleY : rect.height;\n\n return {\n width: w,\n height: h,\n top: y,\n right: x + w,\n bottom: y + h,\n left: x,\n };\n}\n","import {supportsStyle} from '../type-guards/supportsStyle.ts';\n\ntype ExtractStringProperties<T> = {\n [K in keyof T]?: T[K] extends string ? string : never;\n};\n\nexport type StyleDeclaration = ExtractStringProperties<CSSStyleDeclaration> & {\n viewTransitionName?: string;\n};\n\nexport class Styles {\n private initial = new Map<string, string>();\n\n constructor(private element: Element) {}\n\n public set(properties: Record<string, string | number>, prefix = '') {\n const {element} = this;\n\n if (!supportsStyle(element)) {\n return;\n }\n\n for (const [key, value] of Object.entries(properties)) {\n const property = `${prefix}${key}`;\n\n if (!this.initial.has(property)) {\n this.initial.set(property, element.style.getPropertyValue(property));\n }\n\n element.style.setProperty(\n property,\n typeof value === 'string' ? value : `${value}px`\n );\n }\n }\n\n public remove(properties: string[], prefix = '') {\n const {element} = this;\n\n if (!supportsStyle(element)) {\n return;\n }\n\n for (const key of properties) {\n const property = `${prefix}${key}`;\n\n element.style.removeProperty(property);\n }\n }\n\n public reset() {\n const {element} = this;\n\n if (!supportsStyle(element)) {\n return;\n }\n\n for (const [key, value] of this.initial) {\n element.style.setProperty(key, value);\n }\n\n if (element.getAttribute('style') === '') {\n element.removeAttribute('style');\n }\n }\n}\n","import {Styles} from '../styles/index.ts';\nimport {getComputedStyles} from '../styles/getComputedStyles.ts';\n\ninterface Arguments {\n element: Element;\n keyframes: PropertyIndexedKeyframes | Keyframe[];\n options: KeyframeAnimationOptions;\n onReady?(): void;\n onFinish?(): void;\n}\nexport function animateTransform({\n element,\n keyframes,\n options,\n onReady,\n onFinish,\n}: Arguments) {\n const styles = new Styles(element);\n const {transitionProperty} = getComputedStyles(element);\n\n const properties = transitionProperty.split(', ');\n\n styles.set({\n 'transition-property': properties.length\n ? properties\n .filter(\n (property) =>\n !property.includes('transform') && !property.includes('translate')\n )\n .join(', ')\n : 'none',\n });\n\n onReady?.();\n\n element.animate(keyframes, options).finished.then(() => {\n onFinish?.();\n styles.reset();\n });\n}\n","export function getFinalKeyframe(element: Element): Keyframe | null {\n const animations = element.getAnimations();\n\n if (animations.length > 0) {\n const [animation] = animations;\n const {effect} = animation;\n const keyframes =\n effect instanceof KeyframeEffect ? effect.getKeyframes() : [];\n\n if (keyframes.length > 0) {\n return keyframes?.[keyframes.length - 1];\n }\n }\n\n return null;\n}\n","export function parseTranslate(translate: string) {\n if (translate === 'none') {\n return null;\n }\n\n const [x, y, z = '0'] = translate.split(' ');\n const output = {x: parseFloat(x), y: parseFloat(y), z: parseInt(z, 10)};\n\n if (isNaN(output.x) && isNaN(output.y)) {\n return null;\n }\n\n return {\n x: isNaN(output.x) ? 0 : output.x,\n y: isNaN(output.y) ? 0 : output.y,\n z: isNaN(output.z) ? 0 : output.z,\n };\n}\n","import {getFinalKeyframe} from '../keyframes/getFinalKeyframe.ts';\nimport {getComputedStyles} from '../styles/getComputedStyles.ts';\nimport {parseTranslate} from './parseTranslate.ts';\n\nexport function computeTranslate(element: Element): {\n x: number;\n y: number;\n z: number;\n} {\n const keyframe = getFinalKeyframe(element);\n\n if (keyframe) {\n const {translate = ''} = keyframe;\n\n if (typeof translate === 'string') {\n const finalTranslate = parseTranslate(translate);\n\n if (finalTranslate) {\n return finalTranslate;\n }\n }\n }\n\n const {translate} = getComputedStyles(element);\n\n if (translate) {\n const finalTranslate = parseTranslate(translate);\n\n if (finalTranslate) {\n return finalTranslate;\n }\n }\n\n return {x: 0, y: 0, z: 0};\n}\n","export function parseScale(scale: string) {\n if (scale === 'none') {\n return null;\n }\n\n const values = scale.split(' ');\n const x = parseFloat(values[0]);\n const y = parseFloat(values[1]);\n\n if (isNaN(x) && isNaN(y)) {\n return null;\n }\n\n return {\n x: isNaN(x) ? y : x,\n y: isNaN(y) ? x : y,\n };\n}\n","import type {Coordinates} from '@dnd-kit/geometry';\n\nimport {parseScale} from './parseScale.ts';\nimport {parseTranslate} from './parseTranslate.ts';\n\nexport interface Transform extends Coordinates {\n z?: number;\n scaleX: number;\n scaleY: number;\n}\n\nexport function parseTransform(computedStyles: {\n scale: string;\n transform: string;\n translate: string;\n}): Transform | null {\n const {scale, transform, translate} = computedStyles;\n const parsedScale = parseScale(scale);\n const parsedTranslate = parseTranslate(translate);\n const parsedMatrix = parseTransformMatrix(transform);\n\n if (!parsedMatrix && !parsedScale && !parsedTranslate) {\n return null;\n }\n\n const normalizedScale = {\n x: parsedScale?.x ?? 1,\n y: parsedScale?.y ?? 1,\n };\n\n const normalizedTranslate = {\n x: parsedTranslate?.x ?? 0,\n y: parsedTranslate?.y ?? 0,\n };\n\n const normalizedMatrix = {\n x: parsedMatrix?.x ?? 0,\n y: parsedMatrix?.y ?? 0,\n scaleX: parsedMatrix?.scaleX ?? 1,\n scaleY: parsedMatrix?.scaleY ?? 1,\n };\n\n return {\n x: normalizedTranslate.x + normalizedMatrix.x,\n y: normalizedTranslate.y + normalizedMatrix.y,\n z: parsedTranslate?.z ?? 0,\n scaleX: normalizedScale.x * normalizedMatrix.scaleX,\n scaleY: normalizedScale.y * normalizedMatrix.scaleY,\n };\n}\n\nfunction parseTransformMatrix(transform: string) {\n if (transform.startsWith('matrix3d(')) {\n const transformArray = transform.slice(9, -1).split(/, /);\n\n return {\n x: +transformArray[12],\n y: +transformArray[13],\n scaleX: +transformArray[0],\n scaleY: +transformArray[5],\n };\n } else if (transform.startsWith('matrix(')) {\n const transformArray = transform.slice(7, -1).split(/, /);\n\n return {\n x: +transformArray[4],\n y: +transformArray[5],\n scaleX: +transformArray[0],\n scaleY: +transformArray[3],\n };\n }\n\n return null;\n}\n","import type {Transform} from './parseTransform.ts';\n\nexport function stringifyTransform({x, y, z, scaleX, scaleY}: Transform) {\n return `translate3d(${x}px, ${y}px, ${z ?? 0}) scale(${scaleX}, ${scaleY})`;\n}\n","export function isKeyboardEvent(\n event: Event | null | undefined\n): event is KeyboardEvent {\n return event instanceof KeyboardEvent;\n}\n","interface ViewTransition {\n ready: Promise<void>;\n updateCallbackDone: Promise<void>;\n finished: Promise<void>;\n skipTransition(): void;\n}\n\nexport function supportsViewTransition(\n document: Document\n): document is Document & {\n startViewTransition(updateCallback: () => void): ViewTransition;\n} {\n return 'startViewTransition' in document;\n}\n"]}
package/utilities.d.cts CHANGED
@@ -92,6 +92,8 @@ declare class Styles {
92
92
  reset(): void;
93
93
  }
94
94
 
95
+ declare function getComputedStyles(element: Element): CSSStyleDeclaration;
96
+
95
97
  declare function isKeyboardEvent(event: Event | null | undefined): event is KeyboardEvent;
96
98
 
97
99
  interface ViewTransition {
@@ -117,15 +119,31 @@ interface Arguments {
117
119
  }
118
120
  declare function animateTransform({ element, keyframes, options, onReady, onFinish, }: Arguments): void;
119
121
 
122
+ declare function computeTranslate(element: Element): {
123
+ x: number;
124
+ y: number;
125
+ z: number;
126
+ };
127
+
120
128
  interface Transform extends Coordinates {
121
129
  z?: number;
122
130
  scaleX: number;
123
131
  scaleY: number;
124
132
  }
125
- declare function parseTransform(computedStyles: CSSStyleDeclaration): Transform | null;
133
+ declare function parseTransform(computedStyles: {
134
+ scale: string;
135
+ transform: string;
136
+ translate: string;
137
+ }): Transform | null;
126
138
 
127
139
  declare function inverseTransform(rect: BoundingRectangle, parsedTransform: Transform, transformOrigin: string): BoundingRectangle;
128
140
 
141
+ declare function parseTranslate(translate: string): {
142
+ x: number;
143
+ y: number;
144
+ z: number;
145
+ } | null;
146
+
129
147
  declare function stringifyTransform({ x, y, z, scaleX, scaleY }: Transform): string;
130
148
 
131
- export { DOMRectangle, Listeners, Scheduler, ScrollDirection, Styles, type Transform, animateTransform, canScroll, canUseDOM, cloneElement, createPlaceholder, detectScrollIntent, getBoundingRectangle, getDocument, getFirstScrollableAncestor, getScrollableAncestors, getViewportBoundingRectangle, getWindow, inverseTransform, isDocumentScrollingElement, isKeyboardEvent, parseTransform, scheduler, scrollIntoViewIfNeeded, showPopover, stringifyTransform, supportsPopover, supportsStyle, supportsViewTransition };
149
+ export { DOMRectangle, Listeners, Scheduler, ScrollDirection, Styles, type Transform, animateTransform, canScroll, canUseDOM, cloneElement, computeTranslate, createPlaceholder, detectScrollIntent, getBoundingRectangle, getComputedStyles, getDocument, getFirstScrollableAncestor, getScrollableAncestors, getViewportBoundingRectangle, getWindow, inverseTransform, isDocumentScrollingElement, isKeyboardEvent, parseTransform, parseTranslate, scheduler, scrollIntoViewIfNeeded, showPopover, stringifyTransform, supportsPopover, supportsStyle, supportsViewTransition };
package/utilities.d.ts CHANGED
@@ -92,6 +92,8 @@ declare class Styles {
92
92
  reset(): void;
93
93
  }
94
94
 
95
+ declare function getComputedStyles(element: Element): CSSStyleDeclaration;
96
+
95
97
  declare function isKeyboardEvent(event: Event | null | undefined): event is KeyboardEvent;
96
98
 
97
99
  interface ViewTransition {
@@ -117,15 +119,31 @@ interface Arguments {
117
119
  }
118
120
  declare function animateTransform({ element, keyframes, options, onReady, onFinish, }: Arguments): void;
119
121
 
122
+ declare function computeTranslate(element: Element): {
123
+ x: number;
124
+ y: number;
125
+ z: number;
126
+ };
127
+
120
128
  interface Transform extends Coordinates {
121
129
  z?: number;
122
130
  scaleX: number;
123
131
  scaleY: number;
124
132
  }
125
- declare function parseTransform(computedStyles: CSSStyleDeclaration): Transform | null;
133
+ declare function parseTransform(computedStyles: {
134
+ scale: string;
135
+ transform: string;
136
+ translate: string;
137
+ }): Transform | null;
126
138
 
127
139
  declare function inverseTransform(rect: BoundingRectangle, parsedTransform: Transform, transformOrigin: string): BoundingRectangle;
128
140
 
141
+ declare function parseTranslate(translate: string): {
142
+ x: number;
143
+ y: number;
144
+ z: number;
145
+ } | null;
146
+
129
147
  declare function stringifyTransform({ x, y, z, scaleX, scaleY }: Transform): string;
130
148
 
131
- export { DOMRectangle, Listeners, Scheduler, ScrollDirection, Styles, type Transform, animateTransform, canScroll, canUseDOM, cloneElement, createPlaceholder, detectScrollIntent, getBoundingRectangle, getDocument, getFirstScrollableAncestor, getScrollableAncestors, getViewportBoundingRectangle, getWindow, inverseTransform, isDocumentScrollingElement, isKeyboardEvent, parseTransform, scheduler, scrollIntoViewIfNeeded, showPopover, stringifyTransform, supportsPopover, supportsStyle, supportsViewTransition };
149
+ export { DOMRectangle, Listeners, Scheduler, ScrollDirection, Styles, type Transform, animateTransform, canScroll, canUseDOM, cloneElement, computeTranslate, createPlaceholder, detectScrollIntent, getBoundingRectangle, getComputedStyles, getDocument, getFirstScrollableAncestor, getScrollableAncestors, getViewportBoundingRectangle, getWindow, inverseTransform, isDocumentScrollingElement, isKeyboardEvent, parseTransform, parseTranslate, scheduler, scrollIntoViewIfNeeded, showPopover, stringifyTransform, supportsPopover, supportsStyle, supportsViewTransition };