@appsurify-testmap/rrweb-all 2.1.3-alpha.3 → 3.1.1-alpha.1

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.
@@ -352,6 +352,8 @@ function stringifyRule(rule2, sheetHref) {
352
352
  return importStringified;
353
353
  } else {
354
354
  let ruleStringified = rule2.cssText;
355
+ if (rule2.type === CSSRule.KEYFRAMES_RULE || rule2.type === CSSRule.KEYFRAME_RULE)
356
+ ;
355
357
  if (isCSSStyleRule(rule2) && rule2.selectorText.includes(":")) {
356
358
  ruleStringified = fixSafariColons(ruleStringified);
357
359
  }
@@ -580,19 +582,19 @@ function splitCssText(cssText, style, _testNoPxNorm = false) {
580
582
  _testNoPxNorm
581
583
  );
582
584
  const jLimit = 100;
583
- let j = 3;
584
- for (; j < textContentNorm.length; j++) {
585
+ let j2 = 3;
586
+ for (; j2 < textContentNorm.length; j2++) {
585
587
  if (
586
588
  // keep consuming css identifiers (to get a decent chunk more quickly)
587
- textContentNorm[j].match(/[a-zA-Z0-9]/) || // substring needs to be unique to this section
588
- textContentNorm.indexOf(textContentNorm.substring(0, j), 1) !== -1
589
+ textContentNorm[j2].match(/[a-zA-Z0-9]/) || // substring needs to be unique to this section
590
+ textContentNorm.indexOf(textContentNorm.substring(0, j2), 1) !== -1
589
591
  ) {
590
592
  continue;
591
593
  }
592
594
  break;
593
595
  }
594
- for (; j < textContentNorm.length; j++) {
595
- let startSubstring = textContentNorm.substring(0, j);
596
+ for (; j2 < textContentNorm.length; j2++) {
597
+ let startSubstring = textContentNorm.substring(0, j2);
596
598
  let cssNormSplits = cssTextNorm.split(startSubstring);
597
599
  let splitNorm = -1;
598
600
  if (cssNormSplits.length === 2) {
@@ -609,11 +611,11 @@ function splitCssText(cssText, style, _testNoPxNorm = false) {
609
611
  splits.push(cssText);
610
612
  return splits;
611
613
  }
612
- j = jLimit + 1;
613
- } else if (j === textContentNorm.length - 1) {
614
+ j2 = jLimit + 1;
615
+ } else if (j2 === textContentNorm.length - 1) {
614
616
  splitNorm = cssTextNorm.indexOf(startSubstring);
615
617
  }
616
- if (cssNormSplits.length >= 2 && j > jLimit) {
618
+ if (cssNormSplits.length >= 2 && j2 > jLimit) {
617
619
  const prevTextContent = childNodes2[i2 - 1].textContent;
618
620
  if (prevTextContent && typeof prevTextContent === "string") {
619
621
  const prevMinLength = normalizeCssString(prevTextContent).length;
@@ -624,29 +626,29 @@ function splitCssText(cssText, style, _testNoPxNorm = false) {
624
626
  }
625
627
  }
626
628
  if (splitNorm !== -1) {
627
- let k = Math.floor(splitNorm / normFactor);
628
- for (; k > 0 && k < cssText.length; ) {
629
+ let k2 = Math.floor(splitNorm / normFactor);
630
+ for (; k2 > 0 && k2 < cssText.length; ) {
629
631
  iterCount += 1;
630
632
  if (iterCount > 50 * childNodes2.length) {
631
633
  splits.push(cssText);
632
634
  return splits;
633
635
  }
634
636
  const normPart = normalizeCssString(
635
- cssText.substring(0, k),
637
+ cssText.substring(0, k2),
636
638
  _testNoPxNorm
637
639
  );
638
640
  if (normPart.length === splitNorm) {
639
- splits.push(cssText.substring(0, k));
640
- cssText = cssText.substring(k);
641
+ splits.push(cssText.substring(0, k2));
642
+ cssText = cssText.substring(k2);
641
643
  cssTextNorm = cssTextNorm.substring(splitNorm);
642
644
  break;
643
645
  } else if (normPart.length < splitNorm) {
644
- k += Math.max(
646
+ k2 += Math.max(
645
647
  1,
646
648
  Math.floor((splitNorm - normPart.length) / normFactor)
647
649
  );
648
650
  } else {
649
- k -= Math.max(
651
+ k2 -= Math.max(
650
652
  1,
651
653
  Math.floor((normPart.length - splitNorm) * normFactor)
652
654
  );
@@ -664,102 +666,6 @@ function splitCssText(cssText, style, _testNoPxNorm = false) {
664
666
  function markCssSplits(cssText, style) {
665
667
  return splitCssText(cssText, style).join("/* rr_split */");
666
668
  }
667
- function isSelectorUnique(selector, target) {
668
- try {
669
- const matches = document.querySelectorAll(selector);
670
- return matches.length === 1 && matches[0] === target;
671
- } catch (e2) {
672
- return false;
673
- }
674
- }
675
- function buildSelector(node2) {
676
- if (!(node2 instanceof Element))
677
- return null;
678
- if (node2.id) {
679
- return `#${CSS.escape(node2.id)}`;
680
- }
681
- const parts = [];
682
- const tag = node2.tagName.toLowerCase();
683
- if (node2.classList.length) {
684
- parts.push(...Array.from(node2.classList).map((cls) => `.${CSS.escape(cls)}`));
685
- }
686
- Array.from(node2.attributes).forEach((attr) => {
687
- if (attr.name.startsWith("data-")) {
688
- parts.push(`[${attr.name}="${CSS.escape(attr.value)}"]`);
689
- }
690
- });
691
- const shortSelector = `${tag}${parts.join("")}`;
692
- if (isSelectorUnique(shortSelector, node2)) {
693
- return shortSelector;
694
- }
695
- const pathParts = [];
696
- let current = node2;
697
- while (current && current.nodeType === Node.ELEMENT_NODE) {
698
- const parent = current.parentElement;
699
- const tagName = current.tagName.toLowerCase();
700
- let nth = "";
701
- if (parent) {
702
- const siblings = Array.from(parent.children).filter(
703
- (el) => el.tagName.toLowerCase() === tagName
704
- );
705
- if (siblings.length > 1) {
706
- nth = `:nth-of-type(${siblings.indexOf(current) + 1})`;
707
- }
708
- }
709
- pathParts.unshift(`${tagName}${nth}`);
710
- current = parent;
711
- }
712
- return pathParts.join(" > ") || null;
713
- }
714
- function buildXPath(node2) {
715
- switch (node2.nodeType) {
716
- case Node.DOCUMENT_NODE:
717
- return "/";
718
- case Node.DOCUMENT_TYPE_NODE:
719
- return "/html/doctype";
720
- case Node.ELEMENT_NODE: {
721
- const element = node2;
722
- if (element.id) {
723
- return `//*[@id="${CSS.escape(element.id)}"]`;
724
- }
725
- if (element.tagName.toLowerCase() === "html")
726
- return "/html";
727
- if (element === document.head)
728
- return "/html/head";
729
- if (element === document.body)
730
- return "/html/body";
731
- const parent = element.parentNode;
732
- if (!parent)
733
- return "";
734
- const tag = element.tagName.toLowerCase();
735
- const siblings = Array.from(parent.children).filter(
736
- (el) => el.tagName.toLowerCase() === tag
737
- );
738
- const index2 = siblings.length > 1 ? `[${siblings.indexOf(element) + 1}]` : "";
739
- return `${buildXPath(parent)}/${tag}${index2}`;
740
- }
741
- case Node.TEXT_NODE:
742
- case Node.CDATA_SECTION_NODE:
743
- case Node.COMMENT_NODE: {
744
- const parent = node2.parentNode;
745
- if (!parent)
746
- return "";
747
- const typeMap = {
748
- [Node.TEXT_NODE]: "text()",
749
- [Node.CDATA_SECTION_NODE]: "text()",
750
- // CDATA ≡ text() в XPath
751
- [Node.COMMENT_NODE]: "comment()"
752
- };
753
- const sameTypeSiblings = Array.from(parent.childNodes).filter(
754
- (sibling) => sibling.nodeType === node2.nodeType
755
- );
756
- const index2 = sameTypeSiblings.length > 1 ? `[${sameTypeSiblings.indexOf(node2)}]` : "";
757
- return `${buildXPath(parent)}/${typeMap[node2.nodeType]}${index2}`;
758
- }
759
- default:
760
- return "";
761
- }
762
- }
763
669
  function isTextVisible(n2) {
764
670
  var _a2;
765
671
  const parent = index$1.parentNode(n2);
@@ -892,6 +798,1309 @@ try {
892
798
  }
893
799
  } catch (error) {
894
800
  }
801
+ const L = {
802
+ ANCHOR: 0.4,
803
+ PATH: 0.3,
804
+ TARGET: 0.2,
805
+ UNIQUENESS: 0.1
806
+ };
807
+ const I = {
808
+ SEMANTIC_TAG: 0.5,
809
+ ROLE: 0.3,
810
+ ARIA_LABEL: 0.1,
811
+ STABLE_ID: 0.1,
812
+ TEST_MARKER: 0.05,
813
+ DEPTH_PENALTY_THRESHOLD: 5,
814
+ DEPTH_PENALTY_FACTOR: 0.05,
815
+ DEGRADED_SCORE: 0.3
816
+ };
817
+ const ct = {
818
+ MIN_CONFIDENCE_FOR_SKIP: 0.7
819
+ };
820
+ const X = [
821
+ "form",
822
+ "main",
823
+ "nav",
824
+ "section",
825
+ "article",
826
+ "footer",
827
+ "header"
828
+ ];
829
+ const K = [
830
+ "form",
831
+ "navigation",
832
+ "main",
833
+ "region",
834
+ "contentinfo",
835
+ "complementary",
836
+ "banner",
837
+ "search"
838
+ ];
839
+ const lt = [
840
+ // HTML5 Semantic
841
+ "article",
842
+ "aside",
843
+ "details",
844
+ "figcaption",
845
+ "figure",
846
+ "footer",
847
+ "header",
848
+ "main",
849
+ "mark",
850
+ "nav",
851
+ "section",
852
+ "summary",
853
+ "time",
854
+ // Form elements
855
+ "button",
856
+ "datalist",
857
+ "fieldset",
858
+ "form",
859
+ "input",
860
+ "label",
861
+ "legend",
862
+ "meter",
863
+ "optgroup",
864
+ "option",
865
+ "output",
866
+ "progress",
867
+ "select",
868
+ "textarea",
869
+ // Interactive
870
+ "a",
871
+ "audio",
872
+ "video",
873
+ "canvas",
874
+ "dialog",
875
+ "menu",
876
+ // Text content
877
+ "blockquote",
878
+ "dd",
879
+ "dl",
880
+ "dt",
881
+ "hr",
882
+ "li",
883
+ "ol",
884
+ "ul",
885
+ "p",
886
+ "pre",
887
+ "h1",
888
+ "h2",
889
+ "h3",
890
+ "h4",
891
+ "h5",
892
+ "h6",
893
+ // Table
894
+ "caption",
895
+ "col",
896
+ "colgroup",
897
+ "table",
898
+ "tbody",
899
+ "td",
900
+ "tfoot",
901
+ "th",
902
+ "thead",
903
+ "tr",
904
+ // SVG
905
+ "svg",
906
+ "path",
907
+ "circle",
908
+ "rect",
909
+ "line",
910
+ "polyline",
911
+ "polygon",
912
+ "ellipse",
913
+ "g",
914
+ "text",
915
+ "use"
916
+ ];
917
+ const w = {
918
+ // Test attributes (highest priority)
919
+ "data-testid": 100,
920
+ "data-qa": 99,
921
+ "data-cy": 98,
922
+ "data-test": 97,
923
+ "data-test-id": 96,
924
+ // ARIA (accessibility semantics)
925
+ "aria-label": 90,
926
+ "aria-labelledby": 85,
927
+ "aria-describedby": 80,
928
+ // Semantic HTML attributes
929
+ name: 75,
930
+ href: 70,
931
+ // for <a>
932
+ src: 70,
933
+ // for <img>, <script>, etc.
934
+ type: 65,
935
+ role: 60,
936
+ alt: 55,
937
+ title: 50,
938
+ for: 45,
939
+ placeholder: 40,
940
+ // Any data-* attribute (if not above)
941
+ "data-*": 30,
942
+ // Any aria-* attribute (if not above)
943
+ "aria-*": 25
944
+ };
945
+ const B = /* @__PURE__ */ new Set([
946
+ "id",
947
+ // handled separately
948
+ "class",
949
+ // handled separately
950
+ "style",
951
+ // unstable
952
+ "xmlns",
953
+ // service attribute for SVG
954
+ "tabindex",
955
+ // can change
956
+ "contenteditable"
957
+ ]);
958
+ const ut = {
959
+ maxPathDepth: 10,
960
+ enableSvgFingerprint: true,
961
+ confidenceThreshold: 0.1,
962
+ fallbackToBody: true,
963
+ includeUtilityClasses: false,
964
+ source: "dom-dsl"
965
+ };
966
+ function D(n2) {
967
+ return !!(/^[a-z]+-\d+$/i.test(n2) || /^[a-z]+(-[a-z]+)+-\d+$/i.test(n2) || /^[a-z]+(_[a-z]+)*_\d+$/i.test(n2) || /^\d+$/.test(n2) || /^:[a-z0-9]+:$/i.test(n2) || /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(n2) || /^[a-z]{1,3}[A-Za-z0-9]{8,}$/.test(n2) && (/\d/.test(n2) || /[A-Z]/.test(n2)) || /^radix-/.test(n2) || /^mui-\d+$/.test(n2));
968
+ }
969
+ const G = /* @__PURE__ */ new Set([
970
+ "aria-labelledby",
971
+ "aria-describedby",
972
+ "aria-controls",
973
+ "aria-owns",
974
+ "aria-activedescendant",
975
+ "for",
976
+ "form",
977
+ "list",
978
+ "headers",
979
+ "aria-details",
980
+ "aria-errormessage",
981
+ "aria-flowto"
982
+ ]);
983
+ function V(n2) {
984
+ return n2.trim().split(/\s+/).some((e2) => D(e2));
985
+ }
986
+ class ft {
987
+ constructor(t2, e2) {
988
+ var _a2;
989
+ this.maxDepth = (_a2 = t2.maxPathDepth) != null ? _a2 : 10, this.cache = e2;
990
+ }
991
+ /**
992
+ * Finds the best anchor element for the target
993
+ * @param target - Target element to find anchor for
994
+ * @returns Anchor result or null if not found
995
+ */
996
+ findAnchor(t2) {
997
+ if (this.cache) {
998
+ const i2 = this.cache.getAnchor(t2);
999
+ if (i2 !== void 0)
1000
+ return i2;
1001
+ }
1002
+ let e2 = t2.parentElement, s2 = 0, r2 = null;
1003
+ for (; e2 && s2 < this.maxDepth; ) {
1004
+ if (e2.tagName.toLowerCase() === "body")
1005
+ return r2 || {
1006
+ element: e2,
1007
+ score: I.DEGRADED_SCORE,
1008
+ tier: "C",
1009
+ depth: s2
1010
+ };
1011
+ const i2 = this.scoreAnchor(e2);
1012
+ if (i2 > 0) {
1013
+ const o2 = this.applyDepthPenalty(i2, s2), l2 = this.getTier(e2), u2 = { element: e2, score: o2, tier: l2, depth: s2 };
1014
+ if (l2 === "A")
1015
+ return u2;
1016
+ (!r2 || o2 > r2.score) && (r2 = u2);
1017
+ }
1018
+ e2 = e2.parentElement, s2++;
1019
+ }
1020
+ const a2 = r2;
1021
+ return this.cache && this.cache.setAnchor(t2, a2), a2;
1022
+ }
1023
+ /**
1024
+ * Scores an element as anchor candidate (without depth penalty)
1025
+ * @param element - Element to score
1026
+ * @returns Raw score from 0 to 1
1027
+ */
1028
+ scoreAnchor(t2) {
1029
+ let e2 = 0;
1030
+ const s2 = t2.tagName.toLowerCase();
1031
+ X.includes(s2) && (e2 += I.SEMANTIC_TAG);
1032
+ const r2 = t2.getAttribute("role");
1033
+ r2 && K.includes(r2) && (e2 += I.ROLE), (t2.hasAttribute("aria-label") || t2.hasAttribute("aria-labelledby")) && (e2 += I.ARIA_LABEL);
1034
+ const a2 = t2.id;
1035
+ return a2 && !D(a2) && (e2 += I.STABLE_ID), (t2.hasAttribute("data-testid") || t2.hasAttribute("data-qa") || t2.hasAttribute("data-test")) && (e2 += I.TEST_MARKER), Math.min(e2, 1);
1036
+ }
1037
+ /**
1038
+ * Applies depth penalty to score
1039
+ * Following SPECIFICATION.md §7: depthPenalty = (depth - threshold) * factor
1040
+ */
1041
+ applyDepthPenalty(t2, e2) {
1042
+ if (e2 <= I.DEPTH_PENALTY_THRESHOLD)
1043
+ return t2;
1044
+ const s2 = (e2 - I.DEPTH_PENALTY_THRESHOLD) * I.DEPTH_PENALTY_FACTOR;
1045
+ return Math.max(0, t2 - s2);
1046
+ }
1047
+ /**
1048
+ * Determines the tier of an anchor element
1049
+ */
1050
+ getTier(t2) {
1051
+ const e2 = t2.tagName.toLowerCase();
1052
+ if (X.includes(e2))
1053
+ return "A";
1054
+ const s2 = t2.getAttribute("role");
1055
+ return s2 && K.includes(s2) ? "B" : "C";
1056
+ }
1057
+ }
1058
+ const gt = [
1059
+ // CSS-in-JS
1060
+ /^css-[a-z0-9]+$/i,
1061
+ /^sc-[a-z0-9]+-\d+$/i,
1062
+ /^[a-z]{5,8}$/i,
1063
+ // Short generated classes (abcdef)
1064
+ // Material-UI / MUI
1065
+ /^Mui[A-Z]\w+-\w+-\w+/,
1066
+ /^makeStyles-\w+-\d+$/,
1067
+ // JSS
1068
+ /^jss\d+$/,
1069
+ // Emotion / Linaria
1070
+ /^(emotion|linaria)-[a-z0-9]+/i,
1071
+ // Component libraries with hashes
1072
+ /^(chakra|tw-|ant-)[a-z0-9]+-\w+/i,
1073
+ // Hash-based (hashes in classes)
1074
+ /-[a-f0-9]{6,}$/i,
1075
+ /^_[a-z0-9]{5,}$/i,
1076
+ /\d{5,}/
1077
+ // 5+ digits in a row
1078
+ ];
1079
+ const pt = [
1080
+ // === FIX 4: Tailwind arbitrary values and variants (highest priority) ===
1081
+ /^\[/,
1082
+ // Any arbitrary value or variant starting with [ (e.g., [&_svg]:..., [mask-type:luminance])
1083
+ // === FIX 4: Pseudo-class variants (must be before specific patterns) ===
1084
+ /^(first|last|odd|even|only|first-of-type|last-of-type|only-of-type):/,
1085
+ // first:, last:, etc.
1086
+ /^(hover|focus|active|disabled|enabled|checked|indeterminate|default|required|valid|invalid|in-range|out-of-range|placeholder-shown|autofill|read-only):/,
1087
+ // State pseudo-classes
1088
+ /^(focus-within|focus-visible|visited|target|open):/,
1089
+ // Advanced pseudo-classes
1090
+ // === FIX 4: Responsive variants (must be before specific patterns) ===
1091
+ /^(sm|md|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl):/,
1092
+ // === FIX 4: Dark mode and directional variants ===
1093
+ /^dark:/,
1094
+ /^(rtl|ltr):/,
1095
+ // === FIX 4: Group and peer variants ===
1096
+ /^(group|peer)(-hover|-focus|-active)?:/,
1097
+ // === FIX 4: Tailwind utilities with fraction values ===
1098
+ /\/([\d.]+|full|auto|screen)$/,
1099
+ // /50, /100, /full, /auto, /screen
1100
+ // === FIX 4: Positioning utilities ===
1101
+ /^(inset|top|right|bottom|left)(-|$)/,
1102
+ // inset-0, top-0, left-0
1103
+ // === Layout & Display ===
1104
+ /^(flex|inline-flex|grid|block|inline|inline-block|hidden|visible)$/,
1105
+ /^(absolute|relative|fixed|sticky|static)$/,
1106
+ // === Flexbox & Grid ===
1107
+ /^(items|justify|content|self|place)-/,
1108
+ /^flex-(row|col|wrap|nowrap|1|auto|initial|none)/,
1109
+ /^grid-(cols|rows|flow)/,
1110
+ // === Spacing (Tailwind) ===
1111
+ /^(gap|space)-/,
1112
+ /^[mp][trblxy]?-(\d+|auto|px)$/,
1113
+ // === Negative Tailwind utilities (margins, positioning, transforms) ===
1114
+ /^-[mp][trblxy]?-\d+$/,
1115
+ // -m-4, -mt-2, -mx-4, -px-4, -py-2
1116
+ /^-(top|right|bottom|left|inset)-\d+$/,
1117
+ // -top-4, -bottom-6, -left-6, -inset-0
1118
+ /^-z-\d+$/,
1119
+ // -z-10, -z-20
1120
+ /^-space-[xy]-\d+$/,
1121
+ // -space-x-2, -space-y-4
1122
+ /^-translate-[xy]-\d+$/,
1123
+ // -translate-x-4, -translate-y-2
1124
+ /^-rotate-\d+$/,
1125
+ // -rotate-45, -rotate-90
1126
+ /^-scale-\d+$/,
1127
+ // -scale-50, -scale-75
1128
+ /^-skew-[xy]-\d+$/,
1129
+ // -skew-x-12, -skew-y-6
1130
+ // === Sizing ===
1131
+ /^(w|h|min-w|min-h|max-w|max-h|size)-/,
1132
+ // === Colors & Styling ===
1133
+ // Note: text-* can be semantic (text-muted, text-primary) or utility (text-center, text-lg)
1134
+ // More specific patterns for utility text-* classes
1135
+ /^text-(center|left|right|justify|start|end|xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)$/,
1136
+ /^text-(uppercase|lowercase|capitalize|normal-case|underline|line-through|no-underline)$/,
1137
+ /^text-(truncate|ellipsis|clip)$/,
1138
+ /^(bg|border|ring|shadow|outline)-/,
1139
+ /^rounded(-|$)/,
1140
+ // === Typography ===
1141
+ /^(font|leading|tracking|whitespace|break|truncate)-/,
1142
+ /^(uppercase|lowercase|capitalize|normal-case)$/,
1143
+ // === Transform & Animation (IMPORTANT!) ===
1144
+ /^(transform|transition|duration|delay|ease|animate)-/,
1145
+ /^(scale|rotate|translate|skew)-/,
1146
+ /^transform$/,
1147
+ /^backdrop-blur-/,
1148
+ /^motion-/,
1149
+ // Framer Motion
1150
+ /^(fade|slide|zoom|bounce|pulse|spin|ping)-/,
1151
+ // animations
1152
+ // === Overflow & Scrolling ===
1153
+ /^(overflow|overscroll|scroll)-/,
1154
+ /^object-(contain|cover|fill|none|scale-down)$/,
1155
+ // === Interactivity ===
1156
+ /^(cursor|pointer-events|select|resize)-/,
1157
+ // === Visibility & Opacity ===
1158
+ /^(opacity|z)-/,
1159
+ /^(visible|invisible|collapse)$/,
1160
+ // === Bootstrap utilities ===
1161
+ /^d-(none|inline|inline-block|block|grid|table|flex)$/,
1162
+ /^(float|clearfix|text)-(left|right|center|justify|start|end)$/,
1163
+ /^(m|p)[trblxy]?-[0-5]$/,
1164
+ /^(w|h)-(25|50|75|100|auto)$/,
1165
+ // Note: btn-* classes are semantic (component classes), not utility
1166
+ // /^btn-(primary|secondary|success|danger|warning|info|light|dark|link)$/,
1167
+ /^btn-(sm|lg|block)$/,
1168
+ // Only size modifiers are utility
1169
+ /^text-(muted|primary|success|danger|warning|info|light|dark|white)$/,
1170
+ /^bg-(primary|secondary|success|danger|warning|info|light|dark|white|transparent)$/,
1171
+ /^border(-top|-bottom|-left|-right)?(-0)?$/,
1172
+ /^rounded(-top|-bottom|-left|-right|-circle|-pill|-0)?$/,
1173
+ /^shadow(-sm|-lg|-none)?$/,
1174
+ /^(align|justify|order|flex)-(start|end|center|between|around|fill|grow|shrink)$/,
1175
+ /^col(-sm|-md|-lg|-xl)?(-\d+|-auto)?$/,
1176
+ /^row(-cols)?(-\d+)?$/,
1177
+ /^g[xy]?-[0-5]$/,
1178
+ /^(show|hide|invisible|visible)$/,
1179
+ /^(position|top|bottom|start|end)-(static|relative|absolute|fixed|sticky|-\d+)$/,
1180
+ // === Common utility patterns ===
1181
+ /^(row|col)$/,
1182
+ /^clearfix$/,
1183
+ /^pull-(left|right)$/,
1184
+ /^float-(left|right|none)$/
1185
+ ];
1186
+ function _(n2) {
1187
+ return gt.some((t2) => t2.test(n2));
1188
+ }
1189
+ function q(n2) {
1190
+ return n2.length <= 2 || /^\d/.test(n2) ? true : pt.some((t2) => t2.test(n2));
1191
+ }
1192
+ function St(n2) {
1193
+ return !_(n2) && !q(n2);
1194
+ }
1195
+ function N(n2) {
1196
+ return n2.filter((t2) => St(t2));
1197
+ }
1198
+ function At(n2) {
1199
+ const t2 = [], e2 = [];
1200
+ for (const s2 of n2)
1201
+ q(s2) || _(s2) ? e2.push(s2) : t2.push(s2);
1202
+ return { semantic: t2, utility: e2 };
1203
+ }
1204
+ function J(n2) {
1205
+ return q(n2) || _(n2);
1206
+ }
1207
+ const tt = (n2) => n2.replace(/([#:.[\]@])/g, "\\$1");
1208
+ class xt {
1209
+ constructor(t2, e2) {
1210
+ var _a2;
1211
+ this.maxDepth = (_a2 = t2.maxPathDepth) != null ? _a2 : 10, this.cache = e2;
1212
+ }
1213
+ /**
1214
+ * Builds path from anchor to target (excluding both)
1215
+ * @param anchor - Anchor element (start)
1216
+ * @param target - Target element (end)
1217
+ * @param extractor - Semantic extractor instance
1218
+ * @returns Path build result with nodes and degradation info
1219
+ */
1220
+ buildPath(t2, e2, s2) {
1221
+ const r2 = [];
1222
+ let a2 = e2.parentElement;
1223
+ for (; a2 && a2 !== t2 && r2.length < this.maxDepth; )
1224
+ r2.unshift(a2), a2 = a2.parentElement;
1225
+ const i2 = r2.length >= this.maxDepth && a2 !== t2;
1226
+ let o2 = this.filterNoise(r2);
1227
+ return o2 = this.ensureUniqueness(r2, o2, t2, e2, s2), {
1228
+ path: o2.map((u2) => {
1229
+ const d = u2.parentElement;
1230
+ let c2;
1231
+ if (d) {
1232
+ const g = Array.from(d.children).indexOf(u2);
1233
+ g !== -1 && (c2 = g + 1);
1234
+ }
1235
+ return {
1236
+ tag: u2.tagName.toLowerCase(),
1237
+ semantics: s2.extract(u2),
1238
+ score: s2.scoreElement(u2),
1239
+ nthChild: c2
1240
+ };
1241
+ }),
1242
+ degraded: i2,
1243
+ degradationReason: i2 ? "path-depth-overflow" : void 0
1244
+ };
1245
+ }
1246
+ /**
1247
+ * Legacy method for backward compatibility
1248
+ */
1249
+ buildPathNodes(t2, e2, s2) {
1250
+ return this.buildPath(t2, e2, s2).path;
1251
+ }
1252
+ /**
1253
+ * Ensures path uniqueness by adding nodes if needed
1254
+ * Following SPECIFICATION.md §8 Disambiguation Algorithm
1255
+ */
1256
+ ensureUniqueness(t2, e2, s2, r2, a2) {
1257
+ const i2 = this.buildTestSelector(s2, e2, r2);
1258
+ try {
1259
+ const o2 = r2.ownerDocument;
1260
+ if (!o2)
1261
+ return e2;
1262
+ let l2;
1263
+ if (this.cache) {
1264
+ const d = this.cache.getSelectorResults(i2);
1265
+ d !== void 0 ? l2 = d : (l2 = Array.from(o2.querySelectorAll(i2)), this.cache.setSelectorResults(i2, l2));
1266
+ } else
1267
+ l2 = o2.querySelectorAll(i2);
1268
+ if (l2.length <= 1)
1269
+ return e2;
1270
+ const u2 = t2.filter((d) => !e2.includes(d));
1271
+ for (const d of u2) {
1272
+ if (a2.scoreElement(d) < ct.MIN_CONFIDENCE_FOR_SKIP)
1273
+ continue;
1274
+ const h = this.insertNodeInOrder(e2, d, t2), g = this.buildTestSelector(s2, h, r2);
1275
+ try {
1276
+ let f2;
1277
+ if (this.cache) {
1278
+ const p = this.cache.getSelectorResults(g);
1279
+ p !== void 0 ? f2 = p : (f2 = Array.from(o2.querySelectorAll(g)), this.cache.setSelectorResults(g, f2));
1280
+ } else
1281
+ f2 = o2.querySelectorAll(g);
1282
+ if (f2.length === 1)
1283
+ return h;
1284
+ f2.length < l2.length && (e2 = h);
1285
+ } catch (e3) {
1286
+ }
1287
+ }
1288
+ return e2;
1289
+ } catch (e3) {
1290
+ return e2;
1291
+ }
1292
+ }
1293
+ /**
1294
+ * Inserts node into path maintaining original order
1295
+ */
1296
+ insertNodeInOrder(t2, e2, s2) {
1297
+ const r2 = s2.indexOf(e2), a2 = [...t2];
1298
+ let i2 = 0;
1299
+ for (let o2 = 0; o2 < a2.length && !(s2.indexOf(a2[o2]) > r2); o2++)
1300
+ i2 = o2 + 1;
1301
+ return a2.splice(i2, 0, e2), a2;
1302
+ }
1303
+ /**
1304
+ * Builds a test CSS selector from path
1305
+ */
1306
+ buildTestSelector(t2, e2, s2) {
1307
+ const r2 = [];
1308
+ r2.push(this.elementToSelector(t2));
1309
+ for (const a2 of e2)
1310
+ r2.push(this.elementToSelector(a2));
1311
+ return r2.push(this.elementToSelector(s2)), r2.join(" ");
1312
+ }
1313
+ /**
1314
+ * Converts element to basic CSS selector
1315
+ */
1316
+ elementToSelector(t2) {
1317
+ let e2 = t2.tagName.toLowerCase();
1318
+ t2.id && !D(t2.id) && (e2 += `#${tt(t2.id)}`);
1319
+ for (const s2 of Array.from(t2.classList))
1320
+ J(s2) || (e2 += `.${tt(s2)}`);
1321
+ return e2;
1322
+ }
1323
+ /**
1324
+ * Filters out noise/layout elements
1325
+ */
1326
+ filterNoise(t2) {
1327
+ return t2.filter((e2) => this.shouldInclude(e2));
1328
+ }
1329
+ /**
1330
+ * Determines if element should be included in path
1331
+ */
1332
+ shouldInclude(t2) {
1333
+ const e2 = t2.tagName.toLowerCase();
1334
+ return lt.includes(e2) ? true : e2 === "div" || e2 === "span" ? this.hasSemanticFeatures(t2) : false;
1335
+ }
1336
+ /**
1337
+ * Checks if element has meaningful semantic features
1338
+ */
1339
+ hasSemanticFeatures(t2) {
1340
+ if (t2.hasAttribute("role"))
1341
+ return true;
1342
+ for (const s2 of Array.from(t2.attributes))
1343
+ if (s2.name.startsWith("aria-"))
1344
+ return true;
1345
+ if (t2.classList.length > 0) {
1346
+ for (const s2 of Array.from(t2.classList))
1347
+ if (!J(s2))
1348
+ return true;
1349
+ }
1350
+ if (t2.hasAttribute("data-testid") || t2.hasAttribute("data-qa") || t2.hasAttribute("data-test"))
1351
+ return true;
1352
+ const e2 = t2.id;
1353
+ return !!(e2 && !D(e2));
1354
+ }
1355
+ }
1356
+ function Q(n2) {
1357
+ return n2 ? n2.trim().replace(/[\n\t\r]/g, " ").replace(/\s+/g, " ") : "";
1358
+ }
1359
+ const Ct = {
1360
+ preserveQueryForAbsolute: true,
1361
+ removeDynamicHashes: true
1362
+ };
1363
+ function Tt(n2) {
1364
+ return n2 ? [
1365
+ /\d{5,}/,
1366
+ // 5+ digits
1367
+ /[a-f0-9]{8,}/i,
1368
+ // hex hash 8+ characters
1369
+ /(session|token|temp|random|timestamp|nonce|cache)/i,
1370
+ // dynamic words
1371
+ /^\d+$/,
1372
+ // only digits
1373
+ /^[a-f0-9-]{32,}$/i
1374
+ // UUID-like
1375
+ ].some((e2) => e2.test(n2)) : false;
1376
+ }
1377
+ function Et(n2, t2) {
1378
+ if (!n2)
1379
+ return n2;
1380
+ const e2 = n2.startsWith("http://") || n2.startsWith("https://"), [s2, r2] = n2.split("#"), [a2, i2] = s2.split("?");
1381
+ let o2 = a2;
1382
+ return e2 && t2.preserveQueryForAbsolute && i2 && (o2 += `?${i2}`), r2 && (t2.removeDynamicHashes && Tt(r2) || (o2 += `#${r2}`)), o2;
1383
+ }
1384
+ function k(n2, t2, e2 = {}) {
1385
+ if (!t2)
1386
+ return t2;
1387
+ const s2 = __spreadValues(__spreadValues({}, Ct), e2);
1388
+ return n2 === "href" || n2 === "src" ? Et(t2, s2) : t2;
1389
+ }
1390
+ const wt = [
1391
+ "role",
1392
+ "aria-label",
1393
+ "aria-labelledby",
1394
+ "aria-describedby",
1395
+ "aria-controls",
1396
+ "aria-owns",
1397
+ "aria-level",
1398
+ "aria-posinset",
1399
+ "aria-setsize",
1400
+ "aria-haspopup"
1401
+ ];
1402
+ const vt = [
1403
+ "aria-selected",
1404
+ "aria-checked",
1405
+ "aria-pressed",
1406
+ "aria-expanded",
1407
+ "aria-hidden",
1408
+ "aria-disabled",
1409
+ "aria-current",
1410
+ "aria-busy",
1411
+ "aria-invalid",
1412
+ "aria-grabbed",
1413
+ "aria-live",
1414
+ "aria-atomic"
1415
+ ];
1416
+ const $t = [
1417
+ "data-state",
1418
+ "data-active",
1419
+ "data-inactive",
1420
+ "data-selected",
1421
+ "data-open",
1422
+ "data-closed",
1423
+ "data-visible",
1424
+ "data-hidden",
1425
+ "data-disabled",
1426
+ "data-enabled",
1427
+ "data-loading",
1428
+ "data-error",
1429
+ "data-success",
1430
+ "data-highlighted",
1431
+ "data-focused",
1432
+ "data-hover",
1433
+ "data-orientation",
1434
+ "data-theme"
1435
+ ];
1436
+ const Mt = [
1437
+ "data-radix-",
1438
+ "data-headlessui-",
1439
+ "data-reach-",
1440
+ "data-mui-",
1441
+ "data-chakra-",
1442
+ "data-mantine-",
1443
+ "data-tw-"
1444
+ ];
1445
+ const It = [
1446
+ "data-testid",
1447
+ "data-test-id",
1448
+ "data-test",
1449
+ "data-cy",
1450
+ "data-qa",
1451
+ "data-automation-id",
1452
+ "data-id",
1453
+ "data-component",
1454
+ "data-entity-id",
1455
+ "data-product-id",
1456
+ "data-user-id"
1457
+ ];
1458
+ const Rt = [
1459
+ "id",
1460
+ "name",
1461
+ "type",
1462
+ "placeholder",
1463
+ "title",
1464
+ "for",
1465
+ "alt",
1466
+ "href"
1467
+ ];
1468
+ const Nt = [
1469
+ "disabled",
1470
+ "checked",
1471
+ "selected",
1472
+ "hidden",
1473
+ "readonly",
1474
+ "required",
1475
+ "value"
1476
+ ];
1477
+ const Dt = [
1478
+ /^radix-/,
1479
+ /^headlessui-/,
1480
+ /^mui-/,
1481
+ /:\w+:/
1482
+ // matches :ru:, :r1:, etc.
1483
+ ];
1484
+ function Ht(n2, t2) {
1485
+ return wt.includes(n2) ? true : vt.includes(n2) || $t.includes(n2) || Mt.some((e2) => n2.startsWith(e2)) ? false : It.includes(n2) || n2.startsWith("data-") && n2.endsWith("-id") ? true : n2 === "id" ? !Dt.some((e2) => e2.test(t2)) : Rt.includes(n2) ? true : Nt.includes(n2) ? false : !!n2.startsWith("data-");
1486
+ }
1487
+ class Pt {
1488
+ constructor(t2, e2) {
1489
+ var _a2;
1490
+ this.includeUtilityClasses = (_a2 = t2.includeUtilityClasses) != null ? _a2 : false, this.cache = e2;
1491
+ }
1492
+ /**
1493
+ * Extracts semantic features from element
1494
+ * @param element - DOM element to extract from
1495
+ * @returns Semantic features object
1496
+ */
1497
+ extract(t2) {
1498
+ if (this.cache) {
1499
+ const i2 = this.cache.getSemantics(t2);
1500
+ if (i2 !== void 0)
1501
+ return i2;
1502
+ }
1503
+ const e2 = {}, s2 = t2.id;
1504
+ if (s2 && !D(s2) && (e2.id = s2), t2.classList.length > 0) {
1505
+ const i2 = Array.from(t2.classList);
1506
+ if (this.includeUtilityClasses)
1507
+ e2.classes = i2;
1508
+ else {
1509
+ const { semantic: o2 } = At(i2);
1510
+ o2.length > 0 && (e2.classes = o2);
1511
+ }
1512
+ }
1513
+ const r2 = this.extractAttributes(t2);
1514
+ Object.keys(r2).length > 0 && (e2.attributes = r2);
1515
+ const a2 = t2.getAttribute("role");
1516
+ if (a2 && (e2.role = a2), this.shouldExtractText(t2)) {
1517
+ const i2 = this.extractText(t2);
1518
+ i2 && (e2.text = i2);
1519
+ }
1520
+ return this.cache && this.cache.setSemantics(t2, e2), e2;
1521
+ }
1522
+ /**
1523
+ * Scores element based on semantic richness
1524
+ * @param element - Element to score
1525
+ * @returns Score from 0 to 1
1526
+ */
1527
+ scoreElement(t2) {
1528
+ let e2 = 0.5;
1529
+ const s2 = this.extract(t2);
1530
+ return s2.id && (e2 += 0.15), s2.classes && s2.classes.length > 0 && (e2 += 0.1), s2.attributes && Object.keys(s2.attributes).length > 0 && (e2 += 0.1), s2.role && (e2 += 0.1), s2.text && (e2 += 0.05), Math.min(e2, 1);
1531
+ }
1532
+ /**
1533
+ * Checks if attribute should be ignored
1534
+ * @param attrName - Attribute name
1535
+ * @returns True if should be ignored
1536
+ */
1537
+ shouldIgnoreAttribute(t2) {
1538
+ return !!(B.has(t2) || t2.startsWith("on") || t2.startsWith("ng-") || t2.startsWith("_ng") || t2.startsWith("data-reactid") || t2.startsWith("data-react") || t2.startsWith("data-v-"));
1539
+ }
1540
+ /**
1541
+ * Gets attribute priority
1542
+ * @param attrName - Attribute name
1543
+ * @returns Priority number (higher = more priority)
1544
+ */
1545
+ getAttributePriority(t2) {
1546
+ return w[t2] !== void 0 ? w[t2] : t2.startsWith("data-") ? w["data-*"] : t2.startsWith("aria-") ? w["aria-*"] : 0;
1547
+ }
1548
+ /**
1549
+ * Checks if attribute value is dynamic (should be ignored)
1550
+ * @param value - Attribute value
1551
+ * @returns True if value is dynamic
1552
+ */
1553
+ isDynamicValue(t2) {
1554
+ return [
1555
+ /^[a-f0-9]{32,}$/i,
1556
+ // Long hashes
1557
+ /^\d{10,}$/,
1558
+ // Timestamp
1559
+ /^(undefined|null|\[object)/,
1560
+ // JS artifacts
1561
+ /^{{.*}}$/
1562
+ // Template literals
1563
+ ].some((s2) => s2.test(t2));
1564
+ }
1565
+ /**
1566
+ * Extracts relevant semantic attributes from element
1567
+ * Iterates through all attributes and filters by priority
1568
+ */
1569
+ extractAttributes(t2) {
1570
+ const e2 = {};
1571
+ for (const s2 of Array.from(t2.attributes)) {
1572
+ const r2 = s2.name;
1573
+ if (this.shouldIgnoreAttribute(r2) || !Ht(r2, s2.value) || G.has(r2) && V(s2.value) || this.getAttributePriority(r2) === 0)
1574
+ continue;
1575
+ const i2 = r2 === "href" || r2 === "src" ? k(r2, s2.value) : s2.value;
1576
+ !i2 || i2.trim() === "" || this.isDynamicValue(i2) || (e2[r2] = i2);
1577
+ }
1578
+ return e2;
1579
+ }
1580
+ /**
1581
+ * Extracts and normalizes text content
1582
+ */
1583
+ extractText(t2) {
1584
+ const e2 = this.getDirectTextContent(t2);
1585
+ if (!e2)
1586
+ return null;
1587
+ const s2 = Q(e2);
1588
+ if (!s2)
1589
+ return null;
1590
+ const r2 = 100, a2 = e2.length > r2 ? e2.slice(0, r2) + "..." : e2, i2 = s2.length > r2 ? s2.slice(0, r2) + "..." : s2;
1591
+ return {
1592
+ raw: a2,
1593
+ normalized: i2
1594
+ };
1595
+ }
1596
+ /**
1597
+ * Gets direct text content excluding child elements
1598
+ */
1599
+ getDirectTextContent(t2) {
1600
+ var _a2;
1601
+ const e2 = [];
1602
+ for (const s2 of Array.from(t2.childNodes))
1603
+ if (s2.nodeType === Node.TEXT_NODE && s2.textContent) {
1604
+ const r2 = s2.textContent.trim();
1605
+ r2 && e2.push(r2);
1606
+ }
1607
+ return e2.length > 0 ? e2.join(" ") : (_a2 = t2.textContent) != null ? _a2 : null;
1608
+ }
1609
+ /**
1610
+ * Determines if text should be extracted for this element
1611
+ */
1612
+ shouldExtractText(t2) {
1613
+ const e2 = t2.tagName.toLowerCase();
1614
+ return [
1615
+ "button",
1616
+ "a",
1617
+ "label",
1618
+ "h1",
1619
+ "h2",
1620
+ "h3",
1621
+ "h4",
1622
+ "h5",
1623
+ "h6",
1624
+ "p",
1625
+ "span",
1626
+ "li",
1627
+ "th",
1628
+ "td",
1629
+ "dt",
1630
+ "dd",
1631
+ "legend",
1632
+ "figcaption",
1633
+ "summary"
1634
+ ].includes(e2);
1635
+ }
1636
+ }
1637
+ class kt {
1638
+ /**
1639
+ * Generates fingerprint for SVG element
1640
+ * @param element - SVG element to fingerprint
1641
+ * @returns SVG fingerprint object
1642
+ */
1643
+ fingerprint(t2) {
1644
+ const e2 = t2.tagName.toLowerCase(), s2 = this.getShape(e2), r2 = {
1645
+ shape: s2,
1646
+ hasAnimation: this.hasAnimation(t2)
1647
+ };
1648
+ if (s2 === "path") {
1649
+ const o2 = t2.getAttribute("d");
1650
+ o2 && (r2.dHash = this.computePathHash(o2));
1651
+ } else
1652
+ ["circle", "rect", "ellipse", "line"].includes(s2) && (r2.geomHash = this.computeGeomHash(t2, s2));
1653
+ const a2 = t2.getAttribute("role");
1654
+ a2 && (r2.role = a2);
1655
+ const i2 = t2.querySelector("title");
1656
+ return (i2 == null ? void 0 : i2.textContent) && (r2.titleText = i2.textContent.trim()), r2;
1657
+ }
1658
+ /**
1659
+ * Computes hash from path data (first N commands)
1660
+ * @param d - SVG path d attribute value
1661
+ * @returns Hash string
1662
+ */
1663
+ computePathHash(t2) {
1664
+ const e2 = this.normalizePathData(t2);
1665
+ return this.simpleHash(e2);
1666
+ }
1667
+ /**
1668
+ * Gets the shape type from tag name
1669
+ */
1670
+ getShape(t2) {
1671
+ var _a2;
1672
+ return (_a2 = [
1673
+ "path",
1674
+ "circle",
1675
+ "rect",
1676
+ "line",
1677
+ "polyline",
1678
+ "polygon",
1679
+ "ellipse",
1680
+ "g",
1681
+ "text",
1682
+ "use",
1683
+ "svg"
1684
+ ].find((s2) => s2 === t2)) != null ? _a2 : "path";
1685
+ }
1686
+ /**
1687
+ * Normalizes path data for consistent hashing
1688
+ */
1689
+ normalizePathData(t2) {
1690
+ var _a2;
1691
+ return ((_a2 = t2.match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/gi)) != null ? _a2 : []).slice(0, 5).map((r2) => r2.trim().replace(/(-?\d+\.?\d*)/g, (a2) => parseFloat(a2).toFixed(1))).join(" ");
1692
+ }
1693
+ /**
1694
+ * Computes geometry hash for non-path shapes
1695
+ */
1696
+ computeGeomHash(t2, e2) {
1697
+ var _a2, _b2, _c, _d, _e, _f, _g, _h, _i;
1698
+ const s2 = [];
1699
+ switch (e2) {
1700
+ case "circle":
1701
+ s2.push(`r=${(_a2 = t2.getAttribute("r")) != null ? _a2 : "0"}`);
1702
+ break;
1703
+ case "rect":
1704
+ {
1705
+ const r2 = parseFloat((_b2 = t2.getAttribute("width")) != null ? _b2 : "0"), a2 = parseFloat((_c = t2.getAttribute("height")) != null ? _c : "0");
1706
+ r2 > 0 && a2 > 0 && s2.push(`ratio=${(r2 / a2).toFixed(2)}`);
1707
+ }
1708
+ break;
1709
+ case "ellipse":
1710
+ {
1711
+ const r2 = parseFloat((_d = t2.getAttribute("rx")) != null ? _d : "0"), a2 = parseFloat((_e = t2.getAttribute("ry")) != null ? _e : "0");
1712
+ r2 > 0 && a2 > 0 && s2.push(`ratio=${(r2 / a2).toFixed(2)}`);
1713
+ }
1714
+ break;
1715
+ case "line":
1716
+ {
1717
+ const r2 = parseFloat((_f = t2.getAttribute("x1")) != null ? _f : "0"), a2 = parseFloat((_g = t2.getAttribute("y1")) != null ? _g : "0"), i2 = parseFloat((_h = t2.getAttribute("x2")) != null ? _h : "0"), o2 = parseFloat((_i = t2.getAttribute("y2")) != null ? _i : "0"), l2 = Math.atan2(o2 - a2, i2 - r2);
1718
+ s2.push(`angle=${l2.toFixed(2)}`);
1719
+ }
1720
+ break;
1721
+ }
1722
+ return this.simpleHash(s2.join(";"));
1723
+ }
1724
+ /**
1725
+ * Detects animations on SVG element
1726
+ */
1727
+ hasAnimation(t2) {
1728
+ if (t2.querySelector("animate, animateTransform, animateMotion"))
1729
+ return true;
1730
+ const e2 = t2.ownerDocument;
1731
+ if (e2 == null ? void 0 : e2.defaultView)
1732
+ try {
1733
+ const s2 = e2.defaultView.getComputedStyle(t2);
1734
+ if (s2.animationName !== "none" || s2.transitionProperty !== "all" && s2.transitionProperty !== "none")
1735
+ return true;
1736
+ } catch (e3) {
1737
+ }
1738
+ return false;
1739
+ }
1740
+ /**
1741
+ * Simple hash function for fingerprinting (not cryptographic)
1742
+ */
1743
+ simpleHash(t2) {
1744
+ let e2 = 0;
1745
+ for (let s2 = 0; s2 < t2.length; s2++) {
1746
+ const r2 = t2.charCodeAt(s2);
1747
+ e2 = (e2 << 5) - e2 + r2, e2 = e2 & e2;
1748
+ }
1749
+ return Math.abs(e2).toString(16).padStart(8, "0");
1750
+ }
1751
+ }
1752
+ function _t(n2, t2 = 0) {
1753
+ const e2 = n2.anchor.score, s2 = n2.path.length > 0 ? n2.path.reduce((o2, l2) => o2 + l2.score, 0) / n2.path.length : 0.5, r2 = n2.target.score, a2 = e2 * L.ANCHOR + s2 * L.PATH + r2 * L.TARGET + t2 * L.UNIQUENESS, i2 = n2.anchor.degraded ? 0.2 : 0;
1754
+ return Math.max(0, Math.min(1, a2 - i2));
1755
+ }
1756
+ class qt {
1757
+ constructor(t2) {
1758
+ this.cache = /* @__PURE__ */ new Map(), this.maxSize = t2;
1759
+ }
1760
+ get(t2) {
1761
+ const e2 = this.cache.get(t2);
1762
+ if (e2 !== void 0)
1763
+ return this.cache.delete(t2), this.cache.set(t2, e2), e2;
1764
+ }
1765
+ set(t2, e2) {
1766
+ if (this.cache.has(t2))
1767
+ this.cache.delete(t2);
1768
+ else if (this.cache.size >= this.maxSize) {
1769
+ const s2 = this.cache.keys().next().value;
1770
+ s2 !== void 0 && this.cache.delete(s2);
1771
+ }
1772
+ this.cache.set(t2, e2);
1773
+ }
1774
+ has(t2) {
1775
+ return this.cache.has(t2);
1776
+ }
1777
+ delete(t2) {
1778
+ this.cache.delete(t2);
1779
+ }
1780
+ clear() {
1781
+ this.cache.clear();
1782
+ }
1783
+ get size() {
1784
+ return this.cache.size;
1785
+ }
1786
+ }
1787
+ class Lt {
1788
+ constructor(t2 = {}) {
1789
+ var _a2, _b2;
1790
+ this.eidCache = /* @__PURE__ */ new WeakMap(), this.selectorResultCache = new qt(
1791
+ (_a2 = t2.maxSelectorCacheSize) != null ? _a2 : 1e3
1792
+ ), this.anchorCache = /* @__PURE__ */ new WeakMap(), this.semanticsCache = /* @__PURE__ */ new WeakMap(), this.stats = {
1793
+ eidHits: 0,
1794
+ eidMisses: 0,
1795
+ selectorHits: 0,
1796
+ selectorMisses: 0,
1797
+ anchorHits: 0,
1798
+ anchorMisses: 0,
1799
+ semanticsHits: 0,
1800
+ semanticsMisses: 0,
1801
+ selectorCacheSize: 0,
1802
+ maxSelectorCacheSize: (_b2 = t2.maxSelectorCacheSize) != null ? _b2 : 1e3
1803
+ };
1804
+ }
1805
+ /**
1806
+ * Get cached EID for element
1807
+ */
1808
+ getEID(t2) {
1809
+ const e2 = this.eidCache.get(t2);
1810
+ if (e2 !== void 0)
1811
+ return this.stats.eidHits++, e2;
1812
+ this.stats.eidMisses++;
1813
+ }
1814
+ /**
1815
+ * Cache EID for element
1816
+ */
1817
+ setEID(t2, e2) {
1818
+ this.eidCache.set(t2, e2);
1819
+ }
1820
+ /**
1821
+ * Get cached selector results
1822
+ */
1823
+ getSelectorResults(t2) {
1824
+ const e2 = this.selectorResultCache.get(t2);
1825
+ if (e2 !== void 0)
1826
+ return this.stats.selectorHits++, this.stats.selectorCacheSize = this.selectorResultCache.size, e2;
1827
+ this.stats.selectorMisses++, this.stats.selectorCacheSize = this.selectorResultCache.size;
1828
+ }
1829
+ /**
1830
+ * Cache selector results
1831
+ */
1832
+ setSelectorResults(t2, e2) {
1833
+ this.selectorResultCache.set(t2, e2), this.stats.selectorCacheSize = this.selectorResultCache.size;
1834
+ }
1835
+ /**
1836
+ * Get cached anchor result
1837
+ */
1838
+ getAnchor(t2) {
1839
+ if (this.anchorCache.has(t2))
1840
+ return this.stats.anchorHits++, this.anchorCache.get(t2);
1841
+ this.stats.anchorMisses++;
1842
+ }
1843
+ /**
1844
+ * Cache anchor result
1845
+ */
1846
+ setAnchor(t2, e2) {
1847
+ this.anchorCache.set(t2, e2);
1848
+ }
1849
+ /**
1850
+ * Get cached semantics
1851
+ */
1852
+ getSemantics(t2) {
1853
+ const e2 = this.semanticsCache.get(t2);
1854
+ if (e2 !== void 0)
1855
+ return this.stats.semanticsHits++, e2;
1856
+ this.stats.semanticsMisses++;
1857
+ }
1858
+ /**
1859
+ * Cache semantics
1860
+ */
1861
+ setSemantics(t2, e2) {
1862
+ this.semanticsCache.set(t2, e2);
1863
+ }
1864
+ /**
1865
+ * Clear all caches
1866
+ */
1867
+ clear() {
1868
+ this.selectorResultCache.clear(), this.stats.selectorCacheSize = 0, this.stats = {
1869
+ eidHits: 0,
1870
+ eidMisses: 0,
1871
+ selectorHits: 0,
1872
+ selectorMisses: 0,
1873
+ anchorHits: 0,
1874
+ anchorMisses: 0,
1875
+ semanticsHits: 0,
1876
+ semanticsMisses: 0,
1877
+ selectorCacheSize: 0,
1878
+ maxSelectorCacheSize: this.stats.maxSelectorCacheSize
1879
+ };
1880
+ }
1881
+ /**
1882
+ * Invalidate cache for a specific element
1883
+ * Note: WeakMaps don't support deletion, but we can clear selector cache
1884
+ * if needed. This method is mainly for future extensibility.
1885
+ */
1886
+ invalidateElement(t2) {
1887
+ }
1888
+ /**
1889
+ * Invalidate a specific selector from cache
1890
+ */
1891
+ invalidateSelector(t2) {
1892
+ this.selectorResultCache.delete(t2), this.stats.selectorCacheSize = this.selectorResultCache.size;
1893
+ }
1894
+ /**
1895
+ * Get cache statistics
1896
+ */
1897
+ getStats() {
1898
+ return __spreadProps(__spreadValues({}, this.stats), {
1899
+ selectorCacheSize: this.selectorResultCache.size
1900
+ });
1901
+ }
1902
+ /**
1903
+ * Get cache hit rate for EID cache
1904
+ */
1905
+ getEIDHitRate() {
1906
+ const t2 = this.stats.eidHits + this.stats.eidMisses;
1907
+ return t2 > 0 ? this.stats.eidHits / t2 : 0;
1908
+ }
1909
+ /**
1910
+ * Get cache hit rate for selector cache
1911
+ */
1912
+ getSelectorHitRate() {
1913
+ const t2 = this.stats.selectorHits + this.stats.selectorMisses;
1914
+ return t2 > 0 ? this.stats.selectorHits / t2 : 0;
1915
+ }
1916
+ /**
1917
+ * Get cache hit rate for anchor cache
1918
+ */
1919
+ getAnchorHitRate() {
1920
+ const t2 = this.stats.anchorHits + this.stats.anchorMisses;
1921
+ return t2 > 0 ? this.stats.anchorHits / t2 : 0;
1922
+ }
1923
+ /**
1924
+ * Get cache hit rate for semantics cache
1925
+ */
1926
+ getSemanticsHitRate() {
1927
+ const t2 = this.stats.semanticsHits + this.stats.semanticsMisses;
1928
+ return t2 > 0 ? this.stats.semanticsHits / t2 : 0;
1929
+ }
1930
+ /**
1931
+ * Get overall cache hit rate
1932
+ */
1933
+ getOverallHitRate() {
1934
+ const t2 = this.stats.eidHits + this.stats.selectorHits + this.stats.anchorHits + this.stats.semanticsHits, e2 = this.stats.eidMisses + this.stats.selectorMisses + this.stats.anchorMisses + this.stats.semanticsMisses, s2 = t2 + e2;
1935
+ return s2 > 0 ? t2 / s2 : 0;
1936
+ }
1937
+ }
1938
+ function Ot(n2) {
1939
+ return new Lt(n2);
1940
+ }
1941
+ let O = null;
1942
+ function Z() {
1943
+ return O || (O = Ot()), O;
1944
+ }
1945
+ function Y(n2, t2 = {}) {
1946
+ var _a3, _b2, _c, _d;
1947
+ var _a2;
1948
+ if (!n2 || !n2.ownerDocument || !n2.isConnected)
1949
+ return null;
1950
+ const e2 = __spreadValues(__spreadValues({}, ut), t2), s2 = (_a3 = e2.cache) != null ? _a3 : Z(), r2 = s2.getEID(n2);
1951
+ if (r2 !== void 0)
1952
+ return r2;
1953
+ const a2 = new ft(e2, s2), i2 = new xt(e2, s2), o2 = new Pt(e2, s2), l2 = new kt(), u2 = a2.findAnchor(n2);
1954
+ if (!u2 && !e2.fallbackToBody)
1955
+ return null;
1956
+ const d = (_c = (_b2 = u2 == null ? void 0 : u2.element) != null ? _b2 : (_a2 = n2.ownerDocument) == null ? void 0 : _a2.body) != null ? _c : null;
1957
+ if (!d)
1958
+ return null;
1959
+ const c2 = !u2 || u2.tier === "C", h = d.tagName.toLowerCase(), g = d.parentElement;
1960
+ let f2;
1961
+ if (g && h !== "body" && h !== "html") {
1962
+ const T = Array.from(g.children).indexOf(d);
1963
+ T !== -1 && (f2 = T + 1);
1964
+ }
1965
+ const p = o2.extract(d), m = {
1966
+ tag: d.tagName.toLowerCase(),
1967
+ semantics: p,
1968
+ score: (_d = u2 == null ? void 0 : u2.score) != null ? _d : I.DEGRADED_SCORE,
1969
+ degraded: c2,
1970
+ nthChild: f2
1971
+ }, b = i2.buildPath(d, n2, o2), y = o2.extract(n2);
1972
+ e2.enableSvgFingerprint && zt(n2) && (y.svg = l2.fingerprint(n2));
1973
+ const v2 = n2.parentElement;
1974
+ let A;
1975
+ if (v2) {
1976
+ const T = Array.from(v2.children).indexOf(n2);
1977
+ T !== -1 && (A = T + 1);
1978
+ }
1979
+ const S = {
1980
+ tag: n2.tagName.toLowerCase(),
1981
+ semantics: y,
1982
+ score: o2.scoreElement(n2),
1983
+ nthChild: A
1984
+ }, $ = [], M = {
1985
+ onMultiple: "best-score",
1986
+ onMissing: "anchor-only",
1987
+ maxDepth: 3
1988
+ }, H = m.degraded || b.degraded, E = Ut(m.degraded, b), x2 = {
1989
+ version: "1.0",
1990
+ anchor: m,
1991
+ path: b.path,
1992
+ target: S,
1993
+ constraints: $,
1994
+ fallback: M,
1995
+ meta: {
1996
+ confidence: 0,
1997
+ // Calculated below
1998
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
1999
+ generator: "dom-eid@1.0",
2000
+ source: e2.source,
2001
+ degraded: H,
2002
+ degradationReason: E
2003
+ }
2004
+ };
2005
+ return x2.meta.confidence = _t(x2), x2.meta.confidence < e2.confidenceThreshold ? null : (s2.setEID(n2, x2), x2);
2006
+ }
2007
+ function zt(n2) {
2008
+ return n2.namespaceURI === "http://www.w3.org/2000/svg" || n2.tagName.toLowerCase() === "svg" || n2 instanceof SVGElement;
2009
+ }
2010
+ function Ut(n2, t2) {
2011
+ if (n2 && t2.degraded)
2012
+ return "anchor-and-path-degraded";
2013
+ if (n2)
2014
+ return "no-semantic-anchor";
2015
+ if (t2.degraded)
2016
+ return t2.degradationReason;
2017
+ }
2018
+ const rt = {
2019
+ maxClasses: 2,
2020
+ maxAttributes: 5,
2021
+ includeText: true,
2022
+ maxTextLength: 50,
2023
+ simplifyTarget: true,
2024
+ includeConstraints: true
2025
+ };
2026
+ function et(n2) {
2027
+ return n2 === "id" ? 101 : w[n2] !== void 0 ? w[n2] : n2.startsWith("data-") ? w["data-*"] : n2.startsWith("aria-") ? w["aria-*"] : 0;
2028
+ }
2029
+ function Vt(n2) {
2030
+ return ["id", "data-testid", "data-qa", "data-cy", "href", "text", "role"].includes(n2);
2031
+ }
2032
+ function Qt(n2) {
2033
+ return !!(/@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/.test(n2) || /(\+?\d{1,3}[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}/.test(n2) || /\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}/.test(n2));
2034
+ }
2035
+ function Zt(n2, t2) {
2036
+ const e2 = __spreadValues(__spreadValues({}, rt), t2), s2 = `v${n2.version}`, r2 = U(n2.anchor, false, e2), a2 = n2.path.length > 0 ? n2.path.map((l2) => U(l2, false, e2)).join(" > ") + " > " : "", i2 = U(n2.target, true, e2), o2 = e2.includeConstraints ? Xt(n2) : "";
2037
+ return `${s2}: ${r2} :: ${a2}${i2}${o2}`;
2038
+ }
2039
+ function U(n2, t2 = false, e2 = rt) {
2040
+ const { tag: s2, semantics: r2 } = n2;
2041
+ let a2 = s2;
2042
+ const i2 = [], o2 = __spreadValues({}, r2.attributes);
2043
+ r2.id && (o2.id = r2.id), r2.role && !o2.role && (o2.role = r2.role);
2044
+ const l2 = Object.entries(o2).map(([c2, h]) => {
2045
+ const g = et(c2), f2 = c2 === "href" || c2 === "src" ? k(c2, h) : h;
2046
+ return { name: c2, value: f2, priority: g };
2047
+ }).filter((c2) => c2.name !== "id" && c2.name !== "class" && B.has(c2.name) || G.has(c2.name) && V(c2.value) ? false : c2.priority > 0 || c2.name === "role" || c2.name === "id");
2048
+ l2.sort((c2, h) => h.priority - c2.priority);
2049
+ const u2 = l2.slice(0, e2.maxAttributes);
2050
+ u2.sort((c2, h) => c2.name.localeCompare(h.name));
2051
+ for (const { name: c2, value: h } of u2)
2052
+ i2.push(`${c2}="${j(h)}"`);
2053
+ if (e2.includeText && r2.text && !Qt(r2.text.normalized)) {
2054
+ const c2 = r2.text.normalized;
2055
+ c2.length > 0 && c2.length <= e2.maxTextLength && i2.push(`text="${j(c2)}"`);
2056
+ }
2057
+ let d = i2;
2058
+ if (i2.length > 0 && (t2 && e2.simplifyTarget && r2.id && (d = i2.filter((c2) => {
2059
+ const h = c2.split("=")[0];
2060
+ return et(h) >= 60 || h === "text" || h === "id" || h === "role";
2061
+ })), d.length > 0 && d.sort((c2, h) => c2.localeCompare(h))), r2.classes && r2.classes.length > 0) {
2062
+ const c2 = N(r2.classes), h = !!r2.id || i2.some(
2063
+ (f2) => f2.startsWith("href=") || f2.startsWith("data-testid=") || f2.startsWith("text=") || f2.startsWith("role=")
2064
+ );
2065
+ if (!(t2 && e2.simplifyTarget && h) && c2.length > 0) {
2066
+ const f2 = c2.sort().slice(0, e2.maxClasses);
2067
+ a2 += f2.map((p) => `.${p}`).join("");
2068
+ }
2069
+ }
2070
+ if (d.length > 0 && (a2 += `[${d.join(",")}]`), "nthChild" in n2 && n2.nthChild) {
2071
+ const c2 = !!r2.id || r2.attributes && Object.keys(r2.attributes).some(Vt);
2072
+ t2 && e2.simplifyTarget && c2 || (a2 += `#${n2.nthChild}`);
2073
+ }
2074
+ return a2;
2075
+ }
2076
+ function Xt(n2) {
2077
+ if (!n2.constraints || n2.constraints.length === 0)
2078
+ return "";
2079
+ const t2 = [];
2080
+ for (const e2 of n2.constraints)
2081
+ switch (e2.type) {
2082
+ case "uniqueness":
2083
+ t2.push("unique=true");
2084
+ break;
2085
+ case "position":
2086
+ e2.params && e2.params.strategy && t2.push(`pos=${e2.params.strategy}`);
2087
+ break;
2088
+ case "text-proximity":
2089
+ if (e2.params && e2.params.reference) {
2090
+ const s2 = j(String(e2.params.reference));
2091
+ t2.push(`text="${s2}"`);
2092
+ }
2093
+ break;
2094
+ }
2095
+ return t2.length === 0 ? "" : ` {${t2.join(",")}}`;
2096
+ }
2097
+ function j(n2) {
2098
+ return n2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/>/g, "\\>").replace(/:/g, "\\:");
2099
+ }
2100
+ function le(n2, t2, e2) {
2101
+ const s2 = Y(n2, t2);
2102
+ return s2 ? Zt(s2, e2) : null;
2103
+ }
895
2104
  let _id = 1;
896
2105
  const tagNameRegex = new RegExp("[^a-z0-9-_:]");
897
2106
  const IGNORED_NODE = -2;
@@ -1013,6 +2222,8 @@ function ignoreAttribute(tagName, name, _value) {
1013
2222
  return (tagName === "video" || tagName === "audio") && name === "autoplay";
1014
2223
  }
1015
2224
  function isExcludeAttribute(name, exclude) {
2225
+ if (!exclude)
2226
+ return false;
1016
2227
  return typeof exclude === "string" ? name.includes(exclude) : exclude.test(name);
1017
2228
  }
1018
2229
  function _isBlockedElement(element, blockClass, blockSelector) {
@@ -1523,7 +2734,8 @@ function serializeNodeWithId(n2, options) {
1523
2734
  stylesheetLoadTimeout = 5e3,
1524
2735
  keepIframeSrcFn = () => false,
1525
2736
  newlyAddedElement = false,
1526
- cssCaptured = false
2737
+ cssCaptured = false,
2738
+ selectorOptions
1527
2739
  } = options;
1528
2740
  let { needsMask } = options;
1529
2741
  let { preserveWhiteSpace = true } = options;
@@ -1568,11 +2780,20 @@ function serializeNodeWithId(n2, options) {
1568
2780
  }
1569
2781
  const serializedNode = Object.assign(_serializedNode, { id });
1570
2782
  if (isElement(n2) || n2.nodeType === Node.TEXT_NODE) {
1571
- serializedNode.xpath = buildXPath(n2);
1572
- if (isElement(n2)) {
1573
- const selector = buildSelector(n2);
1574
- if (selector) {
1575
- serializedNode.selector = selector;
2783
+ if (isElement(n2) && selectorOptions !== null && selectorOptions !== void 0) {
2784
+ try {
2785
+ const seqlGeneratorOptions = {
2786
+ maxPathDepth: selectorOptions.maxPathDepth,
2787
+ enableSvgFingerprint: selectorOptions.enableSvgFingerprint,
2788
+ confidenceThreshold: selectorOptions.confidenceThreshold,
2789
+ fallbackToBody: selectorOptions.fallbackToBody
2790
+ };
2791
+ const selector = le(n2, seqlGeneratorOptions);
2792
+ if (selector) {
2793
+ serializedNode.selector = selector;
2794
+ }
2795
+ } catch (error) {
2796
+ console.warn("Failed to generate SEQL selector:", error);
1576
2797
  }
1577
2798
  }
1578
2799
  if (n2.nodeType === Node.TEXT_NODE) {
@@ -1627,7 +2848,8 @@ function serializeNodeWithId(n2, options) {
1627
2848
  onStylesheetLoad,
1628
2849
  stylesheetLoadTimeout,
1629
2850
  keepIframeSrcFn,
1630
- cssCaptured: false
2851
+ cssCaptured: false,
2852
+ selectorOptions
1631
2853
  };
1632
2854
  if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === "textarea" && serializedNode.attributes.value !== void 0)
1633
2855
  ;
@@ -1687,7 +2909,8 @@ function serializeNodeWithId(n2, options) {
1687
2909
  iframeLoadTimeout,
1688
2910
  onStylesheetLoad,
1689
2911
  stylesheetLoadTimeout,
1690
- keepIframeSrcFn
2912
+ keepIframeSrcFn,
2913
+ selectorOptions
1691
2914
  });
1692
2915
  if (serializedIframeNode) {
1693
2916
  onIframeLoad(
@@ -1729,7 +2952,8 @@ function serializeNodeWithId(n2, options) {
1729
2952
  iframeLoadTimeout,
1730
2953
  onStylesheetLoad,
1731
2954
  stylesheetLoadTimeout,
1732
- keepIframeSrcFn
2955
+ keepIframeSrcFn,
2956
+ selectorOptions
1733
2957
  });
1734
2958
  if (serializedLinkNode) {
1735
2959
  onStylesheetLoad(
@@ -1745,6 +2969,7 @@ function serializeNodeWithId(n2, options) {
1745
2969
  return serializedNode;
1746
2970
  }
1747
2971
  function snapshot(n2, options) {
2972
+ var _a2, _b2, _c, _d;
1748
2973
  const {
1749
2974
  mirror: mirror2 = new Mirror(),
1750
2975
  blockClass = "rr-block",
@@ -1766,7 +2991,8 @@ function snapshot(n2, options) {
1766
2991
  iframeLoadTimeout,
1767
2992
  onStylesheetLoad,
1768
2993
  stylesheetLoadTimeout,
1769
- keepIframeSrcFn = () => false
2994
+ keepIframeSrcFn = () => false,
2995
+ selector
1770
2996
  } = options || {};
1771
2997
  const maskInputOptions = maskAllInputs === true ? {
1772
2998
  color: true,
@@ -1804,6 +3030,22 @@ function snapshot(n2, options) {
1804
3030
  headMetaVerification: true
1805
3031
  }
1806
3032
  ) : slimDOM === false ? {} : slimDOM;
3033
+ const selectorOptions = selector === false ? null : selector === true ? {
3034
+ maxPathDepth: 10,
3035
+ enableSvgFingerprint: true,
3036
+ confidenceThreshold: 0.3,
3037
+ fallbackToBody: true
3038
+ } : selector === void 0 ? {
3039
+ maxPathDepth: 10,
3040
+ enableSvgFingerprint: true,
3041
+ confidenceThreshold: 0.3,
3042
+ fallbackToBody: true
3043
+ } : {
3044
+ maxPathDepth: (_a2 = selector.maxPathDepth) != null ? _a2 : 10,
3045
+ enableSvgFingerprint: (_b2 = selector.enableSvgFingerprint) != null ? _b2 : true,
3046
+ confidenceThreshold: (_c = selector.confidenceThreshold) != null ? _c : 0.3,
3047
+ fallbackToBody: (_d = selector.fallbackToBody) != null ? _d : true
3048
+ };
1807
3049
  return serializeNodeWithId(n2, {
1808
3050
  doc: n2,
1809
3051
  mirror: mirror2,
@@ -1828,7 +3070,8 @@ function snapshot(n2, options) {
1828
3070
  onStylesheetLoad,
1829
3071
  stylesheetLoadTimeout,
1830
3072
  keepIframeSrcFn,
1831
- newlyAddedElement: false
3073
+ newlyAddedElement: false,
3074
+ selectorOptions
1832
3075
  });
1833
3076
  }
1834
3077
  const MEDIA_SELECTOR = /(max|min)-device-(width|height)/;
@@ -1865,6 +3108,33 @@ const pseudoClassPlugin = {
1865
3108
  };
1866
3109
  }
1867
3110
  };
3111
+ const animationFillModePlugin = {
3112
+ postcssPlugin: "postcss-animation-fill-mode",
3113
+ prepare: function() {
3114
+ return {
3115
+ Rule: function(rule2) {
3116
+ let hasAnimation = false;
3117
+ let hasAnimationFillMode = false;
3118
+ let animationDeclaration = null;
3119
+ rule2.walkDecls((decl) => {
3120
+ if (decl.prop === "animation") {
3121
+ hasAnimation = true;
3122
+ animationDeclaration = decl;
3123
+ }
3124
+ if (decl.prop === "animation-fill-mode") {
3125
+ hasAnimationFillMode = true;
3126
+ }
3127
+ });
3128
+ if (hasAnimation && !hasAnimationFillMode && animationDeclaration) {
3129
+ rule2.insertAfter(animationDeclaration, {
3130
+ prop: "animation-fill-mode",
3131
+ value: "forwards"
3132
+ });
3133
+ }
3134
+ }
3135
+ };
3136
+ }
3137
+ };
1868
3138
  function getDefaultExportFromCjs$1(x2) {
1869
3139
  return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2;
1870
3140
  }
@@ -1883,12 +3153,12 @@ function getAugmentedNamespace$1(n2) {
1883
3153
  } else
1884
3154
  a2 = {};
1885
3155
  Object.defineProperty(a2, "__esModule", { value: true });
1886
- Object.keys(n2).forEach(function(k) {
1887
- var d = Object.getOwnPropertyDescriptor(n2, k);
1888
- Object.defineProperty(a2, k, d.get ? d : {
3156
+ Object.keys(n2).forEach(function(k2) {
3157
+ var d = Object.getOwnPropertyDescriptor(n2, k2);
3158
+ Object.defineProperty(a2, k2, d.get ? d : {
1889
3159
  enumerable: true,
1890
3160
  get: function() {
1891
- return n2[k];
3161
+ return n2[k2];
1892
3162
  }
1893
3163
  });
1894
3164
  });
@@ -2335,7 +3605,7 @@ function cloneNode$1(obj, parent) {
2335
3605
  } else if (i2 === "source") {
2336
3606
  cloned[i2] = value;
2337
3607
  } else if (Array.isArray(value)) {
2338
- cloned[i2] = value.map((j) => cloneNode$1(j, cloned));
3608
+ cloned[i2] = value.map((j2) => cloneNode$1(j2, cloned));
2339
3609
  } else {
2340
3610
  if (type === "object" && value !== null)
2341
3611
  value = cloneNode$1(value);
@@ -2576,7 +3846,7 @@ let Node$5$1 = class Node2 {
2576
3846
  }
2577
3847
  return result2;
2578
3848
  }
2579
- toJSON(_, inputs) {
3849
+ toJSON(_2, inputs) {
2580
3850
  let fixed = {};
2581
3851
  let emitInputs = inputs == null;
2582
3852
  inputs = inputs || /* @__PURE__ */ new Map();
@@ -4292,8 +5562,8 @@ let Parser$1$1 = class Parser {
4292
5562
  return;
4293
5563
  let founded = 0;
4294
5564
  let token;
4295
- for (let j = colon - 1; j >= 0; j--) {
4296
- token = tokens[j];
5565
+ for (let j2 = colon - 1; j2 >= 0; j2--) {
5566
+ token = tokens[j2];
4297
5567
  if (token[0] !== "space") {
4298
5568
  founded += 1;
4299
5569
  if (founded === 2)
@@ -4415,8 +5685,8 @@ let Parser$1$1 = class Parser {
4415
5685
  } else if (token[1].toLowerCase() === "important") {
4416
5686
  let cache = tokens.slice(0);
4417
5687
  let str = "";
4418
- for (let j = i2; j > 0; j--) {
4419
- let type = cache[j][0];
5688
+ for (let j2 = i2; j2 > 0; j2--) {
5689
+ let type = cache[j2][0];
4420
5690
  if (str.trim().indexOf("!") === 0 && type !== "space") {
4421
5691
  break;
4422
5692
  }
@@ -5609,7 +6879,8 @@ function adaptCssForReplay(cssText, cache) {
5609
6879
  try {
5610
6880
  const ast = postcss$1$1([
5611
6881
  mediaSelectorPlugin,
5612
- pseudoClassPlugin
6882
+ pseudoClassPlugin,
6883
+ animationFillModePlugin
5613
6884
  ]).process(cssText);
5614
6885
  result2 = ast.css;
5615
6886
  } catch (error) {
@@ -6142,12 +7413,12 @@ function getAugmentedNamespace(n2) {
6142
7413
  } else
6143
7414
  a2 = {};
6144
7415
  Object.defineProperty(a2, "__esModule", { value: true });
6145
- Object.keys(n2).forEach(function(k) {
6146
- var d = Object.getOwnPropertyDescriptor(n2, k);
6147
- Object.defineProperty(a2, k, d.get ? d : {
7416
+ Object.keys(n2).forEach(function(k2) {
7417
+ var d = Object.getOwnPropertyDescriptor(n2, k2);
7418
+ Object.defineProperty(a2, k2, d.get ? d : {
6148
7419
  enumerable: true,
6149
7420
  get: function() {
6150
- return n2[k];
7421
+ return n2[k2];
6151
7422
  }
6152
7423
  });
6153
7424
  });
@@ -6594,7 +7865,7 @@ function cloneNode(obj, parent) {
6594
7865
  } else if (i2 === "source") {
6595
7866
  cloned[i2] = value;
6596
7867
  } else if (Array.isArray(value)) {
6597
- cloned[i2] = value.map((j) => cloneNode(j, cloned));
7868
+ cloned[i2] = value.map((j2) => cloneNode(j2, cloned));
6598
7869
  } else {
6599
7870
  if (type === "object" && value !== null)
6600
7871
  value = cloneNode(value);
@@ -6835,7 +8106,7 @@ let Node$5 = class Node22 {
6835
8106
  }
6836
8107
  return result2;
6837
8108
  }
6838
- toJSON(_, inputs) {
8109
+ toJSON(_2, inputs) {
6839
8110
  let fixed = {};
6840
8111
  let emitInputs = inputs == null;
6841
8112
  inputs = inputs || /* @__PURE__ */ new Map();
@@ -8551,8 +9822,8 @@ let Parser$1 = class Parser2 {
8551
9822
  return;
8552
9823
  let founded = 0;
8553
9824
  let token;
8554
- for (let j = colon - 1; j >= 0; j--) {
8555
- token = tokens[j];
9825
+ for (let j2 = colon - 1; j2 >= 0; j2--) {
9826
+ token = tokens[j2];
8556
9827
  if (token[0] !== "space") {
8557
9828
  founded += 1;
8558
9829
  if (founded === 2)
@@ -8674,8 +9945,8 @@ let Parser$1 = class Parser2 {
8674
9945
  } else if (token[1].toLowerCase() === "important") {
8675
9946
  let cache = tokens.slice(0);
8676
9947
  let str = "";
8677
- for (let j = i2; j > 0; j--) {
8678
- let type = cache[j][0];
9948
+ for (let j2 = i2; j2 > 0; j2--) {
9949
+ let type = cache[j2][0];
8679
9950
  if (str.trim().indexOf("!") === 0 && type !== "space") {
8680
9951
  break;
8681
9952
  }
@@ -9851,7 +11122,7 @@ const CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9-]+$/;
9851
11122
  const camelize = (str) => {
9852
11123
  if (CUSTOM_PROPERTY_REGEX.test(str))
9853
11124
  return str;
9854
- return str.replace(camelizeRE, (_, c2) => c2 ? c2.toUpperCase() : "");
11125
+ return str.replace(camelizeRE, (_2, c2) => c2 ? c2.toUpperCase() : "");
9855
11126
  };
9856
11127
  const hyphenateRE = /\B([A-Z])/g;
9857
11128
  const hyphenate = (str) => {
@@ -14981,7 +16252,7 @@ class VisibilityManager {
14981
16252
  }
14982
16253
  }
14983
16254
  }
14984
- const version$1 = "2.1.3-alpha.3";
16255
+ const version$1 = "3.1.1-alpha.1";
14985
16256
  let wrappedEmit;
14986
16257
  let takeFullSnapshot$1;
14987
16258
  let canvasManager;
@@ -15143,13 +16414,27 @@ function record(options = {}) {
15143
16414
  }
15144
16415
  return e2;
15145
16416
  };
16417
+ let lastMetaHref = null;
16418
+ let navSnapshotInProgress = false;
15146
16419
  wrappedEmit = (r2, isCheckout) => {
15147
- var _a2;
16420
+ var _a2, _b2;
15148
16421
  const e2 = r2;
15149
16422
  e2.timestamp = nowTimestamp();
16423
+ let navTriggeredFS = false;
15150
16424
  if (((_a2 = mutationBuffers[0]) == null ? void 0 : _a2.isFrozen()) && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {
15151
16425
  mutationBuffers.forEach((buf) => buf.unfreeze());
15152
16426
  }
16427
+ if (!navSnapshotInProgress && e2.type !== EventType.Meta && e2.type !== EventType.FullSnapshot && lastMetaHref && window.location.href !== lastMetaHref) {
16428
+ navSnapshotInProgress = true;
16429
+ try {
16430
+ recentVisibilityChanges = 0;
16431
+ incrementalSnapshotCount = 0;
16432
+ navTriggeredFS = true;
16433
+ takeFullSnapshot$1(true);
16434
+ } finally {
16435
+ navSnapshotInProgress = false;
16436
+ }
16437
+ }
15153
16438
  if (inEmittingFrame) {
15154
16439
  emit == null ? void 0 : emit(eventProcessor(e2), isCheckout);
15155
16440
  } else if (passEmitsToParent) {
@@ -15161,6 +16446,9 @@ function record(options = {}) {
15161
16446
  };
15162
16447
  window.parent.postMessage(message, "*");
15163
16448
  }
16449
+ if (e2.type === EventType.Meta) {
16450
+ lastMetaHref = ((_b2 = e2.data) == null ? void 0 : _b2.href) || window.location.href;
16451
+ }
15164
16452
  if (e2.type === EventType.FullSnapshot) {
15165
16453
  lastFullSnapshotEvent = e2;
15166
16454
  incrementalSnapshotCount = 0;
@@ -15169,14 +16457,16 @@ function record(options = {}) {
15169
16457
  return;
15170
16458
  }
15171
16459
  incrementalSnapshotCount++;
15172
- const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;
15173
- const exceedTime = checkoutEveryNms && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;
15174
- const exceedVisibility = checkoutEveryNvm && recentVisibilityChanges >= checkoutEveryNvm;
15175
- if (exceedCount || exceedTime || exceedVisibility) {
15176
- if (exceedVisibility) {
15177
- recentVisibilityChanges = 0;
16460
+ if (!navTriggeredFS) {
16461
+ const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;
16462
+ const exceedTime = checkoutEveryNms && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;
16463
+ const exceedVisibility = checkoutEveryNvm && recentVisibilityChanges >= checkoutEveryNvm;
16464
+ if (exceedCount || exceedTime || exceedVisibility) {
16465
+ if (exceedVisibility) {
16466
+ recentVisibilityChanges = 0;
16467
+ }
16468
+ takeFullSnapshot$1(true);
15178
16469
  }
15179
- takeFullSnapshot$1(true);
15180
16470
  }
15181
16471
  }
15182
16472
  };
@@ -15603,30 +16893,30 @@ const mittProxy = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePro
15603
16893
  __proto__: null,
15604
16894
  default: mitt$1
15605
16895
  }, Symbol.toStringTag, { value: "Module" }));
15606
- function polyfill(w = window, d = document) {
15607
- if ("scrollBehavior" in d.documentElement.style && w.__forceSmoothScrollPolyfill__ !== true) {
16896
+ function polyfill(w2 = window, d = document) {
16897
+ if ("scrollBehavior" in d.documentElement.style && w2.__forceSmoothScrollPolyfill__ !== true) {
15608
16898
  return;
15609
16899
  }
15610
- const Element2 = w.HTMLElement || w.Element;
16900
+ const Element2 = w2.HTMLElement || w2.Element;
15611
16901
  const SCROLL_TIME = 468;
15612
16902
  const original = {
15613
- scroll: w.scroll || w.scrollTo,
15614
- scrollBy: w.scrollBy,
16903
+ scroll: w2.scroll || w2.scrollTo,
16904
+ scrollBy: w2.scrollBy,
15615
16905
  elementScroll: Element2.prototype.scroll || scrollElement,
15616
16906
  scrollIntoView: Element2.prototype.scrollIntoView
15617
16907
  };
15618
- const now = w.performance && w.performance.now ? w.performance.now.bind(w.performance) : Date.now;
16908
+ const now = w2.performance && w2.performance.now ? w2.performance.now.bind(w2.performance) : Date.now;
15619
16909
  function isMicrosoftBrowser(userAgent) {
15620
16910
  const userAgentPatterns = ["MSIE ", "Trident/", "Edge/"];
15621
16911
  return new RegExp(userAgentPatterns.join("|")).test(userAgent);
15622
16912
  }
15623
- const ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;
16913
+ const ROUNDING_TOLERANCE = isMicrosoftBrowser(w2.navigator.userAgent) ? 1 : 0;
15624
16914
  function scrollElement(x2, y) {
15625
16915
  this.scrollLeft = x2;
15626
16916
  this.scrollTop = y;
15627
16917
  }
15628
- function ease(k) {
15629
- return 0.5 * (1 - Math.cos(Math.PI * k));
16918
+ function ease(k2) {
16919
+ return 0.5 * (1 - Math.cos(Math.PI * k2));
15630
16920
  }
15631
16921
  function shouldBailOut(firstArg) {
15632
16922
  if (firstArg === null || typeof firstArg !== "object" || firstArg.behavior === void 0 || firstArg.behavior === "auto" || firstArg.behavior === "instant") {
@@ -15648,7 +16938,7 @@ function polyfill(w = window, d = document) {
15648
16938
  }
15649
16939
  }
15650
16940
  function canOverflow(el, axis) {
15651
- const overflowValue = w.getComputedStyle(el, null)["overflow" + axis];
16941
+ const overflowValue = w2.getComputedStyle(el, null)["overflow" + axis];
15652
16942
  return overflowValue === "auto" || overflowValue === "scroll";
15653
16943
  }
15654
16944
  function isScrollable(el) {
@@ -15674,7 +16964,7 @@ function polyfill(w = window, d = document) {
15674
16964
  currentY = context.startY + (context.y - context.startY) * value;
15675
16965
  context.method.call(context.scrollable, currentX, currentY);
15676
16966
  if (currentX !== context.x || currentY !== context.y) {
15677
- w.requestAnimationFrame(step.bind(w, context));
16967
+ w2.requestAnimationFrame(step.bind(w2, context));
15678
16968
  }
15679
16969
  }
15680
16970
  function smoothScroll(el, x2, y) {
@@ -15684,9 +16974,9 @@ function polyfill(w = window, d = document) {
15684
16974
  let method;
15685
16975
  const startTime = now();
15686
16976
  if (el === d.body) {
15687
- scrollable = w;
15688
- startX = w.scrollX || w.pageXOffset;
15689
- startY = w.scrollY || w.pageYOffset;
16977
+ scrollable = w2;
16978
+ startX = w2.scrollX || w2.pageXOffset;
16979
+ startY = w2.scrollY || w2.pageYOffset;
15690
16980
  method = original.scroll;
15691
16981
  } else {
15692
16982
  scrollable = el;
@@ -15704,43 +16994,43 @@ function polyfill(w = window, d = document) {
15704
16994
  y
15705
16995
  });
15706
16996
  }
15707
- w.scroll = w.scrollTo = function() {
16997
+ w2.scroll = w2.scrollTo = function() {
15708
16998
  if (arguments[0] === void 0) {
15709
16999
  return;
15710
17000
  }
15711
17001
  if (shouldBailOut(arguments[0]) === true) {
15712
17002
  original.scroll.call(
15713
- w,
15714
- arguments[0].left !== void 0 ? arguments[0].left : typeof arguments[0] !== "object" ? arguments[0] : w.scrollX || w.pageXOffset,
17003
+ w2,
17004
+ arguments[0].left !== void 0 ? arguments[0].left : typeof arguments[0] !== "object" ? arguments[0] : w2.scrollX || w2.pageXOffset,
15715
17005
  // use top prop, second argument if present or fallback to scrollY
15716
- arguments[0].top !== void 0 ? arguments[0].top : arguments[1] !== void 0 ? arguments[1] : w.scrollY || w.pageYOffset
17006
+ arguments[0].top !== void 0 ? arguments[0].top : arguments[1] !== void 0 ? arguments[1] : w2.scrollY || w2.pageYOffset
15717
17007
  );
15718
17008
  return;
15719
17009
  }
15720
17010
  smoothScroll.call(
15721
- w,
17011
+ w2,
15722
17012
  d.body,
15723
- arguments[0].left !== void 0 ? ~~arguments[0].left : w.scrollX || w.pageXOffset,
15724
- arguments[0].top !== void 0 ? ~~arguments[0].top : w.scrollY || w.pageYOffset
17013
+ arguments[0].left !== void 0 ? ~~arguments[0].left : w2.scrollX || w2.pageXOffset,
17014
+ arguments[0].top !== void 0 ? ~~arguments[0].top : w2.scrollY || w2.pageYOffset
15725
17015
  );
15726
17016
  };
15727
- w.scrollBy = function() {
17017
+ w2.scrollBy = function() {
15728
17018
  if (arguments[0] === void 0) {
15729
17019
  return;
15730
17020
  }
15731
17021
  if (shouldBailOut(arguments[0])) {
15732
17022
  original.scrollBy.call(
15733
- w,
17023
+ w2,
15734
17024
  arguments[0].left !== void 0 ? arguments[0].left : typeof arguments[0] !== "object" ? arguments[0] : 0,
15735
17025
  arguments[0].top !== void 0 ? arguments[0].top : arguments[1] !== void 0 ? arguments[1] : 0
15736
17026
  );
15737
17027
  return;
15738
17028
  }
15739
17029
  smoothScroll.call(
15740
- w,
17030
+ w2,
15741
17031
  d.body,
15742
- ~~arguments[0].left + (w.scrollX || w.pageXOffset),
15743
- ~~arguments[0].top + (w.scrollY || w.pageYOffset)
17032
+ ~~arguments[0].left + (w2.scrollX || w2.pageXOffset),
17033
+ ~~arguments[0].top + (w2.scrollY || w2.pageYOffset)
15744
17034
  );
15745
17035
  };
15746
17036
  Element2.prototype.scroll = Element2.prototype.scrollTo = function() {
@@ -15805,15 +17095,15 @@ function polyfill(w = window, d = document) {
15805
17095
  scrollableParent.scrollLeft + clientRects.left - parentRects.left,
15806
17096
  scrollableParent.scrollTop + clientRects.top - parentRects.top
15807
17097
  );
15808
- if (w.getComputedStyle(scrollableParent).position !== "fixed") {
15809
- w.scrollBy({
17098
+ if (w2.getComputedStyle(scrollableParent).position !== "fixed") {
17099
+ w2.scrollBy({
15810
17100
  left: parentRects.left,
15811
17101
  top: parentRects.top,
15812
17102
  behavior: "smooth"
15813
17103
  });
15814
17104
  }
15815
17105
  } else {
15816
- w.scrollBy({
17106
+ w2.scrollBy({
15817
17107
  left: clientRects.left,
15818
17108
  top: clientRects.top,
15819
17109
  behavior: "smooth"
@@ -16005,16 +17295,16 @@ function s(n2, o2) {
16005
17295
  var S = b.value;
16006
17296
  if (void 0 === S)
16007
17297
  return c(p, g);
16008
- var w = "string" == typeof S ? { target: S } : S, j = w.target, E = w.actions, R = void 0 === E ? [] : E, N = w.cond, O = void 0 === N ? function() {
17298
+ var w2 = "string" == typeof S ? { target: S } : S, j2 = w2.target, E = w2.actions, R = void 0 === E ? [] : E, N2 = w2.cond, O2 = void 0 === N2 ? function() {
16009
17299
  return true;
16010
- } : N, _ = void 0 === j, k = null != j ? j : p, T = n2.states[k];
16011
- if (O(g, d)) {
16012
- var q = t(f((_ ? r(R) : [].concat(x2.exit, R, T.entry).filter(function(t2) {
17300
+ } : N2, _2 = void 0 === j2, k2 = null != j2 ? j2 : p, T = n2.states[k2];
17301
+ if (O2(g, d)) {
17302
+ var q2 = t(f((_2 ? r(R) : [].concat(x2.exit, R, T.entry).filter(function(t2) {
16013
17303
  return t2;
16014
17304
  })).map(function(t2) {
16015
17305
  return i$2(t2, y._options.actions);
16016
- }), g, d), 3), z = q[0], A = q[1], B = q[2], C = null != j ? j : p;
16017
- return { value: C, context: A, actions: z, changed: j !== p || z.length > 0 || B, matches: a(C) };
17306
+ }), g, d), 3), z = q2[0], A = q2[1], B2 = q2[2], C = null != j2 ? j2 : p;
17307
+ return { value: C, context: A, actions: z, changed: j2 !== p || z.length > 0 || B2, matches: a(C) };
16018
17308
  }
16019
17309
  }
16020
17310
  } catch (t2) {
@@ -18499,7 +19789,7 @@ class Replayer {
18499
19789
  this.config.logger.log(REPLAY_CONSOLE_PREFIX, ...args);
18500
19790
  }
18501
19791
  }
18502
- const version = "2.1.3-alpha.3";
19792
+ const version = "3.1.1-alpha.1";
18503
19793
  const { getVersion } = record;
18504
19794
  const { isRecording } = record;
18505
19795
  const { flushCustomEventQueue } = record;
@@ -18588,8 +19878,8 @@ var freb = function(eb, start) {
18588
19878
  }
18589
19879
  var r2 = new u32(b[30]);
18590
19880
  for (var i = 1; i < 30; ++i) {
18591
- for (var j = b[i]; j < b[i + 1]; ++j) {
18592
- r2[j] = j - b[i] << 5 | i;
19881
+ for (var j2 = b[i]; j2 < b[i + 1]; ++j2) {
19882
+ r2[j2] = j2 - b[i] << 5 | i;
18593
19883
  }
18594
19884
  }
18595
19885
  return [b, r2];
@@ -18614,9 +19904,9 @@ var hMap = function(cd, mb, r2) {
18614
19904
  var l2 = new u16(mb);
18615
19905
  for (; i < s2; ++i)
18616
19906
  ++l2[cd[i] - 1];
18617
- var le = new u16(mb);
19907
+ var le2 = new u16(mb);
18618
19908
  for (i = 0; i < mb; ++i) {
18619
- le[i] = le[i - 1] + l2[i - 1] << 1;
19909
+ le2[i] = le2[i - 1] + l2[i - 1] << 1;
18620
19910
  }
18621
19911
  var co;
18622
19912
  if (r2) {
@@ -18626,7 +19916,7 @@ var hMap = function(cd, mb, r2) {
18626
19916
  if (cd[i]) {
18627
19917
  var sv = i << 4 | cd[i];
18628
19918
  var r_1 = mb - cd[i];
18629
- var v2 = le[cd[i] - 1]++ << r_1;
19919
+ var v2 = le2[cd[i] - 1]++ << r_1;
18630
19920
  for (var m = v2 | (1 << r_1) - 1; v2 <= m; ++v2) {
18631
19921
  co[rev[v2] >>> rvb] = sv;
18632
19922
  }
@@ -18635,7 +19925,7 @@ var hMap = function(cd, mb, r2) {
18635
19925
  } else {
18636
19926
  co = new u16(s2);
18637
19927
  for (i = 0; i < s2; ++i)
18638
- co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];
19928
+ co[i] = rev[le2[cd[i] - 1]++] >>> 15 - cd[i];
18639
19929
  }
18640
19930
  return co;
18641
19931
  };
@@ -18750,10 +20040,10 @@ var inflt = function(dat, buf, st) {
18750
20040
  ldt[i++] = c2;
18751
20041
  }
18752
20042
  }
18753
- var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
18754
- lbt = max(lt);
20043
+ var lt2 = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
20044
+ lbt = max(lt2);
18755
20045
  dbt = max(dt);
18756
- lm = hMap(lt, lbt, 1);
20046
+ lm = hMap(lt2, lbt, 1);
18757
20047
  dm = hMap(dt, dbt, 1);
18758
20048
  } else
18759
20049
  throw "invalid block type";
@@ -18900,7 +20190,7 @@ var lc = function(c2) {
18900
20190
  ;
18901
20191
  var cl = new u16(++s2);
18902
20192
  var cli = 0, cln = c2[0], cls = 1;
18903
- var w = function(v2) {
20193
+ var w2 = function(v2) {
18904
20194
  cl[cli++] = v2;
18905
20195
  };
18906
20196
  for (var i = 1; i <= s2; ++i) {
@@ -18909,20 +20199,20 @@ var lc = function(c2) {
18909
20199
  else {
18910
20200
  if (!cln && cls > 2) {
18911
20201
  for (; cls > 138; cls -= 138)
18912
- w(32754);
20202
+ w2(32754);
18913
20203
  if (cls > 2) {
18914
- w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);
20204
+ w2(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);
18915
20205
  cls = 0;
18916
20206
  }
18917
20207
  } else if (cls > 3) {
18918
- w(cln), --cls;
20208
+ w2(cln), --cls;
18919
20209
  for (; cls > 6; cls -= 6)
18920
- w(8304);
20210
+ w2(8304);
18921
20211
  if (cls > 2)
18922
- w(cls - 3 << 5 | 8208), cls = 0;
20212
+ w2(cls - 3 << 5 | 8208), cls = 0;
18923
20213
  }
18924
20214
  while (cls--)
18925
- w(cln);
20215
+ w2(cln);
18926
20216
  cls = 1;
18927
20217
  cln = c2[i];
18928
20218
  }
@@ -19013,16 +20303,16 @@ var deo = /* @__PURE__ */ new u32([65540, 131080, 131088, 131104, 262176, 104870
19013
20303
  var dflt = function(dat, lvl, plvl, pre, post, lst) {
19014
20304
  var s2 = dat.length;
19015
20305
  var o2 = new u8(pre + s2 + 5 * (1 + Math.floor(s2 / 7e3)) + post);
19016
- var w = o2.subarray(pre, o2.length - post);
20306
+ var w2 = o2.subarray(pre, o2.length - post);
19017
20307
  var pos = 0;
19018
20308
  if (!lvl || s2 < 8) {
19019
20309
  for (var i = 0; i <= s2; i += 65535) {
19020
20310
  var e2 = i + 65535;
19021
20311
  if (e2 < s2) {
19022
- pos = wfblk(w, pos, dat.subarray(i, e2));
20312
+ pos = wfblk(w2, pos, dat.subarray(i, e2));
19023
20313
  } else {
19024
- w[i] = lst;
19025
- pos = wfblk(w, pos, dat.subarray(i, s2));
20314
+ w2[i] = lst;
20315
+ pos = wfblk(w2, pos, dat.subarray(i, s2));
19026
20316
  }
19027
20317
  }
19028
20318
  } else {
@@ -19046,12 +20336,12 @@ var dflt = function(dat, lvl, plvl, pre, post, lst) {
19046
20336
  if (wi <= i) {
19047
20337
  var rem = s2 - i;
19048
20338
  if ((lc_1 > 7e3 || li > 24576) && rem > 423) {
19049
- pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);
20339
+ pos = wblk(dat, w2, 0, syms, lf, df, eb, li, bs, i - bs, pos);
19050
20340
  li = lc_1 = eb = 0, bs = i;
19051
- for (var j = 0; j < 286; ++j)
19052
- lf[j] = 0;
19053
- for (var j = 0; j < 30; ++j)
19054
- df[j] = 0;
20341
+ for (var j2 = 0; j2 < 286; ++j2)
20342
+ lf[j2] = 0;
20343
+ for (var j2 = 0; j2 < 30; ++j2)
20344
+ df[j2] = 0;
19055
20345
  }
19056
20346
  var l2 = 2, d = 0, ch_1 = c2, dif = imod - pimod & 32767;
19057
20347
  if (rem > 2 && hv == hsh(i - dif)) {
@@ -19069,8 +20359,8 @@ var dflt = function(dat, lvl, plvl, pre, post, lst) {
19069
20359
  break;
19070
20360
  var mmd = Math.min(dif, nl - 2);
19071
20361
  var md = 0;
19072
- for (var j = 0; j < mmd; ++j) {
19073
- var ti = i - dif + j + 32768 & 32767;
20362
+ for (var j2 = 0; j2 < mmd; ++j2) {
20363
+ var ti = i - dif + j2 + 32768 & 32767;
19074
20364
  var pti = prev[ti];
19075
20365
  var cd = ti - pti + 32768 & 32767;
19076
20366
  if (cd > md)
@@ -19096,7 +20386,7 @@ var dflt = function(dat, lvl, plvl, pre, post, lst) {
19096
20386
  }
19097
20387
  }
19098
20388
  }
19099
- pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);
20389
+ pos = wblk(dat, w2, lst, syms, lf, df, eb, li, bs, i - bs, pos);
19100
20390
  }
19101
20391
  return slc(o2, 0, pre + shft(pos) + post);
19102
20392
  };
@@ -19154,7 +20444,7 @@ function strToU8(str, latin1) {
19154
20444
  return new TextEncoder().encode(str);
19155
20445
  var ar = new u8(str.length + (str.length >>> 1));
19156
20446
  var ai = 0;
19157
- var w = function(v2) {
20447
+ var w2 = function(v2) {
19158
20448
  ar[ai++] = v2;
19159
20449
  };
19160
20450
  for (var i = 0; i < l2; ++i) {
@@ -19165,13 +20455,13 @@ function strToU8(str, latin1) {
19165
20455
  }
19166
20456
  var c2 = str.charCodeAt(i);
19167
20457
  if (c2 < 128 || latin1)
19168
- w(c2);
20458
+ w2(c2);
19169
20459
  else if (c2 < 2048)
19170
- w(192 | c2 >>> 6), w(128 | c2 & 63);
20460
+ w2(192 | c2 >>> 6), w2(128 | c2 & 63);
19171
20461
  else if (c2 > 55295 && c2 < 57344)
19172
- c2 = 65536 + (c2 & 1023 << 10) | str.charCodeAt(++i) & 1023, w(240 | c2 >>> 18), w(128 | c2 >>> 12 & 63), w(128 | c2 >>> 6 & 63), w(128 | c2 & 63);
20462
+ c2 = 65536 + (c2 & 1023 << 10) | str.charCodeAt(++i) & 1023, w2(240 | c2 >>> 18), w2(128 | c2 >>> 12 & 63), w2(128 | c2 >>> 6 & 63), w2(128 | c2 & 63);
19173
20463
  else
19174
- w(224 | c2 >>> 12), w(128 | c2 >>> 6 & 63), w(128 | c2 & 63);
20464
+ w2(224 | c2 >>> 12), w2(128 | c2 >>> 6 & 63), w2(128 | c2 & 63);
19175
20465
  }
19176
20466
  return slc(ar, 0, ai);
19177
20467
  }