PageSourceSearch

https://edr-module.threatdown.com/Timeline-C3TVS3wJ.js

js threatdown.com collected 2026-09-24 17:45:18 UTC 125,829 bytes, 2,722 lines download raw bytes

1import { e as edr_remote_vue_components__loadShare__vue__loadShare__, _ as _export_sfc } from './_plugin-vue_export-helper-DvQ-EqJP.js';
2import { f as formatDateTime } from './utils-CRB9uaPI.js';
3import './edr_remote_vue_components__mf_v__runtimeInit__mf_v__-DcBObn8E.js';
4
5const _hoisted_1$7 = { class: "card-item" };
6const _hoisted_2$5 = {
7  key: 0,
8  class: "card-header"
9};
10const _hoisted_3$4 = {
11  key: 1,
12  class: "card-content"
13};
14const _hoisted_4$3 = {
15  key: 2,
16  class: "card-footer"
17};
18const _sfc_main$8 = /* @__PURE__ */ edr_remote_vue_components__loadShare__vue__loadShare__.defineComponent({
19  __name: "Card",
20  setup(__props) {
21    return (_ctx, _cache) => {
22      return edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_1$7, [
23        _ctx.$slots.header ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_2$5, [
24          edr_remote_vue_components__loadShare__vue__loadShare__.renderSlot(_ctx.$slots, "header", {}, void 0, true)
25        ])) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
26        _ctx.$slots.content ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_3$4, [
27          edr_remote_vue_components__loadShare__vue__loadShare__.renderSlot(_ctx.$slots, "content", {}, void 0, true)
28        ])) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
29        _ctx.$slots.footer ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_4$3, [
30          edr_remote_vue_components__loadShare__vue__loadShare__.renderSlot(_ctx.$slots, "footer", {}, void 0, true)
31        ])) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true)
32      ]);
33    };
34  }
35});
36
37const Card = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-6b5c3135"]]);
38
39const _hoisted_1$6 = { key: 5 };
40const _sfc_main$7 = /* @__PURE__ */ edr_remote_vue_components__loadShare__vue__loadShare__.defineComponent({
41  __name: "TimelineIcon",
42  props: {
43    color: {},
44    size: {},
45    type: {},
46    zIndex: {},
47    count: {},
48    textColor: {}
49  },
50  setup(__props) {
51    return (_ctx, _cache) => {
52      return edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("svg", {
53        style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle({ width: __props.size, height: __props.size, zIndex: __props.zIndex }),
54        viewBox: "0 0 24 24",
55        xmlns: "http://www.w3.org/2000/svg"
56      }, [
57        __props.type === "start" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("path", {
58          key: 0,
59          "fill-rule": "evenodd",
60          "clip-rule": "evenodd",
61          d: "M12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2ZM12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4ZM9.5 8.05738C9.58629 8.05738 9.67111 8.07971 9.74622 8.1222L15.8397 11.5698C16.08 11.7058 16.1646 12.0109 16.0286 12.2512C15.9848 12.3287 15.921 12.3931 15.844 12.4377L9.75052 15.9655C9.51154 16.1038 9.20564 16.0223 9.06729 15.7833C9.02321 15.7072 9 15.6207 9 15.5328V8.55738C9 8.28123 9.22386 8.05738 9.5 8.05738Z",
62          style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle({ fill: __props.color })
63        }, null, 4)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
64        __props.type === "closed" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("path", {
65          key: 1,
66          "fill-rule": "evenodd",
67          "clip-rule": "evenodd",
68          d: "M12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2ZM12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4ZM9.17157 7.75736L12 10.586L14.8284 7.75736C15.219 7.36684 15.8521 7.36684 16.2426 7.75736C16.6332 8.14788 16.6332 8.78105 16.2426 9.17157L13.414 12L16.2426 14.8284C16.6332 15.219 16.6332 15.8521 16.2426 16.2426C15.8521 16.6332 15.219 16.6332 14.8284 16.2426L12 13.414L9.17157 16.2426C8.78105 16.6332 8.14788 16.6332 7.75736 16.2426C7.36684 15.8521 7.36684 15.219 7.75736 14.8284L10.586 12L7.75736 9.17157C7.36684 8.78105 7.36684 8.14788 7.75736 7.75736C8.14788 7.36684 8.78105 7.36684 9.17157 7.75736Z",
69          style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle({ fill: __props.color })
70        }, null, 4)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
71        ["isolation", "unlock"].includes(__props.type) ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("path", {
72          key: 2,
73          "fill-rule": "evenodd",
74          "clip-rule": "evenodd",
75          d: "M12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2ZM12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4ZM12 7.26316C13.1627 7.26316 14.1053 8.20572 14.1053 9.36842C14.1053 10.229 13.589 10.9689 12.8492 11.2954L14.1053 16.7368H9.89474L11.1498 11.295C10.4106 10.9683 9.89474 10.2286 9.89474 9.36842C9.89474 8.20572 10.8373 7.26316 12 7.26316Z",
76          style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle({ fill: __props.color })
77        }, null, 4)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
78        ["remediate", "remediated"].includes(__props.type) ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("path", {
79          key: 3,
80          "fill-rule": "evenodd",
81          "clip-rule": "evenodd",
82          d: "M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22ZM12 20C7.58172 20 4 16.4183 4 12C4 7.58172 7.58172 4 12 4C16.4183 4 20 7.58172 20 12C20 16.4183 16.4183 20 12 20ZM11.1835 15.5279L16.4856 10.2417C16.8771 9.85136 16.8777 9.21766 16.4891 8.8253C16.1004 8.43381 15.4679 8.43158 15.0764 8.82031C15.076 8.82069 15.0756 8.82106 15.0753 8.82144L10.8248 13.0555L9.4189 11.6496C9.02837 11.259 8.39521 11.259 8.00468 11.6496C7.61416 12.0401 7.61416 12.6733 8.00468 13.0638L10.4683 15.5274C10.6657 15.7248 10.9857 15.725 11.1835 15.5279Z",
83          style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle({ fill: __props.color })
84        }, null, 4)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
85        __props.type === "opened" ? (edr_remote_vue_components__loadShare__vue__loadShare__.o
85penBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("path", {
86          key: 4,
87          d: "M11.5 2C11.7761 2 12 2.22386 12 2.5V4.29289C16.97 4.29289 21 8.32289 21 13.2929C21 18.2629 16.97 22.2929 12 22.2929C7.03 22.2929 3 18.2629 3 13.2929C3 10.8029 4.01 8.56289 5.64 6.93289L7.06 8.35289C5.79 9.61289 5 11.3629 5 13.2929C5 17.1629 8.13 20.2929 12 20.2929C15.87 20.2929 19 17.1629 19 13.2929C19 9.42289 15.87 6.29289 12 6.29289V8.08579C12 8.2184 11.9473 8.34557 11.8536 8.43934C11.6583 8.6346 11.3417 8.6346 11.1464 8.43934L8.35355 5.64645C8.15829 5.45118 8.15829 5.1346 8.35355 4.93934L11.1464 2.14645C11.2402 2.05268 11.3674 2 11.5 2ZM13 9.29289V11.371L14.703 10.1794L15.8502 11.8177L13.743 13.293L15.8502 14.768L14.703 16.4064L13 15.214V17.2929H11V15.213L9.29697 16.4064L8.14982 14.768L10.256 13.293L8.14982 11.8177L9.29697 10.1794L11 11.372V9.29289H13Z",
88          style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle({ fill: __props.color })
89        }, null, 4)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
90        __props.type === "counter" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("g", _hoisted_1$6, [
91          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("circle", {
92            cx: "12",
93            cy: "12",
94            r: "10",
95            style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle({ fill: __props.color })
96          }, null, 4),
97          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("text", {
98            x: "12",
99            y: "12",
100            "text-anchor": "middle",
101            "dominant-baseline": "central",
102            style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle({
103              fill: __props.textColor,
104              fontSize: __props.count && __props.count > 99 ? "10px" : "12px",
105              fontWeight: "Medium",
106              fontFamily: "sans-serif"
107            })
108          }, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(__props.count), 5)
109        ])) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true)
110      ], 4);
111    };
112  }
113});
114
115const _hoisted_1$5 = { class: "timeline-card-container" };
116const _hoisted_2$4 = { class: "pre-header" };
117const _hoisted_3$3 = {
118  key: 3,
119  class: "timeline-item-line"
120};
121const _hoisted_4$2 = { class: "header" };
122const _hoisted_5$1 = { key: 0 };
123const _hoisted_6$1 = { key: 1 };
124const _hoisted_7$1 = { class: "content" };
125const _hoisted_8$1 = ["title"];
126const _hoisted_9$1 = ["title"];
127const _hoisted_10$1 = { key: 2 };
128const _hoisted_11$1 = {
129  key: 0,
130  class: "ellipsis no-word-wrap"
131};
132const _hoisted_12$1 = {
133  key: 1,
134  class: "ellipsis no-word-wrap capitalize"
135};
136const _hoisted_13$1 = {
137  key: 2,
138  class: "ellipsis no-word-wrap"
139};
140const _sfc_main$6 = /* @__PURE__ */ edr_remote_vue_components__loadShare__vue__loadShare__.defineComponent({
141  __name: "TimelineCard",
142  props: {
143    info: {},
144    lastCard: { type: Boolean },
145    osType: {}
146  },
147  setup(__props) {
148    const props = __props;
149    const friendlySeverity = {
150      0: "Information",
151      1: "Low",
152      2: "Medium",
153      3: "High",
154      4: "Critical"
155    };
156    const details = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "details" in props.info ? props.info.details : void 0);
157    const instances = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "instances" in props.info ? props.info.instances : []);
158    const instancesCount = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "instances_count" in props.info ? props.info.instances_count : 0);
159    const itemType = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => props.info.item_type);
160    const mode = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "mode" in props.info ? props.info.mode : void 0);
161    const path = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "path" in props.info ? props.info.path : void 0);
162    const ruleSeverity = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "rule_severity" in props.info ? props.info.rule_severity : void 0);
163    const ruleTag = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "rule_tag" in props.info ? props.info.rule_tag : void 0);
164    const startDate = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "start_date" in props.info ? props.info.start_date : void 0);
165    const timestamp = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "timestamp" in props.info ? props.info.timestamp : void 0);
166    const type = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "type" in props.info ? props.info.type : void 0);
167    const user = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "user" in props.info ? props.info.user : void 0);
168    const sortedInstances = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => {
169      if (!instances.value) return [];
170      return instances.value.map((instance) => instance.tactic_name).sort((a, b) => b.localeCompare(a));
171    });
172    const severity = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => {
173      if (ruleSeverity.value === void 0) return void 0;
174      return friendlySeverity[ruleSeverity.value]?.toLowerCase() || "low";
175    });
176    const actionType = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => {
177      return type.value?.split("_").pop()?.toLowerCase();
178    });
179    const actionIcon = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => {
180      switch (actionType.value) {
181        case "opened":
182          return "opened";
183        case "closed":
184          return "closed";
185        case "isolation":
186          return "isolation";
187        case "unlock":
188          return "unlock";
189        case "remediated":
190        case "remediate":
191          return "remediated";
192        default:
193          return "none";
194      }
195    });
196    const actionTypeText = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => {
197      switch (actionType.value) {
198        case "opened":
199          return "Reopened";
200        case "closed":
201          return "Closed";
202        case "isolation":
203          if (!details.value?.desktop && !details.value?.network && !details.value?.process) {
204            return "Deisolation";
205          }
206          return "Isolation";
207        case "unlock":
208          return "Deisolation";
209        case "remediated":
210        case "remediate":
211          return "Remediated";
212        default:
213          return actionType.value;
214      }
215    });
216    const processName = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => {
217      if (!path.value) return void 0;
218      if (props.osType?.toLowerCase() !== "windows") {
219        return path.value.split("/").pop();
220      }
221      return path.value.split("\\").pop();
222    });
223    return (_ctx, _cache) => {
224      return edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_1$5, [
225        edr_remote_vue_components__loadShare__vue__loadShare__.createVNode(Card, null, {
226          header: edr_remote_vue_components__loadShare__vue__loadShare__.withCtx(() => [
227            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_2$4, [
228              itemType.value === "info" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createBlock(_sfc_main$7, {
229                key: 0,
230                "z-index": 900,
231                class: "timeline-icon-wrapper",
232                style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle(`margin-right:${props.lastCard ? "10px" : "0px"}`),
233                color: "var(--edr-module-timeline-icon-text-color)",
234                size: "var(--edr-module-timeline-icon-text-size)",
235                type: "start"
236              }, null, 8, ["style"])) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
237              itemType.value === "detection" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createBlock(_sfc_main$7, {
238                key: 1,
239                "z-index": 900,
240                class: "timeline-icon-wrapper",
241                style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle(`margin-right:${props.lastCard ? "10px" : "0px"}`),
242                color: `var(--edr-module-timeline-${severity.value}-background-color)`,
243                size: "var(--edr-module-timeline-icon-text-size)",
244                "text-color": `var(--edr-module-timeline-${severity.value}-text-color)`,
245                count: instancesCount.value,
246                type: "counter"
247              }, null, 8, ["style", "color", "text-color", "count"])) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
248              itemType.value === "action" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createBlock(_sfc_main$7, {
249                key: 2,
250                "z-index": 900,
251                class: "timeline-icon-wrapper",
252                style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle(`margin-right:${props.lastCard ? "10px" : "0px"}`),
253                color: "var(--edr-module-timeline-icon-text-color)",
254                size: "var(--edr-module-timeline-icon-text-size)",
255                type: actionIcon.value
256              }, null, 8, ["style", "type"])) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
257              !props.lastCard ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_3$3)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true)
258            ]),
259            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_4$2, [
260              itemType.value === "info" || itemType.value === "action" ? (edr_remote_vue_components__loadShare__vue__loadShare__.o
260penBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_5$1, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(edr_remote_vue_components__loadShare__vue__loadShare__.unref(formatDateTime)(timestamp.value, "datetime")), 1)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
261              itemType.value === "detection" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_6$1, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(edr_remote_vue_components__loadShare__vue__loadShare__.unref(formatDateTime)(startDate.value, "datetime")), 1)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true)
262            ])
263          ]),
264          content: edr_remote_vue_components__loadShare__vue__loadShare__.withCtx(() => [
265            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_7$1, [
266              itemType.value === "info" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", {
267                key: 0,
268                class: "ellipsis no-word-wrap",
269                title: user.value
270              }, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(user.value?.toUpperCase() || "--"), 9, _hoisted_8$1)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
271              itemType.value === "detection" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", {
272                key: 1,
273                class: "no-word-wrap",
274                title: sortedInstances.value.join(", ")
275              }, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(sortedInstances.value[0]) + " " + edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(instances.value.length > 1 ? `+${instances.value.length - 1}` : ""), 9, _hoisted_9$1)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
276              itemType.value === "action" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_10$1, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(actionTypeText.value), 1)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true)
277            ])
278          ]),
279          footer: edr_remote_vue_components__loadShare__vue__loadShare__.withCtx(() => [
280            itemType.value === "info" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_11$1, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(processName.value || "--"), 1)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
281            itemType.value === "detection" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_12$1, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(ruleTag.value), 1)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
282            itemType.value === "action" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_13$1, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(`${type.value === "isolation" || type.value === "unlock" ? mode.value : "-"}`), 1)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true)
283          ]),
284          _: 1
285        })
286      ]);
287    };
288  }
289});
290
291const TimelineCard = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-8cb4355b"]]);
292
293/**
294 * Custom positioning reference element.
295 * @see https://floating-ui.com/docs/virtual-elements
296 */
297
298const min = Math.min;
299const max = Math.max;
300const round = Math.round;
301const floor = Math.floor;
302const createCoords = v => ({
303  x: v,
304  y: v
305});
306const oppositeSideMap = {
307  left: 'right',
308  right: 'left',
309  bottom: 'top',
310  top: 'bottom'
311};
312const oppositeAlignmentMap = {
313  start: 'end',
314  end: 'start'
315};
316function clamp(start, value, end) {
317  return max(start, min(value, end));
318}
319function evaluate(value, param) {
320  return typeof value === 'function' ? value(param) : value;
321}
322function getSide(placement) {
323  return placement.split('-')[0];
324}
325function getAlignment(placement) {
326  return placement.split('-')[1];
327}
328function getOppositeAxis(axis) {
329  return axis === 'x' ? 'y' : 'x';
330}
331function getAxisLength(axis) {
332  return axis === 'y' ? 'height' : 'width';
333}
334const yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);
335function getSideAxis(placement) {
336  return yAxisSides.has(getSide(placement)) ? 'y' : 'x';
337}
338function getAlignmentAxis(placement) {
339  return getOppositeAxis(getSideAxis(placement));
340}
341function getAlignmentSides(placement, rects, rtl) {
342  if (rtl === void 0) {
343    rtl = false;
vendor: 8,700 bytes, lines 344-645
344  }
345  const alignment = getAlignment(placement);
346  const alignmentAxis = getAlignmentAxis(placement);
347  const length = getAxisLength(alignmentAxis);
348  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';
349  if (rects.reference[length] > rects.floating[length]) {
350    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
351  }
352  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];
353}
354function getExpandedPlacements(placement) {
355  const oppositePlacement = getOppositePlacement(placement);
356  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
357}
358function getOppositeAlignmentPlacement(placement) {
359  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);
360}
361const lrPlacement = ['left', 'right'];
362const rlPlacement = ['right', 'left'];
363const tbPlacement = ['top', 'bottom'];
364const btPlacement = ['bottom', 'top'];
365function getSideList(side, isStart, rtl) {
366  switch (side) {
367    case 'top':
368    case 'bottom':
369      if (rtl) return isStart ? rlPlacement : lrPlacement;
370      return isStart ? lrPlacement : rlPlacement;
371    case 'left':
372    case 'right':
373      return isStart ? tbPlacement : btPlacement;
374    default:
375      return [];
376  }
377}
378function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
379  const alignment = getAlignment(placement);
380  let list = getSideList(getSide(placement), direction === 'start', rtl);
381  if (alignment) {
382    list = list.map(side => side + "-" + alignment);
383    if (flipAlignment) {
384      list = list.concat(list.map(getOppositeAlignmentPlacement));
385    }
386  }
387  return list;
388}
389function getOppositePlacement(placement) {
390  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);
391}
392function expandPaddingObject(padding) {
393  return {
394    top: 0,
395    right: 0,
396    bottom: 0,
397    left: 0,
398    ...padding
399  };
400}
401function getPaddingObject(padding) {
402  return typeof padding !== 'number' ? expandPaddingObject(padding) : {
403    top: padding,
404    right: padding,
405    bottom: padding,
406    left: padding
407  };
408}
409function rectToClientRect(rect) {
410  const {
411    x,
412    y,
413    width,
414    height
415  } = rect;
416  return {
417    width,
418    height,
419    top: y,
420    left: x,
421    right: x + width,
422    bottom: y + height,
423    x,
424    y
425  };
426}
427
428function computeCoordsFromPlacement(_ref, placement, rtl) {
429  let {
430    reference,
431    floating
432  } = _ref;
433  const sideAxis = getSideAxis(placement);
434  const alignmentAxis = getAlignmentAxis(placement);
435  const alignLength = getAxisLength(alignmentAxis);
436  const side = getSide(placement);
437  const isVertical = sideAxis === 'y';
438  const commonX = reference.x + reference.width / 2 - floating.width / 2;
439  const commonY = reference.y + reference.height / 2 - floating.height / 2;
440  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
441  let coords;
442  switch (side) {
443    case 'top':
444      coords = {
445        x: commonX,
446        y: reference.y - floating.height
447      };
448      break;
449    case 'bottom':
450      coords = {
451        x: commonX,
452        y: reference.y + reference.height
453      };
454      break;
455    case 'right':
456      coords = {
457        x: reference.x + reference.width,
458        y: commonY
459      };
460      break;
461    case 'left':
462      coords = {
463        x: reference.x - floating.width,
464        y: commonY
465      };
466      break;
467    default:
468      coords = {
469        x: reference.x,
470        y: reference.y
471      };
472  }
473  switch (getAlignment(placement)) {
474    case 'start':
475      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
476      break;
477    case 'end':
478      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
479      break;
480  }
481  return coords;
482}
483
484/**
485 * Computes the `x` and `y` coordinates that will place the floating element
486 * next to a given reference element.
487 *
488 * This export does not have any `platform` interface logic. You will need to
489 * write one for the platform you are using Floating UI with.
490 */
491const computePosition$1 = async (reference, floating, config) => {
492  const {
493    placement = 'bottom',
494    strategy = 'absolute',
495    middleware = [],
496    platform
497  } = config;
498  const validMiddleware = middleware.filter(Boolean);
499  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));
500  let rects = await platform.getElementRects({
501    reference,
502    floating,
503    strategy
504  });
505  let {
506    x,
507    y
508  } = computeCoordsFromPlacement(rects, placement, rtl);
509  let statefulPlacement = placement;
510  let middlewareData = {};
511  let resetCount = 0;
512  for (let i = 0; i < validMiddleware.length; i++) {
513    const {
514      name,
515      fn
516    } = validMiddleware[i];
517    const {
518      x: nextX,
519      y: nextY,
520      data,
521      reset
522    } = await fn({
523      x,
524      y,
525      initialPlacement: placement,
526      placement: statefulPlacement,
527      strategy,
528      middlewareData,
529      rects,
530      platform,
531      elements: {
532        reference,
533        floating
534      }
535    });
536    x = nextX != null ? nextX : x;
537    y = nextY != null ? nextY : y;
538    middlewareData = {
539      ...middlewareData,
540      [name]: {
541        ...middlewareData[name],
542        ...data
543      }
544    };
545    if (reset && resetCount <= 50) {
546      resetCount++;
547      if (typeof reset === 'object') {
548        if (reset.placement) {
549          statefulPlacement = reset.placement;
550        }
551        if (reset.rects) {
552          rects = reset.rects === true ? await platform.getElementRects({
553            reference,
554            floating,
555            strategy
556          }) : reset.rects;
557        }
558        ({
559          x,
560          y
561        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
562      }
563      i = -1;
564    }
565  }
566  return {
567    x,
568    y,
569    placement: statefulPlacement,
570    strategy,
571    middlewareData
572  };
573};
574
575/**
576 * Resolves with an object of overflow side offsets that determine how much the
577 * element is overflowing a given clipping boundary on each side.
578 * - positive = overflowing the boundary by that number of pixels
579 * - negative = how many pixels left before it will overflow
580 * - 0 = lies flush with the boundary
581 * @see https://floating-ui.com/docs/detectOverflow
582 */
583async function detectOverflow(state, options) {
584  var _await$platform$isEle;
585  if (options === void 0) {
586    options = {};
587  }
588  const {
589    x,
590    y,
591    platform,
592    rects,
593    elements,
594    strategy
595  } = state;
596  const {
597    boundary = 'clippingAncestors',
598    rootBoundary = 'viewport',
599    elementContext = 'floating',
600    altBoundary = false,
601    padding = 0
602  } = evaluate(options, state);
603  const paddingObject = getPaddingObject(padding);
604  const altContext = elementContext === 'floating' ? 'reference' : 'floating';
605  const element = elements[altBoundary ? altContext : elementContext];
606  const clippingClientRect = rectToClientRect(await platform.getClippingRect({
607    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),
608    boundary,
609    rootBoundary,
610    strategy
611  }));
612  const rect = elementContext === 'floating' ? {
613    x,
614    y,
615    width: rects.floating.width,
616    height: rects.floating.height
617  } : rects.reference;
618  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));
619  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {
620    x: 1,
621    y: 1
622  } : {
623    x: 1,
624    y: 1
625  };
626  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({
627    elements,
628    rect,
629    offsetParent,
630    strategy
631  }) : rect);
632  return {
633    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
634    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
635    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
636    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
637  };
638}
639
640/**
641 * Provides data to position an inner element of the floating element so that it
642 * appears centered to the reference element.
643 * @see https://floating-ui.com/docs/arrow
644 */
645const arrow$2
vendor: 19,998 bytes, lines 645-1199
645 = options => ({
646  name: 'arrow',
647  options,
648  async fn(state) {
649    const {
650      x,
651      y,
652      placement,
653      rects,
654      platform,
655      elements,
656      middlewareData
657    } = state;
658    // Since `element` is required, we don't Partial<> the type.
659    const {
660      element,
661      padding = 0
662    } = evaluate(options, state) || {};
663    if (element == null) {
664      return {};
665    }
666    const paddingObject = getPaddingObject(padding);
667    const coords = {
668      x,
669      y
670    };
671    const axis = getAlignmentAxis(placement);
672    const length = getAxisLength(axis);
673    const arrowDimensions = await platform.getDimensions(element);
674    const isYAxis = axis === 'y';
675    const minProp = isYAxis ? 'top' : 'left';
676    const maxProp = isYAxis ? 'bottom' : 'right';
677    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';
678    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
679    const startDiff = coords[axis] - rects.reference[axis];
680    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));
681    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;
682
683    // DOM platform can return `window` as the `offsetParent`.
684    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {
685      clientSize = elements.floating[clientProp] || rects.floating[length];
686    }
687    const centerToReference = endDiff / 2 - startDiff / 2;
688
689    // If the padding is large enough that it causes the arrow to no longer be
690    // centered, modify the padding so that it is centered.
691    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;
692    const minPadding = min(paddingObject[minProp], largestPossiblePadding);
693    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);
694
695    // Make sure the arrow doesn't overflow the floating element if the center
696    // point is outside the floating element's bounds.
697    const min$1 = minPadding;
698    const max = clientSize - arrowDimensions[length] - maxPadding;
699    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
700    const offset = clamp(min$1, center, max);
701
702    // If the reference is small enough that the arrow's padding causes it to
703    // to point to nothing for an aligned placement, adjust the offset of the
704    // floating element itself. To ensure `shift()` continues to take action,
705    // a single reset is performed when this is true.
706    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
707    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;
708    return {
709      [axis]: coords[axis] + alignmentOffset,
710      data: {
711        [axis]: offset,
712        centerOffset: center - offset - alignmentOffset,
713        ...(shouldAddOffset && {
714          alignmentOffset
715        })
716      },
717      reset: shouldAddOffset
718    };
719  }
720});
721
722/**
723 * Optimizes the visibility of the floating element by flipping the `placement`
724 * in order to keep it in view when the preferred placement(s) will overflow the
725 * clipping boundary. Alternative to `autoPlacement`.
726 * @see https://floating-ui.com/docs/flip
727 */
728const flip$1 = function (options) {
729  if (options === void 0) {
730    options = {};
731  }
732  return {
733    name: 'flip',
734    options,
735    async fn(state) {
736      var _middlewareData$arrow, _middlewareData$flip;
737      const {
738        placement,
739        middlewareData,
740        rects,
741        initialPlacement,
742        platform,
743        elements
744      } = state;
745      const {
746        mainAxis: checkMainAxis = true,
747        crossAxis: checkCrossAxis = true,
748        fallbackPlacements: specifiedFallbackPlacements,
749        fallbackStrategy = 'bestFit',
750        fallbackAxisSideDirection = 'none',
751        flipAlignment = true,
752        ...detectOverflowOptions
753      } = evaluate(options, state);
754
755      // If a reset by the arrow was caused due to an alignment offset being
756      // added, we should skip any logic now since `flip()` has already done its
757      // work.
758      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643
759      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
760        return {};
761      }
762      const side = getSide(placement);
763      const initialSideAxis = getSideAxis(initialPlacement);
764      const isBasePlacement = getSide(initialPlacement) === initialPlacement;
765      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
766      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));
767      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';
768      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {
769        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));
770      }
771      const placements = [initialPlacement, ...fallbackPlacements];
772      const overflow = await detectOverflow(state, detectOverflowOptions);
773      const overflows = [];
774      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
775      if (checkMainAxis) {
776        overflows.push(overflow[side]);
777      }
778      if (checkCrossAxis) {
779        const sides = getAlignmentSides(placement, rects, rtl);
780        overflows.push(overflow[sides[0]], overflow[sides[1]]);
781      }
782      overflowsData = [...overflowsData, {
783        placement,
784        overflows
785      }];
786
787      // One or more sides is overflowing.
788      if (!overflows.every(side => side <= 0)) {
789        var _middlewareData$flip2, _overflowsData$filter;
790        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
791        const nextPlacement = placements[nextIndex];
792        if (nextPlacement) {
793          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;
794          if (!ignoreCrossAxisOverflow ||
795          // We leave the current main axis only if every placement on that axis
796          // overflows the main axis.
797          overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {
798            // Try next placement and re-run the lifecycle.
799            return {
800              data: {
801                index: nextIndex,
802                overflows: overflowsData
803              },
804              reset: {
805                placement: nextPlacement
806              }
807            };
808          }
809        }
810
811        // First, find the candidates that fit on the mainAxis side of overflow,
812        // then find the placement that fits the best on the main crossAxis side.
813        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;
814
815        // Otherwise fallback.
816        if (!resetPlacement) {
817          switch (fallbackStrategy) {
818            case 'bestFit':
819              {
820                var _overflowsData$filter2;
821                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {
822                  if (hasFallbackAxisSideDirection) {
823                    const currentSideAxis = getSideAxis(d.placement);
824                    return currentSideAxis === initialSideAxis ||
825                    // Create a bias to the `y` side axis due to horizontal
826                    // reading directions favoring greater width.
827                    currentSideAxis === 'y';
828                  }
829                  return true;
830                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];
831                if (placement) {
832                  resetPlacement = placement;
833                }
834                break;
835              }
836            case 'initialPlacement':
837              resetPlacement = initialPlacement;
838              break;
839          }
840        }
841        if (placement !== resetPlacement) {
842          return {
843            reset: {
844              placement: resetPlacement
845            }
846          };
847        }
848      }
849      return {};
850    }
851  };
852};
853
854const originSides = /*#__PURE__*/new Set(['left', 'top']);
855
856// For type backwards-compatibility, the `OffsetOptions` type was also
857// Derivable.
858
859async function convertValueToCoords(state, options) {
860  const {
861    placement,
862    platform,
863    elements
864  } = state;
865  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
866  const side = getSide(placement);
867  const alignment = getAlignment(placement);
868  const isVertical = getSideAxis(placement) === 'y';
869  const mainAxisMulti = originSides.has(side) ? -1 : 1;
870  const crossAxisMulti = rtl && isVertical ? -1 : 1;
871  const rawValue = evaluate(options, state);
872
873  // eslint-disable-next-line prefer-const
874  let {
875    mainAxis,
876    crossAxis,
877    alignmentAxis
878  } = typeof rawValue === 'number' ? {
879    mainAxis: rawValue,
880    crossAxis: 0,
881    alignmentAxis: null
882  } : {
883    mainAxis: rawValue.mainAxis || 0,
884    crossAxis: rawValue.crossAxis || 0,
885    alignmentAxis: rawValue.alignmentAxis
886  };
887  if (alignment && typeof alignmentAxis === 'number') {
888    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;
889  }
890  return isVertical ? {
891    x: crossAxis * crossAxisMulti,
892    y: mainAxis * mainAxisMulti
893  } : {
894    x: mainAxis * mainAxisMulti,
895    y: crossAxis * crossAxisMulti
896  };
897}
898
899/**
900 * Modifies the placement by translating the floating element along the
901 * specified axes.
902 * A number (shorthand for `mainAxis` or distance), or an axes configuration
903 * object may be passed.
904 * @see https://floating-ui.com/docs/offset
905 */
906const offset$1 = function (options) {
907  if (options === void 0) {
908    options = 0;
909  }
910  return {
911    name: 'offset',
912    options,
913    async fn(state) {
914      var _middlewareData$offse, _middlewareData$arrow;
915      const {
916        x,
917        y,
918        placement,
919        middlewareData
920      } = state;
921      const diffCoords = await convertValueToCoords(state, options);
922
923      // If the placement is the same and the arrow caused an alignment offset
924      // then we don't need to change the positioning coordinates.
925      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
926        return {};
927      }
928      return {
929        x: x + diffCoords.x,
930        y: y + diffCoords.y,
931        data: {
932          ...diffCoords,
933          placement
934        }
935      };
936    }
937  };
938};
939
940/**
941 * Optimizes the visibility of the floating element by shifting it in order to
942 * keep it in view when it will overflow the clipping boundary.
943 * @see https://floating-ui.com/docs/shift
944 */
945const shift$1 = function (options) {
946  if (options === void 0) {
947    options = {};
948  }
949  return {
950    name: 'shift',
951    options,
952    async fn(state) {
953      const {
954        x,
955        y,
956        placement
957      } = state;
958      const {
959        mainAxis: checkMainAxis = true,
960        crossAxis: checkCrossAxis = false,
961        limiter = {
962          fn: _ref => {
963            let {
964              x,
965              y
966            } = _ref;
967            return {
968              x,
969              y
970            };
971          }
972        },
973        ...detectOverflowOptions
974      } = evaluate(options, state);
975      const coords = {
976        x,
977        y
978      };
979      const overflow = await detectOverflow(state, detectOverflowOptions);
980      const crossAxis = getSideAxis(getSide(placement));
981      const mainAxis = getOppositeAxis(crossAxis);
982      let mainAxisCoord = coords[mainAxis];
983      let crossAxisCoord = coords[crossAxis];
984      if (checkMainAxis) {
985        const minSide = mainAxis === 'y' ? 'top' : 'left';
986        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';
987        const min = mainAxisCoord + overflow[minSide];
988        const max = mainAxisCoord - overflow[maxSide];
989        mainAxisCoord = clamp(min, mainAxisCoord, max);
990      }
991      if (checkCrossAxis) {
992        const minSide = crossAxis === 'y' ? 'top' : 'left';
993        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';
994        const min = crossAxisCoord + overflow[minSide];
995        const max = crossAxisCoord - overflow[maxSide];
996        crossAxisCoord = clamp(min, crossAxisCoord, max);
997      }
998      const limitedCoords = limiter.fn({
999        ...state,
1000        [mainAxis]: mainAxisCoord,
1001        [crossAxis]: crossAxisCoord
1002      });
1003      return {
1004        ...limitedCoords,
1005        data: {
1006          x: limitedCoords.x - x,
1007          y: limitedCoords.y - y,
1008          enabled: {
1009            [mainAxis]: checkMainAxis,
1010            [crossAxis]: checkCrossAxis
1011          }
1012        }
1013      };
1014    }
1015  };
1016};
1017
1018function hasWindow() {
1019  return typeof window !== 'undefined';
1020}
1021function getNodeName(node) {
1022  if (isNode(node)) {
1023    return (node.nodeName || '').toLowerCase();
1024  }
1025  // Mocked nodes in testing environments may not be instances of Node. By
1026  // returning `#document` an infinite loop won't occur.
1027  // https://github.com/floating-ui/floating-ui/issues/2317
1028  return '#document';
1029}
1030function getWindow(node) {
1031  var _node$ownerDocument;
1032  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
1033}
1034function getDocumentElement(node) {
1035  var _ref;
1036  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
1037}
1038function isNode(value) {
1039  if (!hasWindow()) {
1040    return false;
1041  }
1042  return value instanceof Node || value instanceof getWindow(value).Node;
1043}
1044function isElement(value) {
1045  if (!hasWindow()) {
1046    return false;
1047  }
1048  return value instanceof Element || value instanceof getWindow(value).Element;
1049}
1050function isHTMLElement(value) {
1051  if (!hasWindow()) {
1052    return false;
1053  }
1054  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
1055}
1056function isShadowRoot(value) {
1057  if (!hasWindow() || typeof ShadowRoot === 'undefined') {
1058    return false;
1059  }
1060  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
1061}
1062const invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);
1063function isOverflowElement(element) {
1064  const {
1065    overflow,
1066    overflowX,
1067    overflowY,
1068    display
1069  } = getComputedStyle$1(element);
1070  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);
1071}
1072const tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);
1073function isTableElement(element) {
1074  return tableElements.has(getNodeName(element));
1075}
1076const topLayerSelectors = [':popover-open', ':modal'];
1077function isTopLayer(element) {
1078  return topLayerSelectors.some(selector => {
1079    try {
1080      return element.matches(selector);
1081    } catch (_e) {
1082      return false;
1083    }
1084  });
1085}
1086const transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];
1087const willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];
1088const containValues = ['paint', 'layout', 'strict', 'content'];
1089function isContainingBlock(elementOrCss) {
1090  const webkit = isWebKit();
1091  const css = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;
1092
1093  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
1094  // https://drafts.csswg.org/css-transforms-2/#individual-transforms
1095  return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));
1096}
1097function getContainingBlock(element) {
1098  let currentNode = getParentNode(element);
1099  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
1100    if (isContainingBlock(currentNode)) {
1101      return currentNode;
1102    } else if (isTopLayer(currentNode)) {
1103      return null;
1104    }
1105    currentNode = getParentNode(currentNode);
1106  }
1107  return null;
1108}
1109function isWebKit() {
1110  if (typeof CSS === 'undefined' || !CSS.supports) return false;
1111  return CSS.supports('-webkit-backdrop-filter', 'none');
1112}
1113const lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);
1114function isLastTraversableNode(node) {
1115  return lastTraversableNodeNames.has(getNodeName(node));
1116}
1117function getComputedStyle$1(element) {
1118  return getWindow(element).getComputedStyle(element);
1119}
1120function getNodeScroll(element) {
1121  if (isElement(element)) {
1122    return {
1123      scrollLeft: element.scrollLeft,
1124      scrollTop: element.scrollTop
1125    };
1126  }
1127  return {
1128    scrollLeft: element.scrollX,
1129    scrollTop: element.scrollY
1130  };
1131}
1132function getParentNode(node) {
1133  if (getNodeName(node) === 'html') {
1134    return node;
1135  }
1136  const result =
1137  // Step into the shadow DOM of the parent of a slotted node.
1138  node.assignedSlot ||
1139  // DOM Element detected.
1140  node.parentNode ||
1141  // ShadowRoot detected.
1142  isShadowRoot(node) && node.host ||
1143  // Fallback.
1144  getDocumentElement(node);
1145  return isShadowRoot(result) ? result.host : result;
1146}
1147function getNearestOverflowAncestor(node) {
1148  const parentNode = getParentNode(node);
1149  if (isLastTraversableNode(parentNode)) {
1150    return node.ownerDocument ? node.ownerDocument.body : node.body;
1151  }
1152  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
1153    return parentNode;
1154  }
1155  return getNearestOverflowAncestor(parentNode);
1156}
1157function getOverflowAncestors(node, list, traverseIframes) {
1158  var _node$ownerDocument2;
1159  if (list === void 0) {
1160    list = [];
1161  }
1162  if (traverseIframes === void 0) {
1163    traverseIframes = true;
1164  }
1165  const scrollableAncestor = getNearestOverflowAncestor(node);
1166  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
1167  const win = getWindow(scrollableAncestor);
1168  if (isBody) {
1169    const frameElement = getFrameElement(win);
1170    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);
1171  }
1172  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
1173}
1174function getFrameElement(win) {
1175  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
1176}
1177
1178function getCssDimensions(element) {
1179  const css = getComputedStyle$1(element);
1180  // In testing environments, the `width` and `height` properties are empty
1181  // strings for SVG elements, returning NaN. Fallback to `0` in this case.
1182  let width = parseFloat(css.width) || 0;
1183  let height = parseFloat(css.height) || 0;
1184  const hasOffset = isHTMLElement(element);
1185  const offsetWidth = hasOffset ? element.offsetWidth : width;
1186  const offsetHeight = hasOffset ? element.offsetHeight : height;
1187  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
1188  if (shouldFallback) {
1189    width = offsetWidth;
1190    height = offsetHeight;
1191  }
1192  return {
1193    width,
1194    height,
1195    $: shouldFallback
1196  };
1197}
1198
1199function unwrapElement
vendor: 1,504 bytes, lines 1199-1260
1199$1(element) {
1200  return !isElement(element) ? element.contextElement : element;
1201}
1202
1203function getScale(element) {
1204  const domElement = unwrapElement$1(element);
1205  if (!isHTMLElement(domElement)) {
1206    return createCoords(1);
1207  }
1208  const rect = domElement.getBoundingClientRect();
1209  const {
1210    width,
1211    height,
1212    $
1213  } = getCssDimensions(domElement);
1214  let x = ($ ? round(rect.width) : rect.width) / width;
1215  let y = ($ ? round(rect.height) : rect.height) / height;
1216
1217  // 0, NaN, or Infinity should always fallback to 1.
1218
1219  if (!x || !Number.isFinite(x)) {
1220    x = 1;
1221  }
1222  if (!y || !Number.isFinite(y)) {
1223    y = 1;
1224  }
1225  return {
1226    x,
1227    y
1228  };
1229}
1230
1231const noOffsets = /*#__PURE__*/createCoords(0);
1232function getVisualOffsets(element) {
1233  const win = getWindow(element);
1234  if (!isWebKit() || !win.visualViewport) {
1235    return noOffsets;
1236  }
1237  return {
1238    x: win.visualViewport.offsetLeft,
1239    y: win.visualViewport.offsetTop
1240  };
1241}
1242function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
1243  if (isFixed === void 0) {
1244    isFixed = false;
1245  }
1246  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {
1247    return false;
1248  }
1249  return isFixed;
1250}
1251
1252function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
1253  if (includeScale === void 0) {
1254    includeScale = false;
1255  }
1256  if (isFixedStrategy === void 0) {
1257    isFixedStrategy = false;
1258  }
1259  const clientRect = element.getBoundingClientRect();
1260  const domElement = unwrapElement$1
vendor: 18,971 bytes, lines 1260-1790
1260(element);
1261  let scale = createCoords(1);
1262  if (includeScale) {
1263    if (offsetParent) {
1264      if (isElement(offsetParent)) {
1265        scale = getScale(offsetParent);
1266      }
1267    } else {
1268      scale = getScale(element);
1269    }
1270  }
1271  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);
1272  let x = (clientRect.left + visualOffsets.x) / scale.x;
1273  let y = (clientRect.top + visualOffsets.y) / scale.y;
1274  let width = clientRect.width / scale.x;
1275  let height = clientRect.height / scale.y;
1276  if (domElement) {
1277    const win = getWindow(domElement);
1278    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
1279    let currentWin = win;
1280    let currentIFrame = getFrameElement(currentWin);
1281    while (currentIFrame && offsetParent && offsetWin !== currentWin) {
1282      const iframeScale = getScale(currentIFrame);
1283      const iframeRect = currentIFrame.getBoundingClientRect();
1284      const css = getComputedStyle$1(currentIFrame);
1285      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
1286      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
1287      x *= iframeScale.x;
1288      y *= iframeScale.y;
1289      width *= iframeScale.x;
1290      height *= iframeScale.y;
1291      x += left;
1292      y += top;
1293      currentWin = getWindow(currentIFrame);
1294      currentIFrame = getFrameElement(currentWin);
1295    }
1296  }
1297  return rectToClientRect({
1298    width,
1299    height,
1300    x,
1301    y
1302  });
1303}
1304
1305// If <html> has a CSS width greater than the viewport, then this will be
1306// incorrect for RTL.
1307function getWindowScrollBarX(element, rect) {
1308  const leftScroll = getNodeScroll(element).scrollLeft;
1309  if (!rect) {
1310    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;
1311  }
1312  return rect.left + leftScroll;
1313}
1314
1315function getHTMLOffset(documentElement, scroll) {
1316  const htmlRect = documentElement.getBoundingClientRect();
1317  const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);
1318  const y = htmlRect.top + scroll.scrollTop;
1319  return {
1320    x,
1321    y
1322  };
1323}
1324
1325function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
1326  let {
1327    elements,
1328    rect,
1329    offsetParent,
1330    strategy
1331  } = _ref;
1332  const isFixed = strategy === 'fixed';
1333  const documentElement = getDocumentElement(offsetParent);
1334  const topLayer = elements ? isTopLayer(elements.floating) : false;
1335  if (offsetParent === documentElement || topLayer && isFixed) {
1336    return rect;
1337  }
1338  let scroll = {
1339    scrollLeft: 0,
1340    scrollTop: 0
1341  };
1342  let scale = createCoords(1);
1343  const offsets = createCoords(0);
1344  const isOffsetParentAnElement = isHTMLElement(offsetParent);
1345  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
1346    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
1347      scroll = getNodeScroll(offsetParent);
1348    }
1349    if (isHTMLElement(offsetParent)) {
1350      const offsetRect = getBoundingClientRect(offsetParent);
1351      scale = getScale(offsetParent);
1352      offsets.x = offsetRect.x + offsetParent.clientLeft;
1353      offsets.y = offsetRect.y + offsetParent.clientTop;
1354    }
1355  }
1356  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
1357  return {
1358    width: rect.width * scale.x,
1359    height: rect.height * scale.y,
1360    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,
1361    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y
1362  };
1363}
1364
1365function getClientRects(element) {
1366  return Array.from(element.getClientRects());
1367}
1368
1369// Gets the entire size of the scrollable document area, even extending outside
1370// of the `<html>` and `<body>` rect bounds if horizontally scrollable.
1371function getDocumentRect(element) {
1372  const html = getDocumentElement(element);
1373  const scroll = getNodeScroll(element);
1374  const body = element.ownerDocument.body;
1375  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
1376  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
1377  let x = -scroll.scrollLeft + getWindowScrollBarX(element);
1378  const y = -scroll.scrollTop;
1379  if (getComputedStyle$1(body).direction === 'rtl') {
1380    x += max(html.clientWidth, body.clientWidth) - width;
1381  }
1382  return {
1383    width,
1384    height,
1385    x,
1386    y
1387  };
1388}
1389
1390// Safety check: ensure the scrollbar space is reasonable in case this
1391// calculation is affected by unusual styles.
1392// Most scrollbars leave 15-18px of space.
1393const SCROLLBAR_MAX = 25;
1394function getViewportRect(element, strategy) {
1395  const win = getWindow(element);
1396  const html = getDocumentElement(element);
1397  const visualViewport = win.visualViewport;
1398  let width = html.clientWidth;
1399  let height = html.clientHeight;
1400  let x = 0;
1401  let y = 0;
1402  if (visualViewport) {
1403    width = visualViewport.width;
1404    height = visualViewport.height;
1405    const visualViewportBased = isWebKit();
1406    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {
1407      x = visualViewport.offsetLeft;
1408      y = visualViewport.offsetTop;
1409    }
1410  }
1411  const windowScrollbarX = getWindowScrollBarX(html);
1412  // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the
1413  // visual width of the <html> but this is not considered in the size
1414  // of `html.clientWidth`.
1415  if (windowScrollbarX <= 0) {
1416    const doc = html.ownerDocument;
1417    const body = doc.body;
1418    const bodyStyles = getComputedStyle(body);
1419    const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
1420    const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
1421    if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {
1422      width -= clippingStableScrollbarWidth;
1423    }
1424  } else if (windowScrollbarX <= SCROLLBAR_MAX) {
1425    // If the <body> scrollbar is on the left, the width needs to be extended
1426    // by the scrollbar amount so there isn't extra space on the right.
1427    width += windowScrollbarX;
1428  }
1429  return {
1430    width,
1431    height,
1432    x,
1433    y
1434  };
1435}
1436
1437const absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);
1438// Returns the inner client rect, subtracting scrollbars if present.
1439function getInnerBoundingClientRect(element, strategy) {
1440  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');
1441  const top = clientRect.top + element.clientTop;
1442  const left = clientRect.left + element.clientLeft;
1443  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);
1444  const width = element.clientWidth * scale.x;
1445  const height = element.clientHeight * scale.y;
1446  const x = left * scale.x;
1447  const y = top * scale.y;
1448  return {
1449    width,
1450    height,
1451    x,
1452    y
1453  };
1454}
1455function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
1456  let rect;
1457  if (clippingAncestor === 'viewport') {
1458    rect = getViewportRect(element, strategy);
1459  } else if (clippingAncestor === 'document') {
1460    rect = getDocumentRect(getDocumentElement(element));
1461  } else if (isElement(clippingAncestor)) {
1462    rect = getInnerBoundingClientRect(clippingAncestor, strategy);
1463  } else {
1464    const visualOffsets = getVisualOffsets(element);
1465    rect = {
1466      x: clippingAncestor.x - visualOffsets.x,
1467      y: clippingAncestor.y - visualOffsets.y,
1468      width: clippingAncestor.width,
1469      height: clippingAncestor.height
1470    };
1471  }
1472  return rectToClientRect(rect);
1473}
1474function hasFixedPositionAncestor(element, stopNode) {
1475  const parentNode = getParentNode(element);
1476  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {
1477    return false;
1478  }
1479  return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);
1480}
1481
1482// A "clipping ancestor" is an `overflow` element with the characteristic of
1483// clipping (or hiding) child elements. This returns all clipping ancestors
1484// of the given element up the tree.
1485function getClippingElementAncestors(element, cache) {
1486  const cachedResult = cache.get(element);
1487  if (cachedResult) {
1488    return cachedResult;
1489  }
1490  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');
1491  let currentContainingBlockComputedStyle = null;
1492  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';
1493  let currentNode = elementIsFixed ? getParentNode(element) : element;
1494
1495  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
1496  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
1497    const computedStyle = getComputedStyle$1(currentNode);
1498    const currentNodeIsContaining = isContainingBlock(currentNode);
1499    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {
1500      currentContainingBlockComputedStyle = null;
1501    }
1502    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
1503    if (shouldDropCurrentNode) {
1504      // Drop non-containing blocks.
1505      result = result.filter(ancestor => ancestor !== currentNode);
1506    } else {
1507      // Record last containing block for next iteration.
1508      currentContainingBlockComputedStyle = computedStyle;
1509    }
1510    currentNode = getParentNode(currentNode);
1511  }
1512  cache.set(element, result);
1513  return result;
1514}
1515
1516// Gets the maximum area that the element is visible in due to any number of
1517// clipping ancestors.
1518function getClippingRect(_ref) {
1519  let {
1520    element,
1521    boundary,
1522    rootBoundary,
1523    strategy
1524  } = _ref;
1525  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);
1526  const clippingAncestors = [...elementClippingAncestors, rootBoundary];
1527  const firstClippingAncestor = clippingAncestors[0];
1528  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {
1529    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);
1530    accRect.top = max(rect.top, accRect.top);
1531    accRect.right = min(rect.right, accRect.right);
1532    accRect.bottom = min(rect.bottom, accRect.bottom);
1533    accRect.left = max(rect.left, accRect.left);
1534    return accRect;
1535  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));
1536  return {
1537    width: clippingRect.right - clippingRect.left,
1538    height: clippingRect.bottom - clippingRect.top,
1539    x: clippingRect.left,
1540    y: clippingRect.top
1541  };
1542}
1543
1544function getDimensions(element) {
1545  const {
1546    width,
1547    height
1548  } = getCssDimensions(element);
1549  return {
1550    width,
1551    height
1552  };
1553}
1554
1555function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
1556  const isOffsetParentAnElement = isHTMLElement(offsetParent);
1557  const documentElement = getDocumentElement(offsetParent);
1558  const isFixed = strategy === 'fixed';
1559  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
1560  let scroll = {
1561    scrollLeft: 0,
1562    scrollTop: 0
1563  };
1564  const offsets = createCoords(0);
1565
1566  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use
1567  // Firefox with layout.scrollbar.side = 3 in about:config to test this.
1568  function setLeftRTLScrollbarOffset() {
1569    offsets.x = getWindowScrollBarX(documentElement);
1570  }
1571  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
1572    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
1573      scroll = getNodeScroll(offsetParent);
1574    }
1575    if (isOffsetParentAnElement) {
1576      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
1577      offsets.x = offsetRect.x + offsetParent.clientLeft;
1578      offsets.y = offsetRect.y + offsetParent.clientTop;
1579    } else if (documentElement) {
1580      setLeftRTLScrollbarOffset();
1581    }
1582  }
1583  if (isFixed && !isOffsetParentAnElement && documentElement) {
1584    setLeftRTLScrollbarOffset();
1585  }
1586  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
1587  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
1588  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;
1589  return {
1590    x,
1591    y,
1592    width: rect.width,
1593    height: rect.height
1594  };
1595}
1596
1597function isStaticPositioned(element) {
1598  return getComputedStyle$1(element).position === 'static';
1599}
1600
1601function getTrueOffsetParent(element, polyfill) {
1602  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {
1603    return null;
1604  }
1605  if (polyfill) {
1606    return polyfill(element);
1607  }
1608  let rawOffsetParent = element.offsetParent;
1609
1610  // Firefox returns the <html> element as the offsetParent if it's non-static,
1611  // while Chrome and Safari return the <body> element. The <body> element must
1612  // be used to perform the correct calculations even if the <html> element is
1613  // non-static.
1614  if (getDocumentElement(element) === rawOffsetParent) {
1615    rawOffsetParent = rawOffsetParent.ownerDocument.body;
1616  }
1617  return rawOffsetParent;
1618}
1619
1620// Gets the closest ancestor positioned element. Handles some edge cases,
1621// such as table ancestors and cross browser bugs.
1622function getOffsetParent(element, polyfill) {
1623  const win = getWindow(element);
1624  if (isTopLayer(element)) {
1625    return win;
1626  }
1627  if (!isHTMLElement(element)) {
1628    let svgOffsetParent = getParentNode(element);
1629    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {
1630      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {
1631        return svgOffsetParent;
1632      }
1633      svgOffsetParent = getParentNode(svgOffsetParent);
1634    }
1635    return win;
1636  }
1637  let offsetParent = getTrueOffsetParent(element, polyfill);
1638  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {
1639    offsetParent = getTrueOffsetParent(offsetParent, polyfill);
1640  }
1641  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {
1642    return win;
1643  }
1644  return offsetParent || getContainingBlock(element) || win;
1645}
1646
1647const getElementRects = async function (data) {
1648  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
1649  const getDimensionsFn = this.getDimensions;
1650  const floatingDimensions = await getDimensionsFn(data.floating);
1651  return {
1652    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
1653    floating: {
1654      x: 0,
1655      y: 0,
1656      width: floatingDimensions.width,
1657      height: floatingDimensions.height
1658    }
1659  };
1660};
1661
1662function isRTL(element) {
1663  return getComputedStyle$1(element).direction === 'rtl';
1664}
1665
1666const platform = {
1667  convertOffsetParentRelativeRectToViewportRelativeRect,
1668  getDocumentElement,
1669  getClippingRect,
1670  getOffsetParent,
1671  getElementRects,
1672  getClientRects,
1673  getDimensions,
1674  getScale,
1675  isElement,
1676  isRTL
1677};
1678
1679function rectsAreEqual(a, b) {
1680  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
1681}
1682
1683// https://samthor.au/2021/observing-dom/
1684function observeMove(element, onMove) {
1685  let io = null;
1686  let timeoutId;
1687  const root = getDocumentElement(element);
1688  function cleanup() {
1689    var _io;
1690    clearTimeout(timeoutId);
1691    (_io = io) == null || _io.disconnect();
1692    io = null;
1693  }
1694  function refresh(skip, threshold) {
1695    if (skip === void 0) {
1696      skip = false;
1697    }
1698    if (threshold === void 0) {
1699      threshold = 1;
1700    }
1701    cleanup();
1702    const elementRectForRootMargin = element.getBoundingClientRect();
1703    const {
1704      left,
1705      top,
1706      width,
1707      height
1708    } = elementRectForRootMargin;
1709    if (!skip) {
1710      onMove();
1711    }
1712    if (!width || !height) {
1713      return;
1714    }
1715    const insetTop = floor(top);
1716    const insetRight = floor(root.clientWidth - (left + width));
1717    const insetBottom = floor(root.clientHeight - (top + height));
1718    const insetLeft = floor(left);
1719    const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px";
1720    const options = {
1721      rootMargin,
1722      threshold: max(0, min(1, threshold)) || 1
1723    };
1724    let isFirstUpdate = true;
1725    function handleObserve(entries) {
1726      const ratio = entries[0].intersectionRatio;
1727      if (ratio !== threshold) {
1728        if (!isFirstUpdate) {
1729          return refresh();
1730        }
1731        if (!ratio) {
1732          // If the reference is clipped, the ratio is 0. Throttle the refresh
1733          // to prevent an infinite loop of updates.
1734          timeoutId = setTimeout(() => {
1735            refresh(false, 1e-7);
1736          }, 1000);
1737        } else {
1738          refresh(false, ratio);
1739        }
1740      }
1741      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {
1742        // It's possible that even though the ratio is reported as 1, the
1743        // element is not actually fully within the IntersectionObserver's root
1744        // area anymore. This can happen under performance constraints. This may
1745        // be a bug in the browser's IntersectionObserver implementation. To
1746        // work around this, we compare the element's bounding rect now with
1747        // what it was at the time we created the IntersectionObserver. If they
1748        // are not equal then the element moved, so we refresh.
1749        refresh();
1750      }
1751      isFirstUpdate = false;
1752    }
1753
1754    // Older browsers don't support a `document` as the root and will throw an
1755    // error.
1756    try {
1757      io = new IntersectionObserver(handleObserve, {
1758        ...options,
1759        // Handle <iframe>s
1760        root: root.ownerDocument
1761      });
1762    } catch (_e) {
1763      io = new IntersectionObserver(handleObserve, options);
1764    }
1765    io.observe(element);
1766  }
1767  refresh(true);
1768  return cleanup;
1769}
1770
1771/**
1772 * Automatically updates the position of the floating element when necessary.
1773 * Should only be called when the floating element is mounted on the DOM or
1774 * visible on the screen.
1775 * @returns cleanup function that should be invoked when the floating element is
1776 * removed from the DOM or hidden from the screen.
1777 * @see https://floating-ui.com/docs/autoUpdate
1778 */
1779function autoUpdate(reference, floating, update, options) {
1780  if (options === void 0) {
1781    options = {};
1782  }
1783  const {
1784    ancestorScroll = true,
1785    ancestorResize = true,
1786    elementResize = typeof ResizeObserver === 'function',
1787    layoutShift = typeof IntersectionObserver === 'function',
1788    animationFrame = false
1789  } = options;
1790  const referenceEl = unwrapElement
vendor: 1,727 bytes, lines 1790-1836
1790$1(reference);
1791  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];
1792  ancestors.forEach(ancestor => {
1793    ancestorScroll && ancestor.addEventListener('scroll', update, {
1794      passive: true
1795    });
1796    ancestorResize && ancestor.addEventListener('resize', update);
1797  });
1798  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;
1799  let reobserveFrame = -1;
1800  let resizeObserver = null;
1801  if (elementResize) {
1802    resizeObserver = new ResizeObserver(_ref => {
1803      let [firstEntry] = _ref;
1804      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {
1805        // Prevent update loops when using the `size` middleware.
1806        // https://github.com/floating-ui/floating-ui/issues/1740
1807        resizeObserver.unobserve(floating);
1808        cancelAnimationFrame(reobserveFrame);
1809        reobserveFrame = requestAnimationFrame(() => {
1810          var _resizeObserver;
1811          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);
1812        });
1813      }
1814      update();
1815    });
1816    if (referenceEl && !animationFrame) {
1817      resizeObserver.observe(referenceEl);
1818    }
1819    resizeObserver.observe(floating);
1820  }
1821  let frameId;
1822  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;
1823  if (animationFrame) {
1824    frameLoop();
1825  }
1826  function frameLoop() {
1827    const nextRefRect = getBoundingClientRect(reference);
1828    if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {
1829      update();
1830    }
1831    prevRefRect = nextRefRect;
1832    frameId = requestAnimationFrame(frameLoop);
1833  }
1834  update();
1835  return () => {
1836    var _resizeObserver2;
1837    ancestors.forEach(ancestor => {
1838      ancestorScroll && ancestor.removeEventListener('scroll', update);
1839      ancestorResize && ancestor.removeEventListener('resize', update);
1840    });
1841    cleanupIo == null || cleanupIo();
1842    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();
1843    resizeObserver = null;
1844    if (animationFrame) {
1845      cancelAnimationFrame(frameId);
1846    }
1847  };
1848}
1849
1850/**
1851 * Modifies the placement by translating the floating element along the
1852 * specified axes.
1853 * A number (shorthand for `mainAxis` or distance), or an axes configuration
1854 * object may be passed.
1855 * @see https://floating-ui.com/docs/offset
1856 */
1857const offset = offset$1;
1858
1859/**
1860 * Optimizes the visibility of the floating element by shifting it in order to
1861 * keep it in view when it will overflow the clipping boundary.
1862 * @see https://floating-ui.com/docs/shift
1863 */
1864const shift = shift$1;
1865
1866/**
1867 * Optimizes the visibility of the floating element by flipping the `placement`
1868 * in order to keep it in view when the preferred placement(s) will overflow the
1869 * clipping boundary. Alternative to `autoPlacement`.
1870 * @see https://floating-ui.com/docs/flip
1871 */
1872const flip = flip$1;
1873
1874/**
1875 * Provides data to position an inner element of the floating element so that it
1876 * appears centered to the reference element.
1877 * @see https://floating-ui.com/docs/arrow
1878 */
1879const arrow$1 = arrow$2;
1880
1881/**
1882 * Computes the `x` and `y` coordinates that will place the floating element
1883 * next to a given reference element.
1884 */
1885const computePosition = (reference, floating, options) => {
1886  // This caches the expensive `getClippingElementAncestors` function so that
1887  // multiple lifecycle resets re-use the same result. It only lives for a
1888  // single call. If other functions become expensive, we can add them as well.
1889  const cache = new Map();
1890  const mergedOptions = {
1891    platform,
1892    ...options
1893  };
1894  const platformWithCache = {
1895    ...mergedOptions.platform,
1896    _c: cache
1897  };
1898  return computePosition$1(reference, floating, {
1899    ...mergedOptions,
1900    platform: platformWithCache
1901  });
1902};
1903
1904function isComponentPublicInstance(target) {
1905  return target != null && typeof target === 'object' && '$el' in target;
1906}
1907function unwrapElement(target) {
1908  if (isComponentPublicInstance(target)) {
1909    const element = target.$el;
1910    return isNode(element) && getNodeName(element) === '#comment' ? null : element;
1911  }
1912  return target;
1913}
1914
1915function toValue(source) {
1916  return typeof source === 'function' ? source() : edr_remote_vue_components__loadShare__vue__loadShare__.unref(source);
1917}
1918
1919/**
1920 * Positions an inner element of the floating element such that it is centered to the reference element.
1921 * @param options The arrow options.
1922 * @see https://floating-ui.com/docs/arrow
1923 */
1924function arrow(options) {
1925  return {
1926    name: 'arrow',
1927    options,
1928    fn(args) {
1929      const element = unwrapElement(toValue(options.element));
1930      if (element == null) {
1931        return {};
1932      }
1933      return arrow$1({
1934        element,
1935        padding: options.padding
1936      }).fn(args);
1937    }
1938  };
1939}
1940
1941function getDPR(element) {
1942  if (typeof window === 'undefined') {
1943    return 1;
1944  }
1945  const win = element.ownerDocument.defaultView || window;
1946  return win.devicePixelRatio || 1;
1947}
1948
1949function roundByDPR(element, value) {
1950  const dpr = getDPR(element);
1951  return Math.round(value * dpr) / dpr;
1952}
1953
1954/**
1955 * Computes the `x` and `y` coordinates that will place the floating element next to a reference element when it is given a certain CSS positioning strategy.
1956 * @param reference The reference template ref.
1957 * @param floating The floating template ref.
1958 * @param options The floating options.
1959 * @see https://floating-ui.com/docs/vue
1960 */
1961function useFloating(reference, floating, options) {
1962  if (options === void 0) {
1963    options = {};
1964  }
1965  const whileElementsMountedOption = options.whileElementsMounted;
1966  const openOption = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => {
1967    var _toValue;
1968    return (_toValue = toValue(options.open)) != null ? _toValue : true;
1969  });
1970  const middlewareOption = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => toValue(options.middleware));
1971  const placementOption = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => {
1972    var _toValue2;
1973    return (_toValue2 = toValue(options.placement)) != null ? _toValue2 : 'bottom';
1974  });
1975  const strategyOption = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => {
1976    var _toValue3;
1977    return (_toValue3 = toValue(options.strategy)) != null ? _toValue3 : 'absolute';
1978  });
1979  const transformOption = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => {
1980    var _toValue4;
1981    return (_toValue4 = toValue(options.transform)) != null ? _toValue4 : true;
1982  });
1983  const referenceElement = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => unwrapElement(reference.value));
1984  const floatingElement = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => unwrapElement(floating.value));
1985  const x = edr_remote_vue_components__loadShare__vue__loadShare__.ref(0);
1986  const y = edr_remote_vue_components__loadShare__vue__loadShare__.ref(0);
1987  const strategy = edr_remote_vue_components__loadShare__vue__loadShare__.ref(strategyOption.value);
1988  const placement = edr_remote_vue_components__loadShare__vue__loadShare__.ref(placementOption.value);
1989  const middlewareData = edr_remote_vue_components__loadShare__vue__loadShare__.shallowRef({});
1990  const isPositioned = edr_remote_vue_components__loadShare__vue__loadShare__.ref(false);
1991  const floatingStyles = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => {
1992    const initialStyles = {
1993      position: strategy.value,
1994      left: '0',
1995      top: '0'
1996    };
1997    if (!floatingElement.value) {
1998      return initialStyles;
1999    }
2000    const xVal = roundByDPR(floatingElement.value, x.value);
2001    const yVal = roundByDPR(floatingElement.value, y.value);
2002    if (transformOption.value) {
2003      return {
2004        ...initialStyles,
2005        transform: "translate(" + xVal + "px, " + yVal + "px)",
2006        ...(getDPR(floatingElement.value) >= 1.5 && {
2007          willChange: 'transform'
2008        })
2009      };
2010    }
2011    return {
2012      position: strategy.value,
2013      left: xVal + "px",
2014      top: yVal + "px"
2015    };
2016  });
2017  let whileElementsMountedCleanup;
2018  function update() {
2019    if (referenceElement.value == null || floatingElement.value == null) {
2020      return;
2021    }
2022    const open = openOption.value;
2023    computePosition(referenceElement.value, floatingElement.value, {
2024      middleware: middlewareOption.value,
2025      placement: placementOption.value,
2026      strategy: strategyOption.value
2027    }).then(position => {
2028      x.value = position.x;
2029      y.value = position.y;
2030      strategy.value = position.strategy;
2031      placement.value = position.placement;
2032      middlewareData.value = position.middlewareData;
2033      /**
2034       * The floating element's position may be recomputed while it's closed
2035       * but still mounted (such as when transitioning out). To ensure
2036       * `isPositioned` will be `false` initially on the next open, avoid
2037       * setting it to `true` when `open === false` (must be specified).
2038       */
2039      isPositioned.value = open !== false;
2040    });
2041  }
2042  function cleanup() {
2043    if (typeof whileElementsMountedCleanup === 'function') {
2044      whileElementsMountedCleanup();
2045      whileElementsMountedCleanup = undefined;
2046    }
2047  }
2048  function attach() {
2049    cleanup();
2050    if (whileElementsMountedOption === undefined) {
2051      update();
2052      return;
2053    }
2054    if (referenceElement.value != null && floatingElement.value != null) {
2055      whileElementsMountedCleanup = whileElementsMountedOption(referenceElement.value, floatingElement.value, update);
2056      return;
2057    }
2058  }
2059  function reset() {
2060    if (!openOption.value) {
2061      isPositioned.value = false;
2062    }
2063  }
2064  edr_remote_vue_components__loadShare__vue__loadShare__.watch([middlewareOption, placementOption, strategyOption, openOption], update, {
2065    flush: 'sync'
2066  });
2067  edr_remote_vue_components__loadShare__vue__loadShare__.watch([referenceElement, floatingElement], attach, {
2068    flush: 'sync'
2069  });
2070  edr_remote_vue_components__loadShare__vue__loadShare__.watch(openOption, reset, {
2071    flush: 'sync'
2072  });
2073  if (edr_remote_vue_components__loadShare__vue__loadShare__.getCurrentScope()) {
2074    edr_remote_vue_components__loadShare__vue__loadShare__.onScopeDispose(cleanup);
2075  }
2076  return {
2077    x: edr_remote_vue_components__loadShare__vue__loadShare__.shallowReadonly(x),
2078    y: edr_remote_vue_components__loadShare__vue__loadShare__.shallowReadonly(y),
2079    strategy: edr_remote_vue_components__loadShare__vue__loadShare__.shallowReadonly(strategy),
2080    placement: edr_remote_vue_components__loadShare__vue__loadShare__.shallowReadonly(placement),
2081    middlewareData: edr_remote_vue_components__loadShare__vue__loadShare__.shallowReadonly(middlewareData),
2082    isPositioned: edr_remote_vue_components__loadShare__vue__loadShare__.shallowReadonly(isPositioned),
2083    floatingStyles,
2084    update
2085  };
2086}
2087
2088const _sfc_main$5 = /* @__PURE__ */ edr_remote_vue_components__loadShare__vue__loadShare__.defineComponent({
2089  ...{
2090    inheritAttrs: false
2091  },
2092  __name: "Tooltip",
2093  props: {
2094    triggerOn: { default: "hover" },
2095    hoverDelay: { default: 200 },
2096    offset: { default: 10 },
2097    teleportTo: {}
2098  },
2099  setup(__props) {
2100    const props = __props;
2101    const isOpen = edr_remote_vue_components__loadShare__vue__loadShare__.ref(false);
2102    let hoverTimer = null;
2103    const triggerRef = edr_remote_vue_components__loadShare__vue__loadShare__.ref(null);
2104    const contentRef = edr_remote_vue_components__loadShare__vue__loadShare__.ref(null);
2105    const arrowRef = edr_remote_vue_components__loadShare__vue__loadShare__.ref(null);
2106    const teleportTarget = edr_remote_vue_components__loadShare__vue__loadShare__.ref(props.teleportTo || "body");
2107    edr_remote_vue_components__loadShare__vue__loadShare__.watch(() => props.teleportTo, (newTarget) => {
2108      if (newTarget) {
2109        teleportTarget.value = newTarget;
2110      }
2111    });
2112    const { floatingStyles, middlewareData, placement } = useFloating(
2113      triggerRef,
2114      contentRef,
2115      {
2116        whileElementsMounted: autoUpdate,
2117        placement: "top",
2118        middleware: [
2119          offset(props.offset),
2120          flip(),
2121          shift({ padding: 5 }),
2122          arrow({ element: arrowRef })
2123        ]
2124      }
2125    );
2126    const arrowStyles = edr_remote_vue_components__loadShare__vue__loadShare__.ref({});
2127    edr_remote_vue_components__loadShare__vue__loadShare__.watch([middlewareData, placement], () => {
2128      const { x, y } = middlewareData.value.arrow || {};
2129      const currentPlacement = placement.value.split("-")[0];
2130      const staticSide = {
2131        top: "bottom",
2132        right: "left",
2133        bottom: "top",
2134        left: "right"
2135      }[currentPlacement || "top"];
2136      arrowStyles.value = {
2137        left: x != null ? `${x}px` : "",
2138        top: y != null ? `${y}px` : "",
2139        [staticSide]: "-4px"
2140      };
2141    }, { immediate: true });
2142    function onMouseEnter() {
2143      if (props.triggerOn !== "hover") return;
2144      if (hoverTimer) clearTimeout(hoverTimer);
2145      hoverTimer = window.setTimeout(() => {
2146        isOpen.value = true;
2147      }, props.hoverDelay);
2148    }
2149    function onMouseLeave() {
2150      if (props.triggerOn !== "hover") return;
2151      if (hoverTimer) clearTimeout(hoverTimer);
2152      hoverTimer = window.setTimeout(() => {
2153        isOpen.value = false;
2154      }, props.hoverDelay);
2155    }
2156    function onToggleClick() {
2157      if (props.triggerOn !== "click") return;
2158      isOpen.value = !isOpen.value;
2159    }
2160    function onClickOutside(event) {
2161      if (props.triggerOn !== "click" || !isOpen.value) return;
2162      const trigger = triggerRef.value;
2163      const content = contentRef.value;
2164      const path = event.composedPath();
2165      const isClickInside = path.includes(trigger) || content && path.includes(content);
2166      if (isClickInside) return;
2167      isOpen.value = false;
2168    }
2169    edr_remote_vue_components__loadShare__vue__loadShare__.onMounted(() => {
2170      if (props.teleportTo) {
2171        teleportTarget.value = props.teleportTo;
2172      } else {
2173        const el = triggerRef.value;
2174        if (el) {
2175          const root = el.getRootNode();
2176          if (root instanceof ShadowRoot) {
2177            const containerId = "tooltip-container";
2178            let container = root.querySelector(`#${containerId}`);
2179            if (!container) {
2180              container = document.createElement("div");
2181              container.id = containerId;
2182              Object.assign(container.style, {
2183                position: "absolute",
2184                top: "0",
2185                left: "0",
2186                width: "100%",
2187                height: "0px",
2188                // minimal height
2189                overflow: "visible",
2190                pointerEvents: "none"
2191                // Important: lets clicks pass through
2192              });
2193              root.appendChild(container);
2194            }
2195            teleportTarget.value = container;
2196          }
2197        }
2198      }
2199      document.addEventListener("mousedown", onClickOutside);
2200    });
2201    edr_remote_vue_components__loadShare__vue__loadShare__.onUnmounted(() => {
2202      document.removeEventListener("mousedown", onClickOutside);
2203      if (hoverTimer) clearTimeout(hoverTimer);
2204    });
2205    return (_ctx, _cache) => {
2206      return edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock(edr_remote_vue_components__loadShare__vue__loadShare__.Fragment, null, [
2207        edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", edr_remote_vue_components__loadShare__vue__loadShare__.mergeProps({
2208          ref_key: "triggerRef",
2209          ref: triggerRef,
2210          class: "tooltip-trigger-wrapper"
2211        }, _ctx.$attrs, {
2212          onMouseenter: onMouseEnter,
2213          onMouseleave: onMouseLeave,
2214          onClick: onToggleClick
2215        }), [
2216          edr_remote_vue_components__loadShare__vue__loadShare__.renderSlot(_ctx.$slots, "trigger", {}, void 0, true)
2217        ], 16),
2218        (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createBlock(edr_remote_vue_components__loadShare__vue__loadShare__.Teleport, { to: teleportTarget.value }, [
2219          edr_remote_vue_components__loadShare__vue__loadShare__.createVNode(edr_remote_vue_components__loadShare__vue__loadShare__.Transition, { name: "tooltip-fade" }, {
2220            default: edr_remote_vue_components__loadShare__vue__loadShare__.withCtx(() => [
2221              isOpen.value ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", {
2222                key: 0,
2223                ref_key: "contentRef",
2224                ref: contentRef,
2225                class: "tooltip-content",
2226                style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle(edr_remote_vue_components__loadShare__vue__loadShare__.unref(floatingStyles)),
2227                onMouseenter: onMouseEnter,
2228                onMouseleave: onMouseLeave
2229              }, [
2230                edr_remote_vue_components__loadShare__vue__loadShare__.renderSlot(_ctx.$slots, "default", {}, void 0, true),
2231                edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", {
2232                  class: "tooltip-arrow",
2233                  ref_key: "arrowRef",
2234                  ref: arrowRef,
2235                  style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle(arrowStyles.value)
2236                }, null, 4)
2237              ], 36)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true)
2238            ]),
2239            _: 3
2240          })
2241        ], 8, ["to"]))
2242      ], 64);
2243    };
2244  }
2245});
2246
2247const Tooltip = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-4b184700"]]);
2248
2249const _hoisted_1$4 = ["title"];
2250const _hoisted_2$3 = {
2251  key: 0,
2252  class: "sa-badge-counter"
2253};
2254const _sfc_main$4 = /* @__PURE__ */ edr_remote_vue_components__loadShare__vue__loadShare__.defineComponent({
2255  __name: "SaBadge",
2256  props: {
2257    classNames: {},
2258    counter: {},
2259    style: {},
2260    text: {},
2261    title: {}
2262  },
2263  setup(__props) {
2264    const props = __props;
2265    const { classNames, counter, style, text, title } = props;
2266    return (_ctx, _cache) => {
2267      return edr_remote_vue_components__loadShare__vue__loadShare__.o
2267penBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", {
2268        class: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeClass(["sa-badge", edr_remote_vue_components__loadShare__vue__loadShare__.unref(classNames)]),
2269        style: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeStyle(edr_remote_vue_components__loadShare__vue__loadShare__.unref(style)),
2270        title: edr_remote_vue_components__loadShare__vue__loadShare__.unref(title)
2271      }, [
2272        edr_remote_vue_components__loadShare__vue__loadShare__.unref(counter) ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("span", _hoisted_2$3, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(edr_remote_vue_components__loadShare__vue__loadShare__.unref(counter)), 1)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
2273        edr_remote_vue_components__loadShare__vue__loadShare__.createTextVNode(" " + edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(edr_remote_vue_components__loadShare__vue__loadShare__.unref(text)), 1)
2274      ], 14, _hoisted_1$4);
2275    };
2276  }
2277});
2278
2279const SaBadge = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-ed9cc8d7"]]);
2280
2281const _hoisted_1$3 = { class: "arrow-container" };
2282const _hoisted_2$2 = ["width", "height"];
2283const _hoisted_3$2 = ["fill"];
2284const _hoisted_4$1 = ["fill"];
2285const _sfc_main$3 = /* @__PURE__ */ edr_remote_vue_components__loadShare__vue__loadShare__.defineComponent({
2286  __name: "ArrowIcon",
2287  props: {
2288    color: {},
2289    bgColor: {},
2290    size: {},
2291    type: {}
2292  },
2293  setup(__props) {
2294    edr_remote_vue_components__loadShare__vue__loadShare__.useCssVars((_ctx) => ({
2295      "v7f1575e2": _ctx.bgColor
2296    }));
2297    return (_ctx, _cache) => {
2298      return edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_1$3, [
2299        (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("svg", {
2300          width: __props.size,
2301          height: __props.size,
2302          viewBox: "0 0 512 512",
2303          xmlns: "http://www.w3.org/2000/svg"
2304        }, [
2305          __props.type === "left" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("path", {
2306            key: 0,
2307            fill: __props.color,
2308            d: "M50.2,169.6C97.9,56.3,228.5,3.1,341.8,50.9s166.4,178.3,118.7,291.6S282.2,508.9,168.9,461.1  C86.4,426.4,32.7,345.5,32.7,256C32.7,226.3,38.6,196.9,50.2,169.6z M254.7,448c106,0,192-86,192-192s-86-192-192-192  s-192,86-192,192S148.7,448,254.7,448z M226.7,140.7L111.4,256l115.3,115.3l21.2-21.2L168.7,271h208.2v-30H168.7l79.1-79.1  L226.7,140.7z"
2309          }, null, 8, _hoisted_3$2)) : __props.type === "right" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("path", {
2310            key: 1,
2311            d: "M460.54,169.58A222.6,222.6,0,1,0,478,256,221.16,221.16,0,0,0,460.54,169.58ZM256,448C150,448,64,362,64,256S150,64,256,64s192,86,192,192S362,448,256,448Zm28.06-307.33L399.39,256,284.06,371.33l-21.21-21.21L342,271H133.82V241H342l-79.12-79.12Z",
2312            fill: __props.color
2313          }, null, 8, _hoisted_4$1)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true)
2314        ], 8, _hoisted_2$2))
2315      ]);
2316    };
2317  }
2318});
2319
2320const ArrowIcon = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-f6b6c734"]]);
2321
2322const _hoisted_1$2 = {
2323  key: 0,
2324  class: /* @__PURE__ */ edr_remote_vue_components__loadShare__vue__loadShare__.normalizeClass(["timeline-card-detail-container", "timeline-card-detail-container-dim-large"])
2325};
2326const _hoisted_2$1 = { class: "info-first-card-large-container" };
2327const _hoisted_3$1 = { class: "info-first-card-large" };
2328const _hoisted_4 = { class: "info" };
2329const _hoisted_5 = { class: "info-bold" };
2330const _hoisted_6 = { class: "info" };
2331const _hoisted_7 = { class: "info-date" };
2332const _hoisted_8 = { class: "info-first-card-large" };
2333const _hoisted_9 = { class: "info" };
2334const _hoisted_10 = { class: "process-path-info-panel info-bold" };
2335const _hoisted_11 = {
2336  key: 1,
2337  class: "timeline-card-detail-container detection-card"
2338};
2339const _hoisted_12 = { class: "info-panel" };
2340const _hoisted_13 = { class: "info" };
2341const _hoisted_14 = { class: "info-panel-title" };
2342const _hoisted_15 = { class: "info" };
2343const _hoisted_16 = { class: "info-date" };
2344const _hoisted_17 = { class: "info" };
2345const _hoisted_18 = { class: "info-date" };
2346const _hoisted_19 = { class: "info-section" };
2347const _hoisted_20 = { class: "info-detection" };
2348const _hoisted_21 = { class: "word-wrap" };
2349const _hoisted_22 = {
2350  key: 0,
2351  class: "process-path-panel"
2352};
2353const _hoisted_23 = { class: "process-path" };
2354const _hoisted_24 = {
2355  key: 1,
2356  class: "info-section"
2357};
2358const _hoisted_25 = { class: "info-detection" };
2359const _hoisted_26 = { class: "capitalize" };
2360const _hoisted_27 = { class: "info-section" };
2361const _hoisted_28 = { class: "info-detection" };
2362const _hoisted_29 = {
2363  class: /* @__PURE__ */ edr_remote_vue_components__loadShare__vue__loadShare__.normalizeClass(["capitalize", "info-detection-rule-tag"])
2364};
2365const _hoisted_30 = { class: "info-section" };
2366const _hoisted_31 = { class: "info-description" };
2367const _hoisted_32 = { class: "data-manipulation" };
2368const _hoisted_33 = { class: "bold" };
2369const _hoisted_34 = { class: "slider-container" };
2370const _hoisted_35 = { class: "slider-tactic-header" };
2371const _hoisted_36 = {
2372  class: /* @__PURE__ */ edr_remote_vue_components__loadShare__vue__loadShare__.normalizeClass(["bold", "underlined"])
2373};
2374const _hoisted_37 = ["href"];
2375const _hoisted_38 = {
2376  key: 0,
2377  class: "techniques-container"
2378};
2379const _hoisted_39 = { class: "techniques-list" };
2380const _hoisted_40 = ["href"];
2381const _hoisted_41 = {
2382  key: 1,
2383  class: "slider-footer"
2384};
2385const _hoisted_42 = { class: "dots-container" };
2386const _hoisted_43 = ["onClick"];
2387const _hoisted_44 = { class: "info-action-card" };
2388const _hoisted_45 = { class: "info" };
2389const _hoisted_46 = { class: "info-date" };
2390const _hoisted_47 = { class: "info" };
2391const _hoisted_48 = { class: "info-bold" };
2392const _hoisted_49 = { class: "info" };
2393const _hoisted_50 = { class: "info-bold" };
2394const link = "https://attack.mitre.org/";
2395const policyLink = "/todo";
2396const _sfc_main$2 = /* @__PURE__ */ edr_remote_vue_components__loadShare__vue__loadShare__.defineComponent({
2397  __name: "TimelineCardDetail",
2398  props: {
2399    info: {},
2400    osType: {}
2401  },
2402  setup(__props) {
2403    const props = __props;
2404    const friendlySeverity = {
2405      0: "Information",
2406      1: "Low",
2407      2: "Medium",
2408      3: "High",
2409      4: "Critical"
2410    };
2411    const isProcessPathOpen = edr_remote_vue_components__loadShare__vue__loadShare__.ref(false);
2412    const currentSlide = edr_remote_vue_components__loadShare__vue__loadShare__.ref(0);
2413    const details = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "details" in props.info ? props.info.details : void 0);
2414    const endDate = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "end_date" in props.info ? props.info.end_date : void 0);
2415    const instances = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "instances" in props.info ? props.info.instances : []);
2416    const instancesCount = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "instances_count" in props.info ? props.info.instances_count : 0);
2417    const itemType = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => props.info.item_type);
2418    const path = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "path" in props.info ? props.info.path : void 0);
2419    const ruleDescription = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "rule_description" in props.info ? props.info.rule_description : void 0);
2420    const ruleSeverity = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "rule_severity" in props.info ? props.info.rule_severity : void 0);
2421    const ruleTag = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "rule_tag" in props.info ? props.info.rule_tag : void 0);
2422    const startDate = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "start_date" in props.info ? props.info.start_date : void 0);
2423    const timestamp = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "timestamp" in props.info ? props.info.timestamp : void 0);
2424    const user = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "user" in props.info ? props.info.user : void 0);
2425    const userName = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => "user_name" in props.info ? props.info.user_name : void 0);
2426    const severity = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => {
2427      if (ruleSeverity.value === void 0) return void 0;
2428      return friendlySeverity[ruleSeverity.value]?.toLowerCase();
2429    });
2430    const processName = edr_remote_vue_components__loadShare__vue__loadShare__.computed(() => {
2431      if (!path.value) return void 0;
2432      if (props.osType?.toLowerCase() !== "windows") {
2433        return path.value.split("/").pop();
2434      }
2435      return path.value.split("\\").pop();
2436    });
2437    const toggleProcessPath = () => {
2438      isProcessPathOpen.value = !isProcessPathOpen.value;
2439    };
2440    const goToSlide = (index) => {
2441      currentSlide.value = index;
2442    };
2443    const previousSlide = () => {
2444      if (currentSlide.value !== 0) {
2445        currentSlide.value--;
2446      }
2447    };
2448    const nextSlide = () => {
2449      if (currentSlide.value !== instances.value.length - 1) {
2450        currentSlide.value++;
2451      }
2452    };
2453    return (_ctx, _cache) => {
2454      return itemType.value === "info" ? (edr_remote_vue_components__loadShare__vue__loadShare__.o
2454penBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_1$2, [
2455        edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_2$1, [
2456          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_3$1, [
2457            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_4, [
2458              _cache[0] || (_cache[0] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("span", { class: "info-panel-title" }, " User Account ", -1)),
2459              edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_5, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(user.value || "--"), 1)
2460            ]),
2461            _cache[2] || (_cache[2] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", { class: "vertical-divider" }, null, -1)),
2462            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_6, [
2463              _cache[1] || (_cache[1] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("span", { class: "info-panel-title" }, " Initial detection time ", -1)),
2464              edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_7, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(edr_remote_vue_components__loadShare__vue__loadShare__.unref(formatDateTime)(timestamp.value, "datetime")), 1)
2465            ])
2466          ]),
2467          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_8, [
2468            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_9, [
2469              _cache[3] || (_cache[3] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("span", { class: "info-panel-title" }, " Process path name ", -1)),
2470              edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_10, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(path.value), 1)
2471            ])
2472          ])
2473        ])
2474      ])) : itemType.value === "detection" ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_11, [
2475        edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_12, [
2476          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_13, [
2477            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_14, [
2478              _cache[4] || (_cache[4] = edr_remote_vue_components__loadShare__vue__loadShare__.createTextVNode(" Total occurrences ", -1)),
2479              edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("span", {
2480                class: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeClass(["instances-circle", severity.value])
2481              }, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(instancesCount.value), 3)
2482            ])
2483          ]),
2484          _cache[7] || (_cache[7] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", { class: "vertical-divider" }, null, -1)),
2485          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_15, [
2486            _cache[5] || (_cache[5] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("span", { class: "info-panel-title" }, " First time ", -1)),
2487            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_16, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(edr_remote_vue_components__loadShare__vue__loadShare__.unref(formatDateTime)(startDate.value, "datetime")), 1)
2488          ]),
2489          _cache[8] || (_cache[8] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", { class: "vertical-divider" }, null, -1)),
2490          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_17, [
2491            _cache[6] || (_cache[6] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("span", { class: "info-panel-title" }, " Last time ", -1)),
2492            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_18, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(edr_remote_vue_components__loadShare__vue__loadShare__.unref(formatDateTime)(endDate.value, "datetime")), 1)
2493          ])
2494        ]),
2495        edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_19, [
2496          _cache[9] || (_cache[9] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", { class: "info-section-header" }, "Process name", -1)),
2497          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_20, [
2498            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_21, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(processName.value || "--"), 1),
2499            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", {
2500              class: "process-name-span",
2501              onClick: toggleProcessPath
2502            }, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(isProcessPathOpen.value ? "Hide" : "Show") + " full process path ", 1),
2503            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("span", {
2504              class: "clickable",
2505              onClick: toggleProcessPath
2506            }, "  " + edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(isProcessPathOpen.value ? "↑" : "↓"), 1)
2507          ])
2508        ]),
2509        isProcessPathOpen.value ? (edr_remote_vue_components__loadShare__vue__loadShare__.o
2509penBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_22, [
2510          _cache[10] || (_cache[10] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", { class: "process-name-header" }, "Full process path:", -1)),
2511          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_23, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(path.value), 1)
2512        ])) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
2513        user.value && user.value.length > 0 ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_24, [
2514          _cache[11] || (_cache[11] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", { class: "info-section-header" }, "User account", -1)),
2515          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_25, [
2516            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_26, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(user.value), 1)
2517          ])
2518        ])) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
2519        edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_27, [
2520          _cache[12] || (_cache[12] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", { class: "info-section-header" }, "Behavior", -1)),
2521          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_28, [
2522            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_29, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(ruleTag.value), 1),
2523            edr_remote_vue_components__loadShare__vue__loadShare__.createVNode(SaBadge, {
2524              classNames: severity.value,
2525              text: friendlySeverity[ruleSeverity.value] + " Severity"
2526            }, null, 8, ["classNames", "text"])
2527          ])
2528        ]),
2529        edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_30, [
2530          _cache[13] || (_cache[13] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", { class: "info-section-header" }, "Description", -1)),
2531          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_31, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(ruleDescription.value), 1)
2532        ]),
2533        _cache[16] || (_cache[16] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", { class: "divider" }, null, -1)),
2534        edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_32, [
2535          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_33, "Adversary Behavior Tactics (" + edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(instances.value.length) + ")", 1),
2536          _cache[14] || (_cache[14] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", null, " Sometimes a detection can demonstrate signs of more than one tactic. When this is the case we list all potential tactics. ", -1))
2537        ]),
2538        edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_34, [
2539          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_35, [
2540            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_36, [
2541              edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("a", {
2542                href: link + "tactics/" + instances.value[currentSlide.value]?.tactic_code,
2543                rel: "noreferrer",
2544                target: "_blank"
2545              }, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(instances.value[currentSlide.value]?.tactic_name) + " " + edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(instances.value.length > 1 ? `(${currentSlide.value + 1}/${instances.value.length})` : ""), 9, _hoisted_37)
2546            ]),
2547            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", null, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(instances.value[currentSlide.value]?.tactic_de
2547scription), 1)
2548          ]),
2549          instances.value[currentSlide.value]?.techniques && instances.value[currentSlide.value]?.techniques.length || 0 > 0 ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_38, [
2550            _cache[15] || (_cache[15] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", { class: "bold" }, "Technique(s)", -1)),
2551            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_39, [
2552              (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(true), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock(edr_remote_vue_components__loadShare__vue__loadShare__.Fragment, null, edr_remote_vue_components__loadShare__vue__loadShare__.renderList(instances.value[currentSlide.value]?.techniques, (technique, idx) => {
2553                return edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock(edr_remote_vue_components__loadShare__vue__loadShare__.Fragment, { key: idx }, [
2554                  (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(true), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock(edr_remote_vue_components__loadShare__vue__loadShare__.Fragment, null, edr_remote_vue_components__loadShare__vue__loadShare__.renderList(Object.entries(technique), ([code, techData], i) => {
2555                    return edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", {
2556                      key: i,
2557                      class: "technique-link"
2558                    }, [
2559                      edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("a", {
2560                        href: techData.hyperlink,
2561                        rel: "noreferrer",
2562                        target: "_blank"
2563                      }, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(code) + " - " + edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(techData.name), 9, _hoisted_40)
2564                    ]);
2565                  }), 128))
2566                ], 64);
2567              }), 128))
2568            ])
2569          ])) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true),
2570          instances.value.length > 1 ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_41, [
2571            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", {
2572              class: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeClass(["slider-go", { deactivated: currentSlide.value === 0 }]),
2573              onClick: previousSlide,
2574              style: { "margin-right": "24px" }
2575            }, [
2576              edr_remote_vue_components__loadShare__vue__loadShare__.createVNode(ArrowIcon, {
2577                "bg-color": currentSlide.value === 0 ? "var(--edr-module-timeline-card-detail-slider-deactivated-color)" : "var(--edr-module-timeline-card-detail-slider-activated-color)",
2578                color: "var(--edr-module-timeline-card-detail-slider-arrow-color)",
2579                size: "30px",
2580                type: "left"
2581              }, null, 8, ["bg-color"])
2582            ], 2),
2583            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_42, [
2584              (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(true), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock(edr_remote_vue_components__loadShare__vue__loadShare__.Fragment, null, edr_remote_vue_components__loadShare__vue__loadShare__.renderList(instances.value, (_, index) => {
2585                return edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", {
2586                  key: index,
2587                  class: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeClass([
2588                    "slider-dot",
2589                    currentSlide.value === index ? "activated" : "deactivated"
2590                  ]),
2591                  onClick: ($event) => goToSlide(index)
2592                }, null, 10, _hoisted_43);
2593              }), 128))
2594            ]),
2595            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", {
2596              class: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeClass([
2597                "slider-go",
2598                { deactivated: currentSlide.value === instances.value.length - 1 }
2599              ]),
2600              onClick: nextSlide,
2601              style: { "margin-left": "24px" }
2602            }, [
2603              edr_remote_vue_components__loadShare__vue__loadShare__.createVNode(ArrowIcon, {
2604                "bg-color": currentSlide.value === instances.value.length - 1 ? "var(--edr-module-timeline-card-detail-slider-deactivated-color)" : "var(--edr-module-timeline-card-detail-slider-activated-color)",
2605                color: "var(--edr-module-timeline-card-detail-slider-arrow-color)",
2606                size: "30px",
2607                type: "right"
2608              }, null, 8, ["bg-color"])
2609            ], 2)
2610          ])) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true)
2611        ])
2612      ])) : itemType.value === "action" ? (edr_remote_vue_components__loadShare__vue__loadShare__.o
2612penBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", {
2613        key: 2,
2614        class: edr_remote_vue_components__loadShare__vue__loadShare__.normalizeClass([
2615          "timeline-card-detail-container",
2616          { "timeline-card-detail-container-dim": details.value?.policy_id }
2617        ])
2618      }, [
2619        edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_44, [
2620          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_45, [
2621            _cache[17] || (_cache[17] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("span", { class: "info-panel-title" }, " Time ", -1)),
2622            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_46, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(edr_remote_vue_components__loadShare__vue__loadShare__.unref(formatDateTime)(timestamp.value, "datetime")), 1)
2623          ]),
2624          _cache[21] || (_cache[21] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", { class: "vertical-divider" }, null, -1)),
2625          edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_47, [
2626            _cache[18] || (_cache[18] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("span", { class: "info-panel-title" }, " Account name ", -1)),
2627            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_48, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(details.value?.rule_id ? "ThreatDown Automation" : details.value?.user_name || userName.value || "--"), 1)
2628          ]),
2629          details.value?.policy_id ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock(edr_remote_vue_components__loadShare__vue__loadShare__.Fragment, { key: 0 }, [
2630            _cache[20] || (_cache[20] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", { class: "vertical-divider" }, null, -1)),
2631            edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_49, [
2632              _cache[19] || (_cache[19] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("span", { class: "info-panel-title" }, " Policy ", -1)),
2633              edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_50, [
2634                details.value?.policy_id ? (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("a", {
2635                  key: 0,
2636                  href: policyLink,
2637                  rel: "noreferrer",
2638                  target: "_blank"
2639                }, edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(details.value?.policy_name || "--"), 1)) : (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock(edr_remote_vue_components__loadShare__vue__loadShare__.Fragment, { key: 1 }, [
2640                  edr_remote_vue_components__loadShare__vue__loadShare__.createTextVNode(edr_remote_vue_components__loadShare__vue__loadShare__.toDisplayString(details.value?.policy_name || "--"), 1)
2641                ], 64))
2642              ])
2643            ])
2644          ], 64)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true)
2645        ])
2646      ], 2)) : edr_remote_vue_components__loadShare__vue__loadShare__.createCommentVNode("", true);
2647    };
2648  }
2649});
2650
2651const TimelineCardDetail = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-d6fd54df"]]);
2652
2653const _hoisted_1$1 = { class: "legends-container" };
2654const _sfc_main$1 = /* @__PURE__ */ edr_remote_vue_components__loadShare__vue__loadShare__.defineComponent({
2655  __name: "TimelineLegend",
2656  setup(__props) {
2657    return (_ctx, _cache) => {
2658      return edr_remote_vue_components__loadShare__vue__loadShare__.o
2658penBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_1$1, [..._cache[0] || (_cache[0] = [
2659        edr_remote_vue_components__loadShare__vue__loadShare__.createStaticVNode('<div class="legend-container" data-v-37055161><span data-v-37055161>Severity:</span><div class="legend-item critical" data-v-37055161><div data-v-37055161></div><span data-v-37055161>Critical</span></div><div class="legend-item high" data-v-37055161><div data-v-37055161></div><span data-v-37055161>High</span></div><div class="legend-item medium" data-v-37055161><div data-v-37055161></div><span data-v-37055161>Medium</span></div><div class="legend-item low" data-v-37055161><div data-v-37055161></div><span data-v-37055161>Low</span></div></div>', 1)
2660      ])]);
2661    };
2662  }
2663});
2664
2665const TimelineLegend = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-37055161"]]);
2666
2667const _hoisted_1 = { class: "timeline-container" };
2668const _hoisted_2 = { class: "timeline-header" };
2669const _hoisted_3 = { class: "timeline-main" };
2670const _sfc_main = /* @__PURE__ */ edr_remote_vue_components__loadShare__vue__loadShare__.defineComponent({
2671  __name: "Timeline",
2672  props: {
2673    data: {},
2674    osType: {}
2675  },
2676  setup(__props) {
2677    const tooltipContainer = edr_remote_vue_components__loadShare__vue__loadShare__.ref(null);
2678    return (_ctx, _cache) => {
2679      return edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock("div", _hoisted_1, [
2680        edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", {
2681          ref_key: "tooltipContainer",
2682          ref: tooltipContainer,
2683          class: "timeline-tooltip-overlay"
2684        }, null, 512),
2685        edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_2, [
2686          _cache[0] || (_cache[0] = edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", { class: "timeline-header-title" }, " Incident Timeline ", -1)),
2687          edr_remote_vue_components__loadShare__vue__loadShare__.createVNode(TimelineLegend)
2688        ]),
2689        edr_remote_vue_components__loadShare__vue__loadShare__.createElementVNode("div", _hoisted_3, [
2690          (edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(true), edr_remote_vue_components__loadShare__vue__loadShare__.createElementBlock(edr_remote_vue_components__loadShare__vue__loadShare__.Fragment, null, edr_remote_vue_components__loadShare__vue__loadShare__.renderList(__props.data, (cardInfo, idx) => {
2691            return edr_remote_vue_components__loadShare__vue__loadShare__.openBlock(), edr_remote_vue_components__loadShare__vue__loadShare__.createBlock(Tooltip, {
2692              key: idx,
2693              class: "card-tooltip",
2694              triggerOn: "click",
2695              "teleport-to": tooltipContainer.value
2696            }, {
2697              trigger: edr_remote_vue_components__loadShare__vue__loadShare__.withCtx(() => [
2698                edr_remote_vue_components__loadShare__vue__loadShare__.createVNode(TimelineCard, {
2699                  "first-card": idx === 0,
2700                  info: cardInfo,
2701                  "last-card": idx === __props.data.length - 1,
2702                  "os-type": __props.osType
2703                }, null, 8, ["first-card", "info", "last-card", "os-type"])
2704              ]),
2705              default: edr_remote_vue_components__loadShare__vue__loadShare__.withCtx(() => [
2706                edr_remote_vue_components__loadShare__vue__loadShare__.createVNode(TimelineCardDetail, {
2707                  info: cardInfo,
2708                  "os-type": __props.osType
2709                }, null, 8, ["info", "os-type"])
2710              ]),
2711              _: 2
2712            }, 1032, ["teleport-to"]);
2713          }), 128))
2714        ])
2715      ]);
2716    };
2717  }
2718});
2719
2720const Timeline = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-5da37661"]]);
2721
2722export { Timeline as default };

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.