@amplitude/plugin-autocapture-browser 1.18.4 → 1.18.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"frustration-plugin.d.ts","sourceRoot":"","sources":["../../src/frustration-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,8BAA8B,EAK9B,UAAU,EAEX,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAA0B,4BAA4B,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGlH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,MAAM,WAAW,oBAAoB;IACnC,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC;IACxF,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;IACnF,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,KAAK,uBAAuB,GAAG,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAE9E,eAAO,MAAM,iBAAiB,aAAa,8BAA8B,KAAQ,uBAmKhF,CAAC"}
1
+ {"version":3,"file":"frustration-plugin.d.ts","sourceRoot":"","sources":["../../src/frustration-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,8BAA8B,EAG9B,UAAU,EAIX,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAA0B,4BAA4B,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGlH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,MAAM,WAAW,oBAAoB;IACnC,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC;IACxF,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;IACnF,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,KAAK,uBAAuB,GAAG,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AA4B9E,eAAO,MAAM,iBAAiB,aAAa,8BAA8B,KAAQ,uBAoLhF,CAAC"}
@@ -11,17 +11,39 @@ var track_rage_click_1 = require("./autocapture/track-rage-click");
11
11
  var autocapture_plugin_1 = require("./autocapture-plugin");
12
12
  var observables_1 = require("./observables");
13
13
  var data_extractor_1 = require("./data-extractor");
14
+ /**
15
+ * Helper function to extract the css selector allowlist
16
+ * from the frustration interactions options for a specific
17
+ * autocapture feature.
18
+ */
19
+ function getCssSelectorAllowlist(options, attribute, defaultAllowlist, enabled) {
20
+ if (!enabled) {
21
+ return [];
22
+ }
23
+ var config = options[attribute];
24
+ if (typeof config === 'object' &&
25
+ config !== null &&
26
+ 'cssSelectorAllowlist' in config &&
27
+ Array.isArray(config.cssSelectorAllowlist)) {
28
+ return config.cssSelectorAllowlist;
29
+ }
30
+ return defaultAllowlist;
31
+ }
14
32
  var frustrationPlugin = function (options) {
15
- var _a, _b, _c, _d, _e;
33
+ var _a;
16
34
  if (options === void 0) { options = {}; }
17
35
  var name = constants.FRUSTRATION_PLUGIN_NAME;
18
36
  var type = 'enrichment';
19
37
  var subscriptions = [];
20
- var rageCssSelectors = (_b = (_a = options.rageClicks) === null || _a === void 0 ? void 0 : _a.cssSelectorAllowlist) !== null && _b !== void 0 ? _b : analytics_core_1.DEFAULT_RAGE_CLICK_ALLOWLIST;
21
- var deadCssSelectors = (_d = (_c = options.deadClicks) === null || _c === void 0 ? void 0 : _c.cssSelectorAllowlist) !== null && _d !== void 0 ? _d : analytics_core_1.DEFAULT_DEAD_CLICK_ALLOWLIST;
22
- var dataAttributePrefix = (_e = options.dataAttributePrefix) !== null && _e !== void 0 ? _e : analytics_core_1.DEFAULT_DATA_ATTRIBUTE_PREFIX;
38
+ // Check if each feature is enabled
39
+ var deadClicksEnabled = options.deadClicks !== false && options.deadClicks !== null;
40
+ var rageClicksEnabled = options.rageClicks !== false && options.rageClicks !== null;
41
+ // Get CSS selectors for enabled features
42
+ var rageCssSelectors = getCssSelectorAllowlist(options, 'rageClicks', analytics_core_1.DEFAULT_RAGE_CLICK_ALLOWLIST, rageClicksEnabled);
43
+ var deadCssSelectors = getCssSelectorAllowlist(options, 'deadClicks', analytics_core_1.DEFAULT_DEAD_CLICK_ALLOWLIST, deadClicksEnabled);
44
+ var dataAttributePrefix = (_a = options.dataAttributePrefix) !== null && _a !== void 0 ? _a : analytics_core_1.DEFAULT_DATA_ATTRIBUTE_PREFIX;
23
45
  var dataExtractor = new data_extractor_1.DataExtractor(options);
24
- // combine the two selector lists to determine which clicked elements should be filtered
46
+ // combine the selector lists from enabled features to determine which clicked elements should be filtered
25
47
  var combinedCssSelectors = tslib_1.__spreadArray([], tslib_1.__read(new Set(tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(rageCssSelectors), false), tslib_1.__read(deadCssSelectors), false))), false);
26
48
  // Create observables on events on the window
27
49
  var createObservables = function () {
@@ -91,31 +113,36 @@ var frustrationPlugin = function (options) {
91
113
  _a;
92
114
  };
93
115
  var setup = function (config, amplitude) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
94
- var shouldTrackRageClick, shouldTrackDeadClick, allObservables, rageClickSubscription, deadClickSubscription;
116
+ var allObservables, shouldTrackRageClick, rageClickSubscription, shouldTrackDeadClick, deadClickSubscription;
95
117
  var _a;
96
118
  return tslib_1.__generator(this, function (_b) {
97
119
  /* istanbul ignore if */
98
120
  if (typeof document === 'undefined') {
99
121
  return [2 /*return*/];
100
122
  }
101
- shouldTrackRageClick = (0, helpers_1.createShouldTrackEvent)(options, rageCssSelectors);
102
- shouldTrackDeadClick = (0, helpers_1.createShouldTrackEvent)(options, deadCssSelectors);
103
123
  allObservables = createObservables();
104
- rageClickSubscription = (0, track_rage_click_1.trackRageClicks)({
105
- allObservables: allObservables,
106
- amplitude: amplitude,
107
- shouldTrackRageClick: shouldTrackRageClick,
108
- });
109
- subscriptions.push(rageClickSubscription);
110
- deadClickSubscription = (0, track_dead_click_1.trackDeadClick)({
111
- amplitude: amplitude,
112
- allObservables: allObservables,
113
- getEventProperties: function (actionType, element) {
114
- return dataExtractor.getEventProperties(actionType, element, dataAttributePrefix);
115
- },
116
- shouldTrackDeadClick: shouldTrackDeadClick,
117
- });
118
- subscriptions.push(deadClickSubscription);
124
+ // Create subscriptions only for enabled features
125
+ if (rageClicksEnabled) {
126
+ shouldTrackRageClick = (0, helpers_1.createShouldTrackEvent)(options, rageCssSelectors);
127
+ rageClickSubscription = (0, track_rage_click_1.trackRageClicks)({
128
+ allObservables: allObservables,
129
+ amplitude: amplitude,
130
+ shouldTrackRageClick: shouldTrackRageClick,
131
+ });
132
+ subscriptions.push(rageClickSubscription);
133
+ }
134
+ if (deadClicksEnabled) {
135
+ shouldTrackDeadClick = (0, helpers_1.createShouldTrackEvent)(options, deadCssSelectors);
136
+ deadClickSubscription = (0, track_dead_click_1.trackDeadClick)({
137
+ amplitude: amplitude,
138
+ allObservables: allObservables,
139
+ getEventProperties: function (actionType, element) {
140
+ return dataExtractor.getEventProperties(actionType, element, dataAttributePrefix);
141
+ },
142
+ shouldTrackDeadClick: shouldTrackDeadClick,
143
+ });
144
+ subscriptions.push(deadClickSubscription);
145
+ }
119
146
  /* istanbul ignore next */
120
147
  (_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.log("".concat(name, " has been successfully added."));
121
148
  return [2 /*return*/];
@@ -1 +1 @@
1
- {"version":3,"file":"frustration-plugin.js","sourceRoot":"","sources":["../../src/frustration-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport {\n BrowserClient,\n BrowserConfig,\n EnrichmentPlugin,\n FrustrationInteractionsOptions,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n DEFAULT_RAGE_CLICK_ALLOWLIST,\n DEFAULT_DEAD_CLICK_ALLOWLIST,\n multicast,\n Observable,\n Unsubscribable,\n} from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { createShouldTrackEvent, ElementBasedTimestampedEvent, NavigateEvent, TimestampedEvent } from './helpers';\nimport { trackDeadClick } from './autocapture/track-dead-click';\nimport { trackRageClicks } from './autocapture/track-rage-click';\nimport { ObservablesEnum } from './autocapture-plugin';\nimport { createClickObservable, createMutationObservable } from './observables';\nimport { DataExtractor } from './data-extractor';\n\nexport interface AllWindowObservables {\n [ObservablesEnum.ClickObservable]: Observable<ElementBasedTimestampedEvent<MouseEvent>>;\n [ObservablesEnum.MutationObservable]: Observable<TimestampedEvent<MutationRecord[]>>;\n [ObservablesEnum.NavigateObservable]?: Observable<TimestampedEvent<NavigateEvent>>;\n [ObservablesEnum.SelectionObservable]?: Observable<void>;\n}\n\ntype BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\nexport const frustrationPlugin = (options: FrustrationInteractionsOptions = {}): BrowserEnrichmentPlugin => {\n const name = constants.FRUSTRATION_PLUGIN_NAME;\n const type = 'enrichment';\n\n const subscriptions: Unsubscribable[] = [];\n\n const rageCssSelectors = options.rageClicks?.cssSelectorAllowlist ?? DEFAULT_RAGE_CLICK_ALLOWLIST;\n const deadCssSelectors = options.deadClicks?.cssSelectorAllowlist ?? DEFAULT_DEAD_CLICK_ALLOWLIST;\n\n const dataAttributePrefix = options.dataAttributePrefix ?? DEFAULT_DATA_ATTRIBUTE_PREFIX;\n\n const dataExtractor = new DataExtractor(options);\n\n // combine the two selector lists to determine which clicked elements should be filtered\n const combinedCssSelectors = [...new Set([...rageCssSelectors, ...deadCssSelectors])];\n\n // Create observables on events on the window\n const createObservables = (): AllWindowObservables => {\n const clickObservable = multicast(\n createClickObservable('pointerdown').map((click) => {\n return dataExtractor.addAdditionalEventProperties(\n click,\n 'click',\n combinedCssSelectors,\n dataAttributePrefix,\n true, // capture when cursor is pointer\n );\n }),\n );\n\n const enrichedMutationObservable = multicast<TimestampedEvent<MutationRecord[]>>(\n createMutationObservable().map((mutation) =>\n dataExtractor.addAdditionalEventProperties(mutation, 'mutation', combinedCssSelectors, dataAttributePrefix),\n ),\n );\n\n let enrichedNavigateObservable: Observable<TimestampedEvent<NavigateEvent>> | undefined;\n\n if (window.navigation) {\n const navigateObservable = new Observable<Event>((observer) => {\n const handler = (event: Event): void => {\n observer.next({\n ...event,\n type: 'navigate',\n });\n };\n window.navigation.addEventListener('navigate', handler);\n return () => {\n window.navigation.removeEventListener('navigate', handler);\n };\n });\n enrichedNavigateObservable = multicast<TimestampedEvent<NavigateEvent>>(\n navigateObservable.map<TimestampedEvent<NavigateEvent>>(\n (navigate) =>\n dataExtractor.addAdditionalEventProperties(\n navigate,\n 'navigate',\n combinedCssSelectors,\n dataAttributePrefix,\n ) as TimestampedEvent<NavigateEvent>,\n ),\n );\n }\n\n const selectionObservable = multicast(\n new Observable<void>((observer) => {\n const handler = () => {\n const el: HTMLElement | null = document.activeElement as HTMLElement;\n\n // handle input and textarea\n\n // if the selectionStart and selectionEnd are the same, it means\n // nothing is selected (collapsed) and the cursor position is one point\n if (el && (el.tagName === 'TEXTAREA' || el.tagName === 'INPUT')) {\n let start: number | null | undefined;\n let end: number | null | undefined;\n try {\n start = (el as HTMLInputElement | HTMLTextAreaElement).selectionStart;\n end = (el as HTMLInputElement | HTMLTextAreaElement).selectionEnd;\n if (start === end) return; // collapsed\n } catch (error) {\n // input that doesn't support selectionStart/selectionEnd (like checkbox)\n // do nothing here\n return;\n }\n return observer.next();\n }\n\n // handle non-input elements\n\n // non-input elements have an attribute called \"isCollapsed\" which\n // if true, indicates there \"is currently not any text selected\"\n // (see https://developer.mozilla.org/en-US/docs/Web/API/Selection/isCollapsed)\n const selection = window.getSelection();\n if (!selection || selection.isCollapsed) return;\n return observer.next();\n };\n window.document.addEventListener('selectionchange', handler);\n return () => {\n window.document.removeEventListener('selectionchange', handler);\n };\n }),\n );\n\n return {\n [ObservablesEnum.ClickObservable]: clickObservable as Observable<ElementBasedTimestampedEvent<MouseEvent>>,\n [ObservablesEnum.MutationObservable]: enrichedMutationObservable,\n [ObservablesEnum.NavigateObservable]: enrichedNavigateObservable,\n [ObservablesEnum.SelectionObservable]: selectionObservable,\n };\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n // Create should track event functions for the different allowlists\n const shouldTrackRageClick = createShouldTrackEvent(options, rageCssSelectors);\n const shouldTrackDeadClick = createShouldTrackEvent(options, deadCssSelectors);\n\n // Create observables for events on the window\n const allObservables = createObservables();\n\n // Create subscriptions\n const rageClickSubscription = trackRageClicks({\n allObservables,\n amplitude,\n shouldTrackRageClick,\n });\n subscriptions.push(rageClickSubscription);\n\n const deadClickSubscription = trackDeadClick({\n amplitude,\n allObservables,\n getEventProperties: (actionType, element) =>\n dataExtractor.getEventProperties(actionType, element, dataAttributePrefix),\n shouldTrackDeadClick,\n });\n subscriptions.push(deadClickSubscription);\n\n /* istanbul ignore next */\n config?.loggerProvider?.log(`${name} has been successfully added.`);\n };\n\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n for (const subscription of subscriptions) {\n subscription.unsubscribe();\n }\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n"]}
1
+ {"version":3,"file":"frustration-plugin.js","sourceRoot":"","sources":["../../src/frustration-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport {\n BrowserClient,\n BrowserConfig,\n EnrichmentPlugin,\n FrustrationInteractionsOptions,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n multicast,\n Observable,\n Unsubscribable,\n DEFAULT_RAGE_CLICK_ALLOWLIST,\n DEFAULT_DEAD_CLICK_ALLOWLIST,\n} from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { createShouldTrackEvent, ElementBasedTimestampedEvent, NavigateEvent, TimestampedEvent } from './helpers';\nimport { trackDeadClick } from './autocapture/track-dead-click';\nimport { trackRageClicks } from './autocapture/track-rage-click';\nimport { ObservablesEnum } from './autocapture-plugin';\nimport { createClickObservable, createMutationObservable } from './observables';\nimport { DataExtractor } from './data-extractor';\n\nexport interface AllWindowObservables {\n [ObservablesEnum.ClickObservable]: Observable<ElementBasedTimestampedEvent<MouseEvent>>;\n [ObservablesEnum.MutationObservable]: Observable<TimestampedEvent<MutationRecord[]>>;\n [ObservablesEnum.NavigateObservable]?: Observable<TimestampedEvent<NavigateEvent>>;\n [ObservablesEnum.SelectionObservable]?: Observable<void>;\n}\n\ntype BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\n/**\n * Helper function to extract the css selector allowlist\n * from the frustration interactions options for a specific\n * autocapture feature.\n */\nfunction getCssSelectorAllowlist(\n options: FrustrationInteractionsOptions,\n attribute: keyof FrustrationInteractionsOptions,\n defaultAllowlist: string[],\n enabled: boolean,\n): string[] {\n if (!enabled) {\n return [];\n }\n const config = options[attribute];\n if (\n typeof config === 'object' &&\n config !== null &&\n 'cssSelectorAllowlist' in config &&\n Array.isArray(config.cssSelectorAllowlist)\n ) {\n return config.cssSelectorAllowlist;\n }\n return defaultAllowlist;\n}\n\nexport const frustrationPlugin = (options: FrustrationInteractionsOptions = {}): BrowserEnrichmentPlugin => {\n const name = constants.FRUSTRATION_PLUGIN_NAME;\n const type = 'enrichment';\n\n const subscriptions: Unsubscribable[] = [];\n\n // Check if each feature is enabled\n const deadClicksEnabled = options.deadClicks !== false && options.deadClicks !== null;\n const rageClicksEnabled = options.rageClicks !== false && options.rageClicks !== null;\n\n // Get CSS selectors for enabled features\n const rageCssSelectors = getCssSelectorAllowlist(\n options,\n 'rageClicks',\n DEFAULT_RAGE_CLICK_ALLOWLIST,\n rageClicksEnabled,\n );\n const deadCssSelectors = getCssSelectorAllowlist(\n options,\n 'deadClicks',\n DEFAULT_DEAD_CLICK_ALLOWLIST,\n deadClicksEnabled,\n );\n\n const dataAttributePrefix = options.dataAttributePrefix ?? DEFAULT_DATA_ATTRIBUTE_PREFIX;\n\n const dataExtractor = new DataExtractor(options);\n\n // combine the selector lists from enabled features to determine which clicked elements should be filtered\n const combinedCssSelectors = [...new Set([...rageCssSelectors, ...deadCssSelectors])];\n\n // Create observables on events on the window\n const createObservables = (): AllWindowObservables => {\n const clickObservable = multicast(\n createClickObservable('pointerdown').map((click) => {\n return dataExtractor.addAdditionalEventProperties(\n click,\n 'click',\n combinedCssSelectors,\n dataAttributePrefix,\n true, // capture when cursor is pointer\n );\n }),\n );\n\n const enrichedMutationObservable = multicast<TimestampedEvent<MutationRecord[]>>(\n createMutationObservable().map((mutation) =>\n dataExtractor.addAdditionalEventProperties(mutation, 'mutation', combinedCssSelectors, dataAttributePrefix),\n ),\n );\n\n let enrichedNavigateObservable: Observable<TimestampedEvent<NavigateEvent>> | undefined;\n\n if (window.navigation) {\n const navigateObservable = new Observable<Event>((observer) => {\n const handler = (event: Event): void => {\n observer.next({\n ...event,\n type: 'navigate',\n });\n };\n window.navigation.addEventListener('navigate', handler);\n return () => {\n window.navigation.removeEventListener('navigate', handler);\n };\n });\n enrichedNavigateObservable = multicast<TimestampedEvent<NavigateEvent>>(\n navigateObservable.map<TimestampedEvent<NavigateEvent>>(\n (navigate) =>\n dataExtractor.addAdditionalEventProperties(\n navigate,\n 'navigate',\n combinedCssSelectors,\n dataAttributePrefix,\n ) as TimestampedEvent<NavigateEvent>,\n ),\n );\n }\n\n const selectionObservable = multicast(\n new Observable<void>((observer) => {\n const handler = () => {\n const el: HTMLElement | null = document.activeElement as HTMLElement;\n\n // handle input and textarea\n\n // if the selectionStart and selectionEnd are the same, it means\n // nothing is selected (collapsed) and the cursor position is one point\n if (el && (el.tagName === 'TEXTAREA' || el.tagName === 'INPUT')) {\n let start: number | null | undefined;\n let end: number | null | undefined;\n try {\n start = (el as HTMLInputElement | HTMLTextAreaElement).selectionStart;\n end = (el as HTMLInputElement | HTMLTextAreaElement).selectionEnd;\n if (start === end) return; // collapsed\n } catch (error) {\n // input that doesn't support selectionStart/selectionEnd (like checkbox)\n // do nothing here\n return;\n }\n return observer.next();\n }\n\n // handle non-input elements\n\n // non-input elements have an attribute called \"isCollapsed\" which\n // if true, indicates there \"is currently not any text selected\"\n // (see https://developer.mozilla.org/en-US/docs/Web/API/Selection/isCollapsed)\n const selection = window.getSelection();\n if (!selection || selection.isCollapsed) return;\n return observer.next();\n };\n window.document.addEventListener('selectionchange', handler);\n return () => {\n window.document.removeEventListener('selectionchange', handler);\n };\n }),\n );\n\n return {\n [ObservablesEnum.ClickObservable]: clickObservable as Observable<ElementBasedTimestampedEvent<MouseEvent>>,\n [ObservablesEnum.MutationObservable]: enrichedMutationObservable,\n [ObservablesEnum.NavigateObservable]: enrichedNavigateObservable,\n [ObservablesEnum.SelectionObservable]: selectionObservable,\n };\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n // Create observables for events on the window\n const allObservables = createObservables();\n\n // Create subscriptions only for enabled features\n if (rageClicksEnabled) {\n const shouldTrackRageClick = createShouldTrackEvent(options, rageCssSelectors);\n const rageClickSubscription = trackRageClicks({\n allObservables,\n amplitude,\n shouldTrackRageClick,\n });\n subscriptions.push(rageClickSubscription);\n }\n\n if (deadClicksEnabled) {\n const shouldTrackDeadClick = createShouldTrackEvent(options, deadCssSelectors);\n const deadClickSubscription = trackDeadClick({\n amplitude,\n allObservables,\n getEventProperties: (actionType, element) =>\n dataExtractor.getEventProperties(actionType, element, dataAttributePrefix),\n shouldTrackDeadClick,\n });\n subscriptions.push(deadClickSubscription);\n }\n\n /* istanbul ignore next */\n config?.loggerProvider?.log(`${name} has been successfully added.`);\n };\n\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n for (const subscription of subscriptions) {\n subscription.unsubscribe();\n }\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.18.4";
1
+ export declare const VERSION = "1.18.6";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '1.18.4';
4
+ exports.VERSION = '1.18.6';
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '1.18.4';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '1.18.6';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"frustration-plugin.d.ts","sourceRoot":"","sources":["../../src/frustration-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,8BAA8B,EAK9B,UAAU,EAEX,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAA0B,4BAA4B,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGlH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,MAAM,WAAW,oBAAoB;IACnC,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC;IACxF,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;IACnF,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,KAAK,uBAAuB,GAAG,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAE9E,eAAO,MAAM,iBAAiB,aAAa,8BAA8B,KAAQ,uBAmKhF,CAAC"}
1
+ {"version":3,"file":"frustration-plugin.d.ts","sourceRoot":"","sources":["../../src/frustration-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,8BAA8B,EAG9B,UAAU,EAIX,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAA0B,4BAA4B,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGlH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,MAAM,WAAW,oBAAoB;IACnC,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC;IACxF,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;IACnF,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,KAAK,uBAAuB,GAAG,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AA4B9E,eAAO,MAAM,iBAAiB,aAAa,8BAA8B,KAAQ,uBAoLhF,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { __assign, __awaiter, __generator, __read, __spreadArray, __values } from "tslib";
2
2
  /* eslint-disable no-restricted-globals */
3
- import { DEFAULT_DATA_ATTRIBUTE_PREFIX, DEFAULT_RAGE_CLICK_ALLOWLIST, DEFAULT_DEAD_CLICK_ALLOWLIST, multicast, Observable, } from '@amplitude/analytics-core';
3
+ import { DEFAULT_DATA_ATTRIBUTE_PREFIX, multicast, Observable, DEFAULT_RAGE_CLICK_ALLOWLIST, DEFAULT_DEAD_CLICK_ALLOWLIST, } from '@amplitude/analytics-core';
4
4
  import * as constants from './constants';
5
5
  import { createShouldTrackEvent } from './helpers';
6
6
  import { trackDeadClick } from './autocapture/track-dead-click';
@@ -8,17 +8,39 @@ import { trackRageClicks } from './autocapture/track-rage-click';
8
8
  import { ObservablesEnum } from './autocapture-plugin';
9
9
  import { createClickObservable, createMutationObservable } from './observables';
10
10
  import { DataExtractor } from './data-extractor';
11
+ /**
12
+ * Helper function to extract the css selector allowlist
13
+ * from the frustration interactions options for a specific
14
+ * autocapture feature.
15
+ */
16
+ function getCssSelectorAllowlist(options, attribute, defaultAllowlist, enabled) {
17
+ if (!enabled) {
18
+ return [];
19
+ }
20
+ var config = options[attribute];
21
+ if (typeof config === 'object' &&
22
+ config !== null &&
23
+ 'cssSelectorAllowlist' in config &&
24
+ Array.isArray(config.cssSelectorAllowlist)) {
25
+ return config.cssSelectorAllowlist;
26
+ }
27
+ return defaultAllowlist;
28
+ }
11
29
  export var frustrationPlugin = function (options) {
12
- var _a, _b, _c, _d, _e;
30
+ var _a;
13
31
  if (options === void 0) { options = {}; }
14
32
  var name = constants.FRUSTRATION_PLUGIN_NAME;
15
33
  var type = 'enrichment';
16
34
  var subscriptions = [];
17
- var rageCssSelectors = (_b = (_a = options.rageClicks) === null || _a === void 0 ? void 0 : _a.cssSelectorAllowlist) !== null && _b !== void 0 ? _b : DEFAULT_RAGE_CLICK_ALLOWLIST;
18
- var deadCssSelectors = (_d = (_c = options.deadClicks) === null || _c === void 0 ? void 0 : _c.cssSelectorAllowlist) !== null && _d !== void 0 ? _d : DEFAULT_DEAD_CLICK_ALLOWLIST;
19
- var dataAttributePrefix = (_e = options.dataAttributePrefix) !== null && _e !== void 0 ? _e : DEFAULT_DATA_ATTRIBUTE_PREFIX;
35
+ // Check if each feature is enabled
36
+ var deadClicksEnabled = options.deadClicks !== false && options.deadClicks !== null;
37
+ var rageClicksEnabled = options.rageClicks !== false && options.rageClicks !== null;
38
+ // Get CSS selectors for enabled features
39
+ var rageCssSelectors = getCssSelectorAllowlist(options, 'rageClicks', DEFAULT_RAGE_CLICK_ALLOWLIST, rageClicksEnabled);
40
+ var deadCssSelectors = getCssSelectorAllowlist(options, 'deadClicks', DEFAULT_DEAD_CLICK_ALLOWLIST, deadClicksEnabled);
41
+ var dataAttributePrefix = (_a = options.dataAttributePrefix) !== null && _a !== void 0 ? _a : DEFAULT_DATA_ATTRIBUTE_PREFIX;
20
42
  var dataExtractor = new DataExtractor(options);
21
- // combine the two selector lists to determine which clicked elements should be filtered
43
+ // combine the selector lists from enabled features to determine which clicked elements should be filtered
22
44
  var combinedCssSelectors = __spreadArray([], __read(new Set(__spreadArray(__spreadArray([], __read(rageCssSelectors), false), __read(deadCssSelectors), false))), false);
23
45
  // Create observables on events on the window
24
46
  var createObservables = function () {
@@ -88,31 +110,36 @@ export var frustrationPlugin = function (options) {
88
110
  _a;
89
111
  };
90
112
  var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {
91
- var shouldTrackRageClick, shouldTrackDeadClick, allObservables, rageClickSubscription, deadClickSubscription;
113
+ var allObservables, shouldTrackRageClick, rageClickSubscription, shouldTrackDeadClick, deadClickSubscription;
92
114
  var _a;
93
115
  return __generator(this, function (_b) {
94
116
  /* istanbul ignore if */
95
117
  if (typeof document === 'undefined') {
96
118
  return [2 /*return*/];
97
119
  }
98
- shouldTrackRageClick = createShouldTrackEvent(options, rageCssSelectors);
99
- shouldTrackDeadClick = createShouldTrackEvent(options, deadCssSelectors);
100
120
  allObservables = createObservables();
101
- rageClickSubscription = trackRageClicks({
102
- allObservables: allObservables,
103
- amplitude: amplitude,
104
- shouldTrackRageClick: shouldTrackRageClick,
105
- });
106
- subscriptions.push(rageClickSubscription);
107
- deadClickSubscription = trackDeadClick({
108
- amplitude: amplitude,
109
- allObservables: allObservables,
110
- getEventProperties: function (actionType, element) {
111
- return dataExtractor.getEventProperties(actionType, element, dataAttributePrefix);
112
- },
113
- shouldTrackDeadClick: shouldTrackDeadClick,
114
- });
115
- subscriptions.push(deadClickSubscription);
121
+ // Create subscriptions only for enabled features
122
+ if (rageClicksEnabled) {
123
+ shouldTrackRageClick = createShouldTrackEvent(options, rageCssSelectors);
124
+ rageClickSubscription = trackRageClicks({
125
+ allObservables: allObservables,
126
+ amplitude: amplitude,
127
+ shouldTrackRageClick: shouldTrackRageClick,
128
+ });
129
+ subscriptions.push(rageClickSubscription);
130
+ }
131
+ if (deadClicksEnabled) {
132
+ shouldTrackDeadClick = createShouldTrackEvent(options, deadCssSelectors);
133
+ deadClickSubscription = trackDeadClick({
134
+ amplitude: amplitude,
135
+ allObservables: allObservables,
136
+ getEventProperties: function (actionType, element) {
137
+ return dataExtractor.getEventProperties(actionType, element, dataAttributePrefix);
138
+ },
139
+ shouldTrackDeadClick: shouldTrackDeadClick,
140
+ });
141
+ subscriptions.push(deadClickSubscription);
142
+ }
116
143
  /* istanbul ignore next */
117
144
  (_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.log("".concat(name, " has been successfully added."));
118
145
  return [2 /*return*/];
@@ -1 +1 @@
1
- {"version":3,"file":"frustration-plugin.js","sourceRoot":"","sources":["../../src/frustration-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport {\n BrowserClient,\n BrowserConfig,\n EnrichmentPlugin,\n FrustrationInteractionsOptions,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n DEFAULT_RAGE_CLICK_ALLOWLIST,\n DEFAULT_DEAD_CLICK_ALLOWLIST,\n multicast,\n Observable,\n Unsubscribable,\n} from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { createShouldTrackEvent, ElementBasedTimestampedEvent, NavigateEvent, TimestampedEvent } from './helpers';\nimport { trackDeadClick } from './autocapture/track-dead-click';\nimport { trackRageClicks } from './autocapture/track-rage-click';\nimport { ObservablesEnum } from './autocapture-plugin';\nimport { createClickObservable, createMutationObservable } from './observables';\nimport { DataExtractor } from './data-extractor';\n\nexport interface AllWindowObservables {\n [ObservablesEnum.ClickObservable]: Observable<ElementBasedTimestampedEvent<MouseEvent>>;\n [ObservablesEnum.MutationObservable]: Observable<TimestampedEvent<MutationRecord[]>>;\n [ObservablesEnum.NavigateObservable]?: Observable<TimestampedEvent<NavigateEvent>>;\n [ObservablesEnum.SelectionObservable]?: Observable<void>;\n}\n\ntype BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\nexport const frustrationPlugin = (options: FrustrationInteractionsOptions = {}): BrowserEnrichmentPlugin => {\n const name = constants.FRUSTRATION_PLUGIN_NAME;\n const type = 'enrichment';\n\n const subscriptions: Unsubscribable[] = [];\n\n const rageCssSelectors = options.rageClicks?.cssSelectorAllowlist ?? DEFAULT_RAGE_CLICK_ALLOWLIST;\n const deadCssSelectors = options.deadClicks?.cssSelectorAllowlist ?? DEFAULT_DEAD_CLICK_ALLOWLIST;\n\n const dataAttributePrefix = options.dataAttributePrefix ?? DEFAULT_DATA_ATTRIBUTE_PREFIX;\n\n const dataExtractor = new DataExtractor(options);\n\n // combine the two selector lists to determine which clicked elements should be filtered\n const combinedCssSelectors = [...new Set([...rageCssSelectors, ...deadCssSelectors])];\n\n // Create observables on events on the window\n const createObservables = (): AllWindowObservables => {\n const clickObservable = multicast(\n createClickObservable('pointerdown').map((click) => {\n return dataExtractor.addAdditionalEventProperties(\n click,\n 'click',\n combinedCssSelectors,\n dataAttributePrefix,\n true, // capture when cursor is pointer\n );\n }),\n );\n\n const enrichedMutationObservable = multicast<TimestampedEvent<MutationRecord[]>>(\n createMutationObservable().map((mutation) =>\n dataExtractor.addAdditionalEventProperties(mutation, 'mutation', combinedCssSelectors, dataAttributePrefix),\n ),\n );\n\n let enrichedNavigateObservable: Observable<TimestampedEvent<NavigateEvent>> | undefined;\n\n if (window.navigation) {\n const navigateObservable = new Observable<Event>((observer) => {\n const handler = (event: Event): void => {\n observer.next({\n ...event,\n type: 'navigate',\n });\n };\n window.navigation.addEventListener('navigate', handler);\n return () => {\n window.navigation.removeEventListener('navigate', handler);\n };\n });\n enrichedNavigateObservable = multicast<TimestampedEvent<NavigateEvent>>(\n navigateObservable.map<TimestampedEvent<NavigateEvent>>(\n (navigate) =>\n dataExtractor.addAdditionalEventProperties(\n navigate,\n 'navigate',\n combinedCssSelectors,\n dataAttributePrefix,\n ) as TimestampedEvent<NavigateEvent>,\n ),\n );\n }\n\n const selectionObservable = multicast(\n new Observable<void>((observer) => {\n const handler = () => {\n const el: HTMLElement | null = document.activeElement as HTMLElement;\n\n // handle input and textarea\n\n // if the selectionStart and selectionEnd are the same, it means\n // nothing is selected (collapsed) and the cursor position is one point\n if (el && (el.tagName === 'TEXTAREA' || el.tagName === 'INPUT')) {\n let start: number | null | undefined;\n let end: number | null | undefined;\n try {\n start = (el as HTMLInputElement | HTMLTextAreaElement).selectionStart;\n end = (el as HTMLInputElement | HTMLTextAreaElement).selectionEnd;\n if (start === end) return; // collapsed\n } catch (error) {\n // input that doesn't support selectionStart/selectionEnd (like checkbox)\n // do nothing here\n return;\n }\n return observer.next();\n }\n\n // handle non-input elements\n\n // non-input elements have an attribute called \"isCollapsed\" which\n // if true, indicates there \"is currently not any text selected\"\n // (see https://developer.mozilla.org/en-US/docs/Web/API/Selection/isCollapsed)\n const selection = window.getSelection();\n if (!selection || selection.isCollapsed) return;\n return observer.next();\n };\n window.document.addEventListener('selectionchange', handler);\n return () => {\n window.document.removeEventListener('selectionchange', handler);\n };\n }),\n );\n\n return {\n [ObservablesEnum.ClickObservable]: clickObservable as Observable<ElementBasedTimestampedEvent<MouseEvent>>,\n [ObservablesEnum.MutationObservable]: enrichedMutationObservable,\n [ObservablesEnum.NavigateObservable]: enrichedNavigateObservable,\n [ObservablesEnum.SelectionObservable]: selectionObservable,\n };\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n // Create should track event functions for the different allowlists\n const shouldTrackRageClick = createShouldTrackEvent(options, rageCssSelectors);\n const shouldTrackDeadClick = createShouldTrackEvent(options, deadCssSelectors);\n\n // Create observables for events on the window\n const allObservables = createObservables();\n\n // Create subscriptions\n const rageClickSubscription = trackRageClicks({\n allObservables,\n amplitude,\n shouldTrackRageClick,\n });\n subscriptions.push(rageClickSubscription);\n\n const deadClickSubscription = trackDeadClick({\n amplitude,\n allObservables,\n getEventProperties: (actionType, element) =>\n dataExtractor.getEventProperties(actionType, element, dataAttributePrefix),\n shouldTrackDeadClick,\n });\n subscriptions.push(deadClickSubscription);\n\n /* istanbul ignore next */\n config?.loggerProvider?.log(`${name} has been successfully added.`);\n };\n\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n for (const subscription of subscriptions) {\n subscription.unsubscribe();\n }\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n"]}
1
+ {"version":3,"file":"frustration-plugin.js","sourceRoot":"","sources":["../../src/frustration-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport {\n BrowserClient,\n BrowserConfig,\n EnrichmentPlugin,\n FrustrationInteractionsOptions,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n multicast,\n Observable,\n Unsubscribable,\n DEFAULT_RAGE_CLICK_ALLOWLIST,\n DEFAULT_DEAD_CLICK_ALLOWLIST,\n} from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { createShouldTrackEvent, ElementBasedTimestampedEvent, NavigateEvent, TimestampedEvent } from './helpers';\nimport { trackDeadClick } from './autocapture/track-dead-click';\nimport { trackRageClicks } from './autocapture/track-rage-click';\nimport { ObservablesEnum } from './autocapture-plugin';\nimport { createClickObservable, createMutationObservable } from './observables';\nimport { DataExtractor } from './data-extractor';\n\nexport interface AllWindowObservables {\n [ObservablesEnum.ClickObservable]: Observable<ElementBasedTimestampedEvent<MouseEvent>>;\n [ObservablesEnum.MutationObservable]: Observable<TimestampedEvent<MutationRecord[]>>;\n [ObservablesEnum.NavigateObservable]?: Observable<TimestampedEvent<NavigateEvent>>;\n [ObservablesEnum.SelectionObservable]?: Observable<void>;\n}\n\ntype BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\n/**\n * Helper function to extract the css selector allowlist\n * from the frustration interactions options for a specific\n * autocapture feature.\n */\nfunction getCssSelectorAllowlist(\n options: FrustrationInteractionsOptions,\n attribute: keyof FrustrationInteractionsOptions,\n defaultAllowlist: string[],\n enabled: boolean,\n): string[] {\n if (!enabled) {\n return [];\n }\n const config = options[attribute];\n if (\n typeof config === 'object' &&\n config !== null &&\n 'cssSelectorAllowlist' in config &&\n Array.isArray(config.cssSelectorAllowlist)\n ) {\n return config.cssSelectorAllowlist;\n }\n return defaultAllowlist;\n}\n\nexport const frustrationPlugin = (options: FrustrationInteractionsOptions = {}): BrowserEnrichmentPlugin => {\n const name = constants.FRUSTRATION_PLUGIN_NAME;\n const type = 'enrichment';\n\n const subscriptions: Unsubscribable[] = [];\n\n // Check if each feature is enabled\n const deadClicksEnabled = options.deadClicks !== false && options.deadClicks !== null;\n const rageClicksEnabled = options.rageClicks !== false && options.rageClicks !== null;\n\n // Get CSS selectors for enabled features\n const rageCssSelectors = getCssSelectorAllowlist(\n options,\n 'rageClicks',\n DEFAULT_RAGE_CLICK_ALLOWLIST,\n rageClicksEnabled,\n );\n const deadCssSelectors = getCssSelectorAllowlist(\n options,\n 'deadClicks',\n DEFAULT_DEAD_CLICK_ALLOWLIST,\n deadClicksEnabled,\n );\n\n const dataAttributePrefix = options.dataAttributePrefix ?? DEFAULT_DATA_ATTRIBUTE_PREFIX;\n\n const dataExtractor = new DataExtractor(options);\n\n // combine the selector lists from enabled features to determine which clicked elements should be filtered\n const combinedCssSelectors = [...new Set([...rageCssSelectors, ...deadCssSelectors])];\n\n // Create observables on events on the window\n const createObservables = (): AllWindowObservables => {\n const clickObservable = multicast(\n createClickObservable('pointerdown').map((click) => {\n return dataExtractor.addAdditionalEventProperties(\n click,\n 'click',\n combinedCssSelectors,\n dataAttributePrefix,\n true, // capture when cursor is pointer\n );\n }),\n );\n\n const enrichedMutationObservable = multicast<TimestampedEvent<MutationRecord[]>>(\n createMutationObservable().map((mutation) =>\n dataExtractor.addAdditionalEventProperties(mutation, 'mutation', combinedCssSelectors, dataAttributePrefix),\n ),\n );\n\n let enrichedNavigateObservable: Observable<TimestampedEvent<NavigateEvent>> | undefined;\n\n if (window.navigation) {\n const navigateObservable = new Observable<Event>((observer) => {\n const handler = (event: Event): void => {\n observer.next({\n ...event,\n type: 'navigate',\n });\n };\n window.navigation.addEventListener('navigate', handler);\n return () => {\n window.navigation.removeEventListener('navigate', handler);\n };\n });\n enrichedNavigateObservable = multicast<TimestampedEvent<NavigateEvent>>(\n navigateObservable.map<TimestampedEvent<NavigateEvent>>(\n (navigate) =>\n dataExtractor.addAdditionalEventProperties(\n navigate,\n 'navigate',\n combinedCssSelectors,\n dataAttributePrefix,\n ) as TimestampedEvent<NavigateEvent>,\n ),\n );\n }\n\n const selectionObservable = multicast(\n new Observable<void>((observer) => {\n const handler = () => {\n const el: HTMLElement | null = document.activeElement as HTMLElement;\n\n // handle input and textarea\n\n // if the selectionStart and selectionEnd are the same, it means\n // nothing is selected (collapsed) and the cursor position is one point\n if (el && (el.tagName === 'TEXTAREA' || el.tagName === 'INPUT')) {\n let start: number | null | undefined;\n let end: number | null | undefined;\n try {\n start = (el as HTMLInputElement | HTMLTextAreaElement).selectionStart;\n end = (el as HTMLInputElement | HTMLTextAreaElement).selectionEnd;\n if (start === end) return; // collapsed\n } catch (error) {\n // input that doesn't support selectionStart/selectionEnd (like checkbox)\n // do nothing here\n return;\n }\n return observer.next();\n }\n\n // handle non-input elements\n\n // non-input elements have an attribute called \"isCollapsed\" which\n // if true, indicates there \"is currently not any text selected\"\n // (see https://developer.mozilla.org/en-US/docs/Web/API/Selection/isCollapsed)\n const selection = window.getSelection();\n if (!selection || selection.isCollapsed) return;\n return observer.next();\n };\n window.document.addEventListener('selectionchange', handler);\n return () => {\n window.document.removeEventListener('selectionchange', handler);\n };\n }),\n );\n\n return {\n [ObservablesEnum.ClickObservable]: clickObservable as Observable<ElementBasedTimestampedEvent<MouseEvent>>,\n [ObservablesEnum.MutationObservable]: enrichedMutationObservable,\n [ObservablesEnum.NavigateObservable]: enrichedNavigateObservable,\n [ObservablesEnum.SelectionObservable]: selectionObservable,\n };\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n // Create observables for events on the window\n const allObservables = createObservables();\n\n // Create subscriptions only for enabled features\n if (rageClicksEnabled) {\n const shouldTrackRageClick = createShouldTrackEvent(options, rageCssSelectors);\n const rageClickSubscription = trackRageClicks({\n allObservables,\n amplitude,\n shouldTrackRageClick,\n });\n subscriptions.push(rageClickSubscription);\n }\n\n if (deadClicksEnabled) {\n const shouldTrackDeadClick = createShouldTrackEvent(options, deadCssSelectors);\n const deadClickSubscription = trackDeadClick({\n amplitude,\n allObservables,\n getEventProperties: (actionType, element) =>\n dataExtractor.getEventProperties(actionType, element, dataAttributePrefix),\n shouldTrackDeadClick,\n });\n subscriptions.push(deadClickSubscription);\n }\n\n /* istanbul ignore next */\n config?.loggerProvider?.log(`${name} has been successfully added.`);\n };\n\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n for (const subscription of subscriptions) {\n subscription.unsubscribe();\n }\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.18.4";
1
+ export declare const VERSION = "1.18.6";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,2 +1,2 @@
1
- export var VERSION = '1.18.4';
1
+ export var VERSION = '1.18.6';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '1.18.4';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '1.18.6';\n"]}
@@ -1,2 +1,2 @@
1
- var amplitudeAutocapturePlugin=function(e){"use strict";var t=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},t.apply(this,arguments)};function n(e,t,n,r){return new(n||(n=Promise))(function(i,o){function l(e){try{u(r.next(e))}catch(e){o(e)}}function a(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(l,a)}u((r=r.apply(e,t||[])).next())})}function r(e,t){var n,r,i,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return l.next=a(0),l.throw=a(1),l.return=a(2),"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function a(a){return function(u){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;l&&(l=0,a[0]&&(o=0)),o;)try{if(n=1,r&&(i=2&a[0]?r.return:a[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,a[1])).done)return i;switch(r=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,r=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!(i=o.trys,(i=i.length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){o.label=a[1];break}if(6===a[0]&&o.label<i[1]){o.label=i[1],i=a;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(a);break}i[2]&&o.ops.pop(),o.trys.pop();continue}a=t.call(e,o)}catch(e){a=[6,e],r=0}finally{n=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}}function i(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function o(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)l.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return l}function l(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}"function"==typeof SuppressedError&&SuppressedError;var a=function(){var e="ampIntegrationContext";return"undefined"!=typeof globalThis&&void 0!==globalThis[e]?globalThis[e]:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:void 0},u=function(e,t){return!t||!t.length||t.some(function(t){return"string"==typeof t?e===t:e.match(t)})},c=["a","button","input","select","textarea","label","video","audio",'[contenteditable="true" i]',"[data-amp-default-track]",".amp-default-track"],s="data-amp-track-",d=["div","span","h1","h2","h3","h4","h5","h6"],f=l(['input[type="button"]','input[type="submit"]','input[type="reset"]','input[type="image"]','input[type="file"]'],o(["a","button",'[role="button"]','[role="link"]','[role="menuitem"]','[role="menuitemcheckbox"]','[role="menuitemradio"]','[role="option"]','[role="tab"]','[role="treeitem"]','[contenteditable="true" i]']),!1),v=["*"],p="data-amp-mask",g="*****",h=/\b(?:\d[ -]*?){13,16}\b/,m=/(\d{3}-?\d{2}-?\d{4})/g,b=/[^\s@]+@[^\s@.]+\.[^\s@]+/g;function y(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return w(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return w(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function E(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function x(e,t,n){return t&&E(e.prototype,t),n&&E(e,n),e}var k=function(){return"function"==typeof Symbol},A=function(e){return k()&&Boolean(Symbol[e])},T=function(e){return A(e)?Symbol[e]:"@@"+e};k()&&!A("observable")&&(Symbol.observable=Symbol("observable"));var S=T("iterator"),O=T("observable"),P=T("species");function C(e,t){var n=e[t];if(null!=n){if("function"!=typeof n)throw new TypeError(n+" is not a function");return n}}function _(e){var t=e.constructor;return void 0!==t&&null===(t=t[P])&&(t=void 0),void 0!==t?t:U}function M(e){return e instanceof U}function L(e){L.log?L.log(e):setTimeout(function(){throw e})}function j(e){Promise.resolve().then(function(){try{e()}catch(e){L(e)}})}function N(e){var t=e._cleanup;if(void 0!==t&&(e._cleanup=void 0,t))try{if("function"==typeof t)t();else{var n=C(t,"unsubscribe");n&&n.call(t)}}catch(e){L(e)}}function R(e){e._observer=void 0,e._queue=void 0,e._state="closed"}function D(e,t,n){e._state="running";var r=e._observer;try{var i=C(r,t);switch(t){case"next":i&&i.call(r,n);break;case"error":if(R(e),!i)throw n;i.call(r,n);break;case"complete":R(e),i&&i.call(r)}}catch(e){L(e)}"closed"===e._state?N(e):"running"===e._state&&(e._state="ready")}function q(e,t,n){if("closed"!==e._state){if("buffering"!==e._state)return"ready"!==e._state?(e._state="buffering",e._queue=[{type:t,value:n}],void j(function(){return function(e){var t=e._queue;if(t){e._queue=void 0,e._state="ready";for(var n=0;n<t.length&&(D(e,t[n].type,t[n].value),"closed"!==e._state);++n);}}(e)})):void D(e,t,n);e._queue.push({type:t,value:n})}}var I=function(){function e(e,t){this._cleanup=void 0,this._observer=e,this._queue=void 0,this._state="initializing";var n=new H(this);try{this._cleanup=t.call(void 0,n)}catch(e){n.error(e)}"initializing"===this._state&&(this._state="ready")}return e.prototype.unsubscribe=function(){"closed"!==this._state&&(R(this),N(this))},x(e,[{key:"closed",get:function(){return"closed"===this._state}}]),e}(),H=function(){function e(e){this._subscription=e}var t=e.prototype;return t.next=function(e){q(this._subscription,"next",e)},t.error=function(e){q(this._subscription,"error",e)},t.complete=function(){q(this._subscription,"complete")},x(e,[{key:"closed",get:function(){return"closed"===this._subscription._state}}]),e}(),U=function(){function e(t){if(!(this instanceof e))throw new TypeError("Observable cannot be called as a function");if("function"!=typeof t)throw new TypeError("Observable initializer must be a function");this._subscriber=t}var t=e.prototype;return t.subscribe=function(e){return"object"==typeof e&&null!==e||(e={next:e,error:arguments[1],complete:arguments[2]}),new I(e,this._subscriber)},t.forEach=function(e){var t=this;return new Promise(function(n,r){if("function"==typeof e)var i=t.subscribe({next:function(t){try{e(t,o)}catch(e){r(e),i.unsubscribe()}},error:r,complete:n});else r(new TypeError(e+" is not a function"));function o(){i.unsubscribe(),n()}})},t.map=function(e){var t=this;if("function"!=typeof e)throw new TypeError(e+" is not a function");return new(_(this))(function(n){return t.subscribe({next:function(t){try{t=e(t)}catch(e){return n.error(e)}n.next(t)},error:function(e){n.error(e)},complete:function(){n.complete()}})})},t.filter=function(e){var t=this;if("function"!=typeof e)throw new TypeError(e+" is not a function");return new(_(this))(function(n){return t.subscribe({next:function(t){try{if(!e(t))return}catch(e){return n.error(e)}n.next(t)},error:function(e){n.error(e)},complete:function(){n.complete()}})})},t.reduce=function(e){var t=this;if("function"!=typeof e)throw new TypeError(e+" is not a function");var n=_(this),r=arguments.length>1,i=!1,o=arguments[1];return new n(function(n){return t.subscribe({next:function(t){var l=!i;if(i=!0,!l||r)try{o=e(o,t)}catch(e){return n.error(e)}else o=t},error:function(e){n.error(e)},complete:function(){if(!i&&!r)return n.error(new TypeError("Cannot reduce an empty sequence"));n.next(o),n.complete()}})})},t.concat=function(){for(var e=this,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];var i=_(this);return new i(function(t){var r,o=0;return function e(l){r=l.subscribe({next:function(e){t.next(e)},error:function(e){t.error(e)},complete:function(){o===n.length?(r=void 0,t.complete()):e(i.from(n[o++]))}})}(e),function(){r&&(r.unsubscribe(),r=void 0)}})},t.flatMap=function(e){var t=this;if("function"!=typeof e)throw new TypeError(e+" is not a function");var n=_(this);return new n(function(r){var i=[],o=t.subscribe({next:function(t){if(e)try{t=e(t)}catch(e){return r.error(e)}var o=n.from(t).subscribe({next:function(e){r.next(e)},error:function(e){r.error(e)},complete:function(){var e=i.indexOf(o);e>=0&&i.splice(e,1),l()}});i.push(o)},error:function(e){r.error(e)},complete:function(){l()}});function l(){o.closed&&0===i.length&&r.complete()}return function(){i.forEach(function(e){return e.unsubscribe()}),o.unsubscribe()}})},t[O]=function(){return this},e.from=function(t){var n="function"==typeof this?this:e;if(null==t)throw new TypeError(t+" is not an object");var r=C(t,O);if(r){var i=r.call(t);if(Object(i)!==i)throw new TypeError(i+" is not an object");return M(i)&&i.constructor===n?i:new n(function(e){return i.subscribe(e)})}if(A("iterator")&&(r=C(t,S)))return new n(function(e){j(function(){if(!e.closed){for(var n,i=y(r.call(t));!(n=i()).done;){var o=n.value;if(e.next(o),e.closed)return}e.complete()}})});if(Array.isArray(t))return new n(function(e){j(function(){if(!e.closed){for(var n=0;n<t.length;++n)if(e.next(t[n]),e.closed)return;e.complete()}})});throw new TypeError(t+" is not observable")},e.of=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return new("function"==typeof this?this:e)(function(e){j(function(){if(!e.closed){for(var t=0;t<n.length;++t)if(e.next(n[t]),e.closed)return;e.complete()}})})},x(e,null,[{key:P,get:function(){return this}}]),e}();function z(e,t){return new U(function(n){e.subscribe({next:function(e){t(e).then(function(e){return n.next(e)}).catch(function(e){return n.error(e)})},error:function(e){n.error(e)},complete:function(){n.complete()}})})}function B(e,t){return new U(function(n){var r=!1,o=new Set,l=function(){var e,t;r=!0;try{for(var n=i(o),l=n.next();!l.done;l=n.next()){var a=l.value;try{a.unsubscribe()}catch(e){}}}catch(t){e={error:t}}finally{try{l&&!l.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}o.clear()},a=function(e){var t=e.subscribe({next:function(e){r||n.next(e)},error:function(e){r||(r=!0,n.error(e),l())},complete:function(){o.delete(t),r||0!==o.size||(n.complete(),l(),r=!0)}});o.add(t)};return a(e),a(t),l})}function X(e){var t=new Set,n=null;function r(){null==n||n.unsubscribe(),n=null,t.clear()}return new U(function(o){return t.add(o),null===n&&(n=e.subscribe({next:function(e){var n,r,o;try{for(var l=i(t),a=l.next();!a.done;a=l.next()){var u=a.value;null===(o=u.next)||void 0===o||o.call(u,e)}}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=l.return)&&r.call(l)}finally{if(n)throw n.error}}},error:function(e){var n,o,l;try{for(var a=i(t),u=a.next();!u.done;u=a.next()){var c=u.value;null===(l=c.error)||void 0===l||l.call(c,e)}}catch(e){n={error:e}}finally{try{u&&!u.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}r()},complete:function(){var e,n,o;try{for(var l=i(t),a=l.next();!a.done;a=l.next()){var u=a.value;null===(o=u.complete)||void 0===o||o.call(u)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=l.return)&&n.call(l)}finally{if(e)throw e.error}}r()}})),function(){t.delete(o),0===t.size&&n&&(n.unsubscribe(),n=null)}})}k()&&Object.defineProperty(U,Symbol("extensions"),{value:{symbol:O,hostReportError:L},configurable:!0});var F="1.18.4",V="[Amplitude] Element Clicked",Y="[Amplitude] Element Tag",W="[Amplitude] Element Text",G="[Amplitude] Page URL",J="https://app.amplitude.com",K={US:J,EU:"https://app.eu.amplitude.com",STAGING:"https://apps.stag2.amplitude.com"},Z="data-amp-mask-attributes",$=["input","select","textarea"],Q=function(e,t){var n,r=null===(n=null===window||void 0===window?void 0:window.getComputedStyle)||void 0===n?void 0:n.call(window,e);return"pointer"===(null==r?void 0:r.getPropertyValue("cursor"))&&"click"===t},ee=function(e,t,n){return void 0===n&&(n=!1),function(r,i){var o,l,a=e.pageUrlAllowlist,c=e.pageUrlExcludelist,s=e.shouldTrackEventResolver,d=null===(l=null===(o=null==i?void 0:i.tagName)||void 0===o?void 0:o.toLowerCase)||void 0===l?void 0:l.call(o);if(!d)return!1;if(s)return s(r,i);if(!u(window.location.href,a))return!1;if(c&&c.length>0&&u(window.location.href,c))return!1;var f=String(null==i?void 0:i.getAttribute("type"))||"";if("string"==typeof f)switch(f.toLowerCase()){case"hidden":case"password":return!1}var v=Q(i,r);if(n&&v)return!0;if(t){var p=t.some(function(e){var t;return!!(null===(t=null==i?void 0:i.matches)||void 0===t?void 0:t.call(i,e))});if(!p)return!1}switch(d){case"input":case"select":case"textarea":return"change"===r||"click"===r;default:return!!v||"click"===r}}},te=function(e){return e?e.split(",").map(function(e){return e.trim()}).filter(function(e){return e.length>0&&"id"!==e&&"class"!==e}):[]},ne=function(e){return Object.keys(e).reduce(function(t,n){var r=e[n];return function(e){return null==e||"object"==typeof e&&0===Object.keys(e).length||"string"==typeof e&&0===e.trim().length}(r)||(t[n]=r),t},{})},re=function(e,t){return e?t.some(function(t){var n;return null===(n=null==e?void 0:e.matches)||void 0===n?void 0:n.call(e,t)})?e:re(null==e?void 0:e.parentElement,t):null};var ie=function(e){return!(null===e.event.target||!e.closestTrackedAncestor)};var oe=new Set(["id","class","style","value","onclick","onchange","oninput","onblur","onsubmit","onfocus","onkeydown","onkeyup","onkeypress","data-reactid","data-react-checksum","data-reactroot",Z,p]),le=["type"],ae=["svg","path","g"],ue=["password","hidden"];function ce(e,t){var n,r,o,l,a,u;if(null===e)return null;var c=String(e.tagName).toLowerCase(),s={tag:c},d=Array.from(null!==(l=null===(o=e.parentElement)||void 0===o?void 0:o.children)&&void 0!==l?l:[]);d.length&&(s.index=d.indexOf(e),s.indexOfType=d.filter(function(t){return t.tagName===e.tagName}).indexOf(e));var f=null===(u=null===(a=e.previousElementSibling)||void 0===a?void 0:a.tagName)||void 0===u?void 0:u.toLowerCase();f&&(s.prevSib=String(f));var v=e.getAttribute("id");v&&(s.id=String(v));var p=Array.from(e.classList);p.length&&(s.classes=p);var h={},m=Array.from(e.attributes).filter(function(e){return!oe.has(e.name)}),b=!function(e){var t,n,r,i=null===(n=null===(t=null==e?void 0:e.tagName)||void 0===t?void 0:t.toLowerCase)||void 0===n?void 0:n.call(t),o=e instanceof HTMLElement&&"true"===(null===(r=e.getAttribute("contenteditable"))||void 0===r?void 0:r.toLowerCase());return!$.includes(i)&&!o}(e);if(!ue.includes(String(e.getAttribute("type")))&&!ae.includes(c))try{for(var y=i(m),w=y.next();!w.done;w=y.next()){var E=w.value;b&&!le.includes(E.name)||(t.has(E.name)?h[E.name]=g:h[E.name]=String(E.value).substring(0,128))}}catch(e){n={error:e}}finally{try{w&&!w.done&&(r=y.return)&&r.call(y)}finally{if(n)throw n.error}}return Object.keys(h).length&&(s.attrs=h),s}var se=function(e,t,n){e.forEach(function(e){if("string"!=typeof e&&"ATTACH_EVENT_PROPERTY"===e.actionType){var r=n.extractDataFromDataSource(e.dataSource,t.closestTrackedAncestor);t.targetElementProperties[e.destinationKey]=r}})},de=function(e,t){var n,r,a,u=this;this.replaceSensitiveString=function(e){return function(e,t){var n,r;if(void 0===t&&(t=[]),"string"!=typeof e)return"";var o=e;o=(o=(o=o.replace(h,g)).replace(m,g)).replace(b,g);try{for(var l=i(t),a=l.next();!a.done;a=l.next()){var u=a.value;try{o=o.replace(u,g)}catch(e){}}}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=l.return)&&r.call(l)}finally{if(n)throw n.error}}return o}(e,u.additionalMaskTextPatterns)},this.getHierarchy=function(e){var t,n,r,a,c,s=performance.now();if(!e)return[];for(var d=function(e){var t=[];if(!e)return t;t.push(e);for(var n=e.parentElement;n&&"HTML"!==n.tagName;)t.push(n),n=n.parentElement;return t}(e),f=new Map,v=d.length-1;v>=0;v--){var p=d[v];if(p){var g=te(p.getAttribute(Z)),h=v===d.length-1?[]:null!==(r=f.get(d[v+1]))&&void 0!==r?r:new Set,m=new Set(l(l([],o(h),!1),o(g),!1));f.set(p,m)}}c=d.map(function(e){var t;return ce(e,null!==(t=f.get(e))&&void 0!==t?t:new Set)});var b=function(e){(null==e?void 0:e.attrs)&&Object.entries(e.attrs).forEach(function(t){var n=o(t,2),r=n[0],i=n[1];e.attrs&&(e.attrs[r]=u.replaceSensitiveString(i))})};try{for(var y=i(c),w=y.next();!w.done;w=y.next())b(w.value)}catch(e){t={error:e}}finally{try{w&&!w.done&&(n=y.return)&&n.call(y)}finally{if(t)throw t.error}}var E=performance.now();return null===(a=u.diagnosticsClient)||void 0===a||a.recordHistogram("autocapturePlugin.getHierarchy",E-s),c},this.getNearestLabel=function(e){var t,n=e.parentElement;if(!n)return"";try{t=n.querySelector(":scope>span,h1,h2,h3,h4,h5,h6")}catch(e){t=null}return t?u.getText(t):u.getNearestLabel(n)},this.getEventProperties=function(e,t,n){var r,i,l,a,c,s,d=null===(l=null===(i=null==t?void 0:t.tagName)||void 0===i?void 0:i.toLowerCase)||void 0===l?void 0:l.call(i),f="function"==typeof t.getBoundingClientRect?t.getBoundingClientRect():{left:null,top:null},v=u.getHierarchy(t),h=null===(a=v[0])||void 0===a?void 0:a.attrs,m=u.getNearestLabel(t),b=(c=null!=h?h:{},s=n,Object.entries(c).reduce(function(e,t){var n=o(t,2),r=n[0],i=n[1];if(r.startsWith(s)){var l=r.replace(s,"");l&&(e[l]=i||"")}return e},{})),y=((r={})["[Amplitude] Element Hierarchy"]=v,r[Y]=d,r[W]=u.getText(t),r["[Amplitude] Element Position Left"]=null==f.left?null:Math.round(f.left),r["[Amplitude] Element Position Top"]=null==f.top?null:Math.round(f.top),r["[Amplitude] Element Attributes"]=b,r["[Amplitude] Element Parent Label"]=m,r[G]=function(e,t){var n=e;try{n=decodeURI(e)}catch(e){null==t||t.error("Malformed URI sequence: ",e)}return n}(window.location.href.split("?")[0]),r["[Amplitude] Page Title"]=function(e){if("undefined"==typeof document||!document.title)return"";var t=document.querySelector("title");return t&&t.hasAttribute(p)?g:e?e(document.title):document.title}(u.replaceSensitiveString),r["[Amplitude] Viewport Height"]=window.innerHeight,r["[Amplitude] Viewport Width"]=window.innerWidth,r);if(y["[Amplitude] Element ID"]=t.getAttribute("id")||"",y["[Amplitude] Element Class"]=t.getAttribute("class"),y["[Amplitude] Element Aria Label"]=null==h?void 0:h["aria-label"],"a"===d&&"click"===e&&t instanceof HTMLAnchorElement){var w=t.href.substring(0,128);y["[Amplitude] Element Href"]=u.replaceSensitiveString(w)}return ne(y)},this.addAdditionalEventProperties=function(e,t,n,r,i){void 0===i&&(i=!1);var o={event:e,timestamp:Date.now(),type:t};if(function(e){return"click"===e.type||"change"===e.type}(o)&&null!==o.event.target){if(i&&Q(o.event.target,o.type))return o.closestTrackedAncestor=o.event.target,o.targetElementProperties=u.getEventProperties(o.type,o.closestTrackedAncestor,r),o;var l=re(o.event.target,n);return l&&(o.closestTrackedAncestor=l,o.targetElementProperties=u.getEventProperties(o.type,l,r)),o}return o},this.extractDataFromDataSource=function(e,t){if("DOM_ELEMENT"===e.sourceType){var n=function(e,t){try{if("DOM_ELEMENT"===e.sourceType){var n=document.documentElement;return e.scope&&t&&(n=t.closest(e.scope)),n&&e.selector?n.querySelector(e.selector):n}}catch(e){return}}(e,t);if(!n)return;return"TEXT"===e.elementExtractType?u.getText(n):"ATTRIBUTE"===e.elementExtractType&&e.attribute?n.getAttribute(e.attribute):void 0}},this.getText=function(e){if(null!==e.closest("[".concat(p,"]")))return g;var t="";if(e.querySelector("[".concat(p,"], [contenteditable]"))){var n=e.cloneNode(!0);n.querySelectorAll("[".concat(p,"], [contenteditable]")).forEach(function(e){e.innerText=g}),t=n.innerText||""}else t=e.innerText||"";return u.replaceSensitiveString(t.substring(0,255)).replace(/\s+/g," ").trim()},this.getEventTagProps=function(e){var t,n,r;if(!e)return{};var i=null===(r=null===(n=null==e?void 0:e.tagName)||void 0===n?void 0:n.toLowerCase)||void 0===r?void 0:r.call(n),o=((t={})[Y]=i,t[W]=u.getText(e),t[G]=window.location.href.split("?")[0],t);return ne(o)},this.diagnosticsClient=null==t?void 0:t.diagnosticsClient;var c=null!==(a=e.maskTextRegex)&&void 0!==a?a:[],s=[];try{for(var d=i(c),f=d.next();!f.done;f=d.next()){var v=f.value;if(s.length>=25)break;if(v instanceof RegExp)s.push(v);else if("pattern"in v&&"string"==typeof v.pattern)try{s.push(new RegExp(v.pattern,"i"))}catch(e){}}}catch(e){n={error:e}}finally{try{f&&!f.done&&(r=d.return)&&r.call(d)}finally{if(n)throw n.error}}this.additionalMaskTextPatterns=s},fe=function(){function e(e){var t=(void 0===e?{}:e).origin,n=void 0===t?J:t,r=this;this.endpoint=J,this.requestCallbacks={},this.onSelect=function(e){r.notify({action:"element-selected",data:e})},this.onTrack=function(e,t){"selector-mode-changed"===e?r.notify({action:"track-selector-mode-changed",data:t}):"selector-moved"===e&&r.notify({action:"track-selector-moved",data:t})},this.endpoint=n}return e.prototype.notify=function(e){var t,n,r,i;null===(n=null===(t=this.logger)||void 0===t?void 0:t.debug)||void 0===n||n.call(t,"Message sent: ",JSON.stringify(e)),null===(i=null===(r=window.opener)||void 0===r?void 0:r.postMessage)||void 0===i||i.call(r,e,this.endpoint)},e.prototype.sendRequest=function(e,t,n){var r=this;void 0===n&&(n={timeout:15e3});var i="".concat(Date.now(),"-").concat(Math.random().toString(36).substr(2,9)),o={id:i,action:e,args:t};return new Promise(function(t,l){r.requestCallbacks[i]={resolve:t,reject:l},r.notify(o),(null==n?void 0:n.timeout)>0&&setTimeout(function(){l(new Error("".concat(e," timed out (id: ").concat(i,")"))),delete r.requestCallbacks[i]},n.timeout)})},e.prototype.handleResponse=function(e){var t;this.requestCallbacks[e.id]?(this.requestCallbacks[e.id].resolve(e.responseData),delete this.requestCallbacks[e.id]):null===(t=this.logger)||void 0===t||t.warn("No callback found for request id: ".concat(e.id))},e.prototype.setup=function(e){var t=this,n=void 0===e?{dataExtractor:new de({})}:e,r=n.logger,i=n.endpoint,o=n.isElementSelectable,l=n.cssSelectorAllowlist,a=n.actionClickAllowlist,u=n.dataExtractor;this.logger=r,i&&this.endpoint===J&&(this.endpoint=i);var c=null;window.addEventListener("message",function(e){var n,r,i,s,d;if(null===(r=null===(n=t.logger)||void 0===n?void 0:n.debug)||void 0===r||r.call(n,"Message received: ",JSON.stringify(e)),t.endpoint===e.origin){var f,v=null==e?void 0:e.data,p=null==v?void 0:v.action;if(p)if("id"in v)null===(s=null===(i=t.logger)||void 0===i?void 0:i.debug)||void 0===s||s.call(i,"Received Response to previous request: ",JSON.stringify(e)),t.handleResponse(v);else if("ping"===p)t.notify({action:"pong"});else if("initialize-visual-tagging-selector"===p){var g=null==v?void 0:v.data;(f="https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz",new Promise(function(e,t){var n;try{var r=document.createElement("script");r.type="text/javascript",r.async=!0,r.src=f,r.addEventListener("load",function(){e({status:!0})},{once:!0}),r.addEventListener("error",function(){t({status:!1,message:"Failed to load the script ".concat(f)})}),null===(n=document.head)||void 0===n||n.appendChild(r)}catch(e){t(e)}})).then(function(){var e;c=null===(e=null===window||void 0===window?void 0:window.amplitudeVisualTaggingSelector)||void 0===e?void 0:e.call(window,{getEventTagProps:u.getEventTagProps,isElementSelectable:function(e){return!o||o((null==g?void 0:g.actionType)||"click",e)},onTrack:t.onTrack,onSelect:t.onSelect,visualHighlightClass:"amp-visual-tagging-selector-highlight",messenger:t,cssSelectorAllowlist:l,actionClickAllowlist:a,extractDataFromDataSource:u.extractDataFromDataSource,dataExtractor:u,diagnostics:{autocapture:{version:F}}}),t.notify({action:"selector-loaded"})}).catch(function(){var e;null===(e=t.logger)||void 0===e||e.warn("Failed to initialize visual tagging selector")})}else"close-visual-tagging-selector"===p&&(null===(d=null==c?void 0:c.close)||void 0===d||d.call(c))}}),this.notify({action:"page-loaded"})},e}();var ve,pe=function(){return new U(function(e){var t=new MutationObserver(function(t){e.next(t)});return document.body&&t.observe(document.body,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),function(){return t.disconnect()}})},ge=function(e){return void 0===e&&(e="click"),new U(function(t){var n,r=function(e){t.next(e)};return null===(n=a())||void 0===n||n.document.addEventListener(e,r,{capture:!0}),function(){var t;null===(t=a())||void 0===t||t.document.removeEventListener(e,r,{capture:!0})}})},he={"[Amplitude] Element Clicked":"click","[Amplitude] Element Changed":"change"},me=function(e){var t,n,r,o,l=Object.values(he).reduce(function(e,t){return e[t]=new Set,e},{});if(!e)return l;try{for(var a=i(e),u=a.next();!u.done;u=a.next()){var c=u.value;try{try{for(var s=(r=void 0,i(c.definition)),d=s.next();!d.done;d=s.next()){var f=d.value,v=he[f.event_type];v&&l[v].add(c.id)}}catch(e){r={error:e}}finally{try{d&&!d.done&&(o=s.return)&&o.call(s)}finally{if(r)throw r.error}}}catch(e){console.warn("Skipping Labeled Event due to malformed definition",null==c?void 0:c.id,e)}}}catch(e){t={error:e}}finally{try{u&&!u.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return l},be=function(e){var t,n,r,o,l=new Map;try{for(var a=i(e),u=a.next();!u.done;u=a.next()){var c=u.value;try{for(var s=(r=void 0,i(c.conditions)),d=s.next();!d.done;d=s.next()){var f=d.value;if("LABELED_EVENT"===f.type){var v=f.match.eventId,p=l.get(v);p||(p=[],l.set(v,p)),p.push(c)}}}catch(e){r={error:e}}finally{try{d&&!d.done&&(o=s.return)&&o.call(s)}finally{if(r)throw r.error}}}}catch(e){t={error:e}}finally{try{u&&!u.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return l},ye=function(e,t){return t.filter(function(t){return t.definition.some(function(t){return he[t.event_type]===e.type&&t.filters.every(function(t){return function(e,t){try{if("[Amplitude] Element Text"===t.subprop_key)return"is"===t.subprop_op&&t.subprop_value.includes(e.targetElementProperties["[Amplitude] Element Text"]);if("[Amplitude] Element Hierarchy"===t.subprop_key)return"autotrack css match"===t.subprop_op&&!!e.closestTrackedAncestor.closest(t.subprop_value.toString())}catch(e){return console.error("Error matching event to filter",e),!1}return!1}(e,t)})})})},we=function(){function e(e,t,n,r){this.groupedLabeledEvents=e,this.labeledEventToTriggerMap=t,this.dataExtractor=n,this.options=r}return e.prototype.evaluate=function(e){var t,n,r=this.options.pageActions;if(!r)return e;var o=function(e,t){var n,r,o,l,a=new Set;try{for(var u=i(e),c=u.next();!c.done;c=u.next()){var s=c.value,d=t.get(s.id);if(d)try{for(var f=(o=void 0,i(d)),v=f.next();!v.done;v=f.next()){var p=v.value;a.add(p)}}catch(e){o={error:e}}finally{try{v&&!v.done&&(l=f.return)&&l.call(f)}finally{if(o)throw o.error}}}}catch(e){n={error:e}}finally{try{c&&!c.done&&(r=u.return)&&r.call(u)}finally{if(n)throw n.error}}return Array.from(a)}(ye(e,Array.from(this.groupedLabeledEvents[e.type]).map(function(e){return r.labeledEvents[e]})),this.labeledEventToTriggerMap);try{for(var l=i(o),a=l.next();!a.done;a=l.next()){var u=a.value;se(u.actions,e,this.dataExtractor)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=l.return)&&n.call(l)}finally{if(t)throw t.error}}return e},e.prototype.update=function(e,t,n){this.groupedLabeledEvents=e,this.labeledEventToTriggerMap=t,this.options=n},e}();!function(e){e.ClickObservable="clickObservable",e.ChangeObservable="changeObservable",e.NavigateObservable="navigateObservable",e.MutationObservable="mutationObservable",e.SelectionObservable="selectionObservable"}(ve||(ve={}));var Ee=function(e,u){var f,v,p,g,h,m,b,y;void 0===e&&(e={}),null==u||u.diagnosticsClient.setTag("plugin.autocapture.version",F);var w=e.dataAttributePrefix,E=void 0===w?s:w,x=e.visualTaggingOptions,k=void 0===x?{enabled:!0,messenger:new fe}:x;e.cssSelectorAllowlist=null!==(f=e.cssSelectorAllowlist)&&void 0!==f?f:c,e.actionClickAllowlist=null!==(v=e.actionClickAllowlist)&&void 0!==v?v:d,e.debounceTime=null!==(p=e.debounceTime)&&void 0!==p?p:0,e.pageUrlExcludelist=null===(g=e.pageUrlExcludelist)||void 0===g?void 0:g.reduce(function(e,t){if("string"==typeof t&&e.push(t),t instanceof RegExp&&e.push(t),"object"==typeof t&&null!==t&&"pattern"in t)try{e.push(new RegExp(t.pattern))}catch(n){return console.warn("Invalid regex pattern: ".concat(t.pattern),n),e}return e},[]);var A="@amplitude/plugin-autocapture-browser",T=[],S=new de(e,u),O=me(Object.values(null!==(m=null===(h=e.pageActions)||void 0===h?void 0:h.labeledEvents)&&void 0!==m?m:{})),P=be(null!==(y=null===(b=e.pageActions)||void 0===b?void 0:b.triggers)&&void 0!==y?y:[]),C=function(e,t,n,r){return new we(e,t,n,r)}(O,P,S,e);return{name:A,type:"enrichment",setup:function(i,u){return n(void 0,void 0,void 0,function(){var n,c,s,d,f,v,p,g,h,m;return r(this,function(r){return"undefined"==typeof document||(i.fetchRemoteConfig&&(i.remoteConfigClient?i.remoteConfigClient.subscribe("analyticsSDK.pageActions","all",function(n){!function(n){var r,i;n&&(e.pageActions=t(t({},e.pageActions),n),O=me(Object.values(null!==(r=e.pageActions.labeledEvents)&&void 0!==r?r:{})),P=be(null!==(i=e.pageActions.triggers)&&void 0!==i?i:[]),C.update(O,P,e))}(n)}):i.loggerProvider.debug("Remote config client is not provided, skipping remote config fetch")),n=ee(e,e.cssSelectorAllowlist),c=ee(e,e.actionClickAllowlist),s=function(){var t,n,r=X(ge().map(function(t){return S.addAdditionalEventProperties(t,"click",e.cssSelectorAllowlist,E)})),i=X(new U(function(t){var n,r=function(n){var r=S.addAdditionalEventProperties(n,"change",e.cssSelectorAllowlist,E);t.next(r)};return null===(n=a())||void 0===n||n.document.addEventListener("change",r,{capture:!0}),function(){var e;return null===(e=a())||void 0===e?void 0:e.document.removeEventListener("change",r)}}));window.navigation&&(n=X(new U(function(t){var n=function(n){var r=S.addAdditionalEventProperties(n,"navigate",e.cssSelectorAllowlist,E);t.next(r)};return window.navigation.addEventListener("navigate",n),function(){window.navigation.removeEventListener("navigate",n)}})));var o=X(pe().map(function(t){return S.addAdditionalEventProperties(t,"mutation",e.cssSelectorAllowlist,E)}));return(t={})[ve.ChangeObservable]=i,t[ve.ClickObservable]=r,t[ve.MutationObservable]=o,t[ve.NavigateObservable]=n,t}(),d=function(e){var t=e.amplitude,n=e.allObservables,r=e.shouldTrackEvent,i=e.evaluateTriggers;return n.clickObservable.filter(ie).filter(function(e){return r("click",e.closestTrackedAncestor)}).map(function(e){return i(e)}).subscribe(function(e){null==t||t.track(V,e.targetElementProperties)})}({allObservables:s,amplitude:u,shouldTrackEvent:n,evaluateTriggers:C.evaluate.bind(C)}),T.push(d),f=function(e){var t=e.amplitude,n=e.allObservables,r=e.getEventProperties,i=e.shouldTrackEvent,o=e.evaluateTriggers;return n.changeObservable.filter(ie).filter(function(e){return i("change",e.closestTrackedAncestor)}).map(function(e){return o(e)}).subscribe(function(e){null==t||t.track("[Amplitude] Element Changed",r("change",e.closestTrackedAncestor))})}({allObservables:s,getEventProperties:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return S.getEventProperties.apply(S,l(l([],o(e),!1),[E],!1))},amplitude:u,shouldTrackEvent:n,evaluateTriggers:C.evaluate.bind(C)}),T.push(f),v=function(e){var t=e.amplitude,n=e.allObservables,r=e.options,i=e.getEventProperties,o=e.shouldTrackEvent,l=e.shouldTrackActionClick,a=n.clickObservable,u=n.mutationObservable,c=n.navigateObservable,s=a.filter(function(e){return!o("click",e.closestTrackedAncestor)}).map(function(e){var t=re(e.event.target,r.actionClickAllowlist);return e.closestTrackedAncestor=t,null!==e.closestTrackedAncestor&&(e.targetElementProperties=i(e.type,e.closestTrackedAncestor)),e}).filter(ie).filter(function(e){return l("click",e.closestTrackedAncestor)}),d=c?B(u,c):u,f=B(s,d),v=null,p=null;return z(f,function(e){if(v&&(clearTimeout(v),v=null),"click"===e.type)return p=e,v=setTimeout(function(){v=null,p=null},500),Promise.resolve(null);if(p){var t=p;return p=null,Promise.resolve(t)}return Promise.resolve(null)}).subscribe(function(e){e&&(null==t||t.track(V,i("click",e.closestTrackedAncestor)))})}({allObservables:s,options:e,getEventProperties:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return S.getEventProperties.apply(S,l(l([],o(e),!1),[E],!1))},amplitude:u,shouldTrackEvent:n,shouldTrackActionClick:c}),v&&T.push(v),null===(h=null==i?void 0:i.loggerProvider)||void 0===h||h.log("".concat(A," has been successfully added.")),window.opener&&k.enabled&&(p=e.cssSelectorAllowlist,g=e.actionClickAllowlist,null===(m=k.messenger)||void 0===m||m.setup(t(t({dataExtractor:S,logger:null==i?void 0:i.loggerProvider},(null==i?void 0:i.serverZone)&&{endpoint:K[i.serverZone]}),{isElementSelectable:ee(e,l(l([],o(p),!1),o(g),!1)),cssSelectorAllowlist:p,actionClickAllowlist:g})))),[2]})})},execute:function(e){return n(void 0,void 0,void 0,function(){return r(this,function(t){return[2,e]})})},teardown:function(){return n(void 0,void 0,void 0,function(){var e,t,n,o;return r(this,function(r){try{for(e=i(T),t=e.next();!t.done;t=e.next())t.value.unsubscribe()}catch(e){n={error:e}}finally{try{t&&!t.done&&(o=e.return)&&o.call(e)}finally{if(n)throw n.error}}return[2]})})}}},xe=["mutation","navigate"];function ke(e,t){var n,r,i,o,l=t.event,a=l.pageX,u=l.pageY;e.yMin=Math.min(null!==(n=e.yMin)&&void 0!==n?n:u,u),e.yMax=Math.max(null!==(r=e.yMax)&&void 0!==r?r:u,u),e.xMin=Math.min(null!==(i=e.xMin)&&void 0!==i?i:a,a),e.xMax=Math.max(null!==(o=e.xMax)&&void 0!==o?o:a,a),e.isOutOfBounds=e.yMax-e.yMin>50||e.xMax-e.xMin>50}function Ae(e){if(0===e.length)return null;var n=e[0],r=e[e.length-1];return{rageClickEvent:t({"[Amplitude] Begin Time":new Date(n.timestamp).toISOString(),"[Amplitude] End Time":new Date(r.timestamp).toISOString(),"[Amplitude] Duration":r.timestamp-n.timestamp,"[Amplitude] Clicks":e.map(function(e){return{X:e.event.pageX,Y:e.event.pageY,Time:e.timestamp}}),"[Amplitude] Click Count":e.length},n.targetElementProperties),time:n.timestamp}}function Te(e){var t=this,i=e.amplitude,o=e.allObservables,l=e.shouldTrackRageClick,a=o.clickObservable,u=o.selectionObservable,c=[],s={},d=null;function f(e){c=[],s={},e&&(ke(s,e),c.push(e))}var v=z(a.filter(function(e){return l("click",e.closestTrackedAncestor)}),function(e){return n(t,void 0,void 0,function(){var t;return r(this,function(n){return ke(s,e),t=null,0===c.length||function(e,t){return e.length>0&&e[e.length-1].closestTrackedAncestor!==t.closestTrackedAncestor}(c,e)||function(e,t){var n=e[Math.max(0,e.length-4+1)];return t.timestamp-n.timestamp>=1e3}(c,e)||s.isOutOfBounds?(d&&(t=Ae(c)),f(e)):c.push(e),d&&(clearTimeout(d.timerId),d.resolve(t),d=null),c.length>=4?[2,new Promise(function(e){d={resolve:e,timerId:setTimeout(function(){e(Ae(c))},1e3)}})]:[2,null]})})}),p=null==u?void 0:u.subscribe(function(){f()}),g=v.subscribe(function(e){null!==e&&i.track("[Amplitude] Rage Click",e.rageClickEvent,{time:e.time})});return{unsubscribe:function(){g.unsubscribe(),null==p||p.unsubscribe()}}}return e.DataExtractor=de,e.WindowMessenger=fe,e.autocapturePlugin=Ee,e.frustrationPlugin=function(e){var a,u,c,d,p;void 0===e&&(e={});var g="@amplitude/plugin-frustration-browser",h=[],m=null!==(u=null===(a=e.rageClicks)||void 0===a?void 0:a.cssSelectorAllowlist)&&void 0!==u?u:v,b=null!==(d=null===(c=e.deadClicks)||void 0===c?void 0:c.cssSelectorAllowlist)&&void 0!==d?d:f,y=null!==(p=e.dataAttributePrefix)&&void 0!==p?p:s,w=new de(e),E=l([],o(new Set(l(l([],o(m),!1),o(b),!1))),!1);return{name:g,type:"enrichment",setup:function(i,o){return n(void 0,void 0,void 0,function(){var n,l,a,u,c,s;return r(this,function(r){return"undefined"==typeof document||(n=ee(e,m),l=ee(e,b),a=function(){var e,n,r=X(ge("pointerdown").map(function(e){return w.addAdditionalEventProperties(e,"click",E,y,!0)})),i=X(pe().map(function(e){return w.addAdditionalEventProperties(e,"mutation",E,y)}));window.navigation&&(n=X(new U(function(e){var n=function(n){e.next(t(t({},n),{type:"navigate"}))};return window.navigation.addEventListener("navigate",n),function(){window.navigation.removeEventListener("navigate",n)}}).map(function(e){return w.addAdditionalEventProperties(e,"navigate",E,y)})));var o=X(new U(function(e){var t=function(){var t=document.activeElement;if(t&&("TEXTAREA"===t.tagName||"INPUT"===t.tagName)){try{if(t.selectionStart===t.selectionEnd)return}catch(e){return}return e.next()}var n=window.getSelection();if(n&&!n.isCollapsed)return e.next()};return window.document.addEventListener("selectionchange",t),function(){window.document.removeEventListener("selectionchange",t)}}));return(e={})[ve.ClickObservable]=r,e[ve.MutationObservable]=i,e[ve.NavigateObservable]=n,e[ve.SelectionObservable]=o,e}(),u=Te({allObservables:a,amplitude:o,shouldTrackRageClick:n}),h.push(u),c=function(e){var n=e.amplitude,r=e.allObservables,i=e.getEventProperties,o=e.shouldTrackDeadClick,l=r.clickObservable,a=r.mutationObservable,u=r.navigateObservable,c=l.filter(function(e){return ie(e)&&o("click",e.closestTrackedAncestor)&&e.event.target instanceof Element&&null===e.event.target.closest('a[target="_blank"]')}),s=u?B(a,u):a,d=B(c,s),f=null;return z(d,function(e){return f&&xe.includes(e.type)?(clearTimeout(f),f=null,Promise.resolve(null)):"click"===e.type?f?Promise.resolve(null):new Promise(function(t){f=setTimeout(function(){t(e),f=null},3e3)}):Promise.resolve(null)}).subscribe(function(e){if(e){var r={"[Amplitude] X":e.event.clientX,"[Amplitude] Y":e.event.clientY};n.track("[Amplitude] Dead Click",t(t({},i("click",e.closestTrackedAncestor)),r),{time:e.timestamp})}})}({amplitude:o,allObservables:a,getEventProperties:function(e,t){return w.getEventProperties(e,t,y)},shouldTrackDeadClick:l}),h.push(c),null===(s=null==i?void 0:i.loggerProvider)||void 0===s||s.log("".concat(g," has been successfully added."))),[2]})})},execute:function(e){return n(void 0,void 0,void 0,function(){return r(this,function(t){return[2,e]})})},teardown:function(){return n(void 0,void 0,void 0,function(){var e,t,n,o;return r(this,function(r){try{for(e=i(h),t=e.next();!t.done;t=e.next())t.value.unsubscribe()}catch(e){n={error:e}}finally{try{t&&!t.done&&(o=e.return)&&o.call(e)}finally{if(n)throw n.error}}return[2]})})}}},e.plugin=Ee,Object.defineProperty(e,"__esModule",{value:!0}),e}({});
1
+ var amplitudeAutocapturePlugin=function(e){"use strict";var t=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},t.apply(this,arguments)};function n(e,t,n,r){return new(n||(n=Promise))(function(i,o){function l(e){try{u(r.next(e))}catch(e){o(e)}}function a(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(l,a)}u((r=r.apply(e,t||[])).next())})}function r(e,t){var n,r,i,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return l.next=a(0),l.throw=a(1),l.return=a(2),"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function a(a){return function(u){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;l&&(l=0,a[0]&&(o=0)),o;)try{if(n=1,r&&(i=2&a[0]?r.return:a[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,a[1])).done)return i;switch(r=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,r=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!(i=o.trys,(i=i.length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){o.label=a[1];break}if(6===a[0]&&o.label<i[1]){o.label=i[1],i=a;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(a);break}i[2]&&o.ops.pop(),o.trys.pop();continue}a=t.call(e,o)}catch(e){a=[6,e],r=0}finally{n=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}}function i(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function o(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)l.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return l}function l(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}"function"==typeof SuppressedError&&SuppressedError;var a=function(){var e="ampIntegrationContext";return"undefined"!=typeof globalThis&&void 0!==globalThis[e]?globalThis[e]:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:void 0},u=function(e,t){return!t||!t.length||t.some(function(t){return"string"==typeof t?e===t:e.match(t)})},c=["a","button","input","select","textarea","label","video","audio",'[contenteditable="true" i]',"[data-amp-default-track]",".amp-default-track"],s="data-amp-track-",d=["div","span","h1","h2","h3","h4","h5","h6"],f=l(['input[type="button"]','input[type="submit"]','input[type="reset"]','input[type="image"]','input[type="file"]'],o(["a","button",'[role="button"]','[role="link"]','[role="menuitem"]','[role="menuitemcheckbox"]','[role="menuitemradio"]','[role="option"]','[role="tab"]','[role="treeitem"]','[contenteditable="true" i]']),!1),v=["*"],p="data-amp-mask",g="*****",h=/\b(?:\d[ -]*?){13,16}\b/,b=/(\d{3}-?\d{2}-?\d{4})/g,m=/[^\s@]+@[^\s@.]+\.[^\s@]+/g;function y(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return w(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return w(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function E(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function x(e,t,n){return t&&E(e.prototype,t),n&&E(e,n),e}var k=function(){return"function"==typeof Symbol},A=function(e){return k()&&Boolean(Symbol[e])},T=function(e){return A(e)?Symbol[e]:"@@"+e};k()&&!A("observable")&&(Symbol.observable=Symbol("observable"));var S=T("iterator"),O=T("observable"),C=T("species");function P(e,t){var n=e[t];if(null!=n){if("function"!=typeof n)throw new TypeError(n+" is not a function");return n}}function _(e){var t=e.constructor;return void 0!==t&&null===(t=t[C])&&(t=void 0),void 0!==t?t:U}function M(e){return e instanceof U}function L(e){L.log?L.log(e):setTimeout(function(){throw e})}function j(e){Promise.resolve().then(function(){try{e()}catch(e){L(e)}})}function N(e){var t=e._cleanup;if(void 0!==t&&(e._cleanup=void 0,t))try{if("function"==typeof t)t();else{var n=P(t,"unsubscribe");n&&n.call(t)}}catch(e){L(e)}}function R(e){e._observer=void 0,e._queue=void 0,e._state="closed"}function D(e,t,n){e._state="running";var r=e._observer;try{var i=P(r,t);switch(t){case"next":i&&i.call(r,n);break;case"error":if(R(e),!i)throw n;i.call(r,n);break;case"complete":R(e),i&&i.call(r)}}catch(e){L(e)}"closed"===e._state?N(e):"running"===e._state&&(e._state="ready")}function q(e,t,n){if("closed"!==e._state){if("buffering"!==e._state)return"ready"!==e._state?(e._state="buffering",e._queue=[{type:t,value:n}],void j(function(){return function(e){var t=e._queue;if(t){e._queue=void 0,e._state="ready";for(var n=0;n<t.length&&(D(e,t[n].type,t[n].value),"closed"!==e._state);++n);}}(e)})):void D(e,t,n);e._queue.push({type:t,value:n})}}var I=function(){function e(e,t){this._cleanup=void 0,this._observer=e,this._queue=void 0,this._state="initializing";var n=new H(this);try{this._cleanup=t.call(void 0,n)}catch(e){n.error(e)}"initializing"===this._state&&(this._state="ready")}return e.prototype.unsubscribe=function(){"closed"!==this._state&&(R(this),N(this))},x(e,[{key:"closed",get:function(){return"closed"===this._state}}]),e}(),H=function(){function e(e){this._subscription=e}var t=e.prototype;return t.next=function(e){q(this._subscription,"next",e)},t.error=function(e){q(this._subscription,"error",e)},t.complete=function(){q(this._subscription,"complete")},x(e,[{key:"closed",get:function(){return"closed"===this._subscription._state}}]),e}(),U=function(){function e(t){if(!(this instanceof e))throw new TypeError("Observable cannot be called as a function");if("function"!=typeof t)throw new TypeError("Observable initializer must be a function");this._subscriber=t}var t=e.prototype;return t.subscribe=function(e){return"object"==typeof e&&null!==e||(e={next:e,error:arguments[1],complete:arguments[2]}),new I(e,this._subscriber)},t.forEach=function(e){var t=this;return new Promise(function(n,r){if("function"==typeof e)var i=t.subscribe({next:function(t){try{e(t,o)}catch(e){r(e),i.unsubscribe()}},error:r,complete:n});else r(new TypeError(e+" is not a function"));function o(){i.unsubscribe(),n()}})},t.map=function(e){var t=this;if("function"!=typeof e)throw new TypeError(e+" is not a function");return new(_(this))(function(n){return t.subscribe({next:function(t){try{t=e(t)}catch(e){return n.error(e)}n.next(t)},error:function(e){n.error(e)},complete:function(){n.complete()}})})},t.filter=function(e){var t=this;if("function"!=typeof e)throw new TypeError(e+" is not a function");return new(_(this))(function(n){return t.subscribe({next:function(t){try{if(!e(t))return}catch(e){return n.error(e)}n.next(t)},error:function(e){n.error(e)},complete:function(){n.complete()}})})},t.reduce=function(e){var t=this;if("function"!=typeof e)throw new TypeError(e+" is not a function");var n=_(this),r=arguments.length>1,i=!1,o=arguments[1];return new n(function(n){return t.subscribe({next:function(t){var l=!i;if(i=!0,!l||r)try{o=e(o,t)}catch(e){return n.error(e)}else o=t},error:function(e){n.error(e)},complete:function(){if(!i&&!r)return n.error(new TypeError("Cannot reduce an empty sequence"));n.next(o),n.complete()}})})},t.concat=function(){for(var e=this,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];var i=_(this);return new i(function(t){var r,o=0;return function e(l){r=l.subscribe({next:function(e){t.next(e)},error:function(e){t.error(e)},complete:function(){o===n.length?(r=void 0,t.complete()):e(i.from(n[o++]))}})}(e),function(){r&&(r.unsubscribe(),r=void 0)}})},t.flatMap=function(e){var t=this;if("function"!=typeof e)throw new TypeError(e+" is not a function");var n=_(this);return new n(function(r){var i=[],o=t.subscribe({next:function(t){if(e)try{t=e(t)}catch(e){return r.error(e)}var o=n.from(t).subscribe({next:function(e){r.next(e)},error:function(e){r.error(e)},complete:function(){var e=i.indexOf(o);e>=0&&i.splice(e,1),l()}});i.push(o)},error:function(e){r.error(e)},complete:function(){l()}});function l(){o.closed&&0===i.length&&r.complete()}return function(){i.forEach(function(e){return e.unsubscribe()}),o.unsubscribe()}})},t[O]=function(){return this},e.from=function(t){var n="function"==typeof this?this:e;if(null==t)throw new TypeError(t+" is not an object");var r=P(t,O);if(r){var i=r.call(t);if(Object(i)!==i)throw new TypeError(i+" is not an object");return M(i)&&i.constructor===n?i:new n(function(e){return i.subscribe(e)})}if(A("iterator")&&(r=P(t,S)))return new n(function(e){j(function(){if(!e.closed){for(var n,i=y(r.call(t));!(n=i()).done;){var o=n.value;if(e.next(o),e.closed)return}e.complete()}})});if(Array.isArray(t))return new n(function(e){j(function(){if(!e.closed){for(var n=0;n<t.length;++n)if(e.next(t[n]),e.closed)return;e.complete()}})});throw new TypeError(t+" is not observable")},e.of=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return new("function"==typeof this?this:e)(function(e){j(function(){if(!e.closed){for(var t=0;t<n.length;++t)if(e.next(n[t]),e.closed)return;e.complete()}})})},x(e,null,[{key:C,get:function(){return this}}]),e}();function z(e,t){return new U(function(n){e.subscribe({next:function(e){t(e).then(function(e){return n.next(e)}).catch(function(e){return n.error(e)})},error:function(e){n.error(e)},complete:function(){n.complete()}})})}function B(e,t){return new U(function(n){var r=!1,o=new Set,l=function(){var e,t;r=!0;try{for(var n=i(o),l=n.next();!l.done;l=n.next()){var a=l.value;try{a.unsubscribe()}catch(e){}}}catch(t){e={error:t}}finally{try{l&&!l.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}o.clear()},a=function(e){var t=e.subscribe({next:function(e){r||n.next(e)},error:function(e){r||(r=!0,n.error(e),l())},complete:function(){o.delete(t),r||0!==o.size||(n.complete(),l(),r=!0)}});o.add(t)};return a(e),a(t),l})}function X(e){var t=new Set,n=null;function r(){null==n||n.unsubscribe(),n=null,t.clear()}return new U(function(o){return t.add(o),null===n&&(n=e.subscribe({next:function(e){var n,r,o;try{for(var l=i(t),a=l.next();!a.done;a=l.next()){var u=a.value;null===(o=u.next)||void 0===o||o.call(u,e)}}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=l.return)&&r.call(l)}finally{if(n)throw n.error}}},error:function(e){var n,o,l;try{for(var a=i(t),u=a.next();!u.done;u=a.next()){var c=u.value;null===(l=c.error)||void 0===l||l.call(c,e)}}catch(e){n={error:e}}finally{try{u&&!u.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}r()},complete:function(){var e,n,o;try{for(var l=i(t),a=l.next();!a.done;a=l.next()){var u=a.value;null===(o=u.complete)||void 0===o||o.call(u)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=l.return)&&n.call(l)}finally{if(e)throw e.error}}r()}})),function(){t.delete(o),0===t.size&&n&&(n.unsubscribe(),n=null)}})}k()&&Object.defineProperty(U,Symbol("extensions"),{value:{symbol:O,hostReportError:L},configurable:!0});var F="1.18.6",V="[Amplitude] Element Clicked",Y="[Amplitude] Element Tag",W="[Amplitude] Element Text",G="[Amplitude] Page URL",J="https://app.amplitude.com",K={US:J,EU:"https://app.eu.amplitude.com",STAGING:"https://apps.stag2.amplitude.com"},Z="data-amp-mask-attributes",$=["input","select","textarea"],Q=function(e,t){var n,r=null===(n=null===window||void 0===window?void 0:window.getComputedStyle)||void 0===n?void 0:n.call(window,e);return"pointer"===(null==r?void 0:r.getPropertyValue("cursor"))&&"click"===t},ee=function(e,t,n){return void 0===n&&(n=!1),function(r,i){var o,l,a=e.pageUrlAllowlist,c=e.pageUrlExcludelist,s=e.shouldTrackEventResolver,d=null===(l=null===(o=null==i?void 0:i.tagName)||void 0===o?void 0:o.toLowerCase)||void 0===l?void 0:l.call(o);if(!d)return!1;if(s)return s(r,i);if(!u(window.location.href,a))return!1;if(c&&c.length>0&&u(window.location.href,c))return!1;var f=String(null==i?void 0:i.getAttribute("type"))||"";if("string"==typeof f)switch(f.toLowerCase()){case"hidden":case"password":return!1}var v=Q(i,r);if(n&&v)return!0;if(t){var p=t.some(function(e){var t;return!!(null===(t=null==i?void 0:i.matches)||void 0===t?void 0:t.call(i,e))});if(!p)return!1}switch(d){case"input":case"select":case"textarea":return"change"===r||"click"===r;default:return!!v||"click"===r}}},te=function(e){return e?e.split(",").map(function(e){return e.trim()}).filter(function(e){return e.length>0&&"id"!==e&&"class"!==e}):[]},ne=function(e){return Object.keys(e).reduce(function(t,n){var r=e[n];return function(e){return null==e||"object"==typeof e&&0===Object.keys(e).length||"string"==typeof e&&0===e.trim().length}(r)||(t[n]=r),t},{})},re=function(e,t){return e?t.some(function(t){var n;return null===(n=null==e?void 0:e.matches)||void 0===n?void 0:n.call(e,t)})?e:re(null==e?void 0:e.parentElement,t):null};var ie=function(e){return!(null===e.event.target||!e.closestTrackedAncestor)};var oe=new Set(["id","class","style","value","onclick","onchange","oninput","onblur","onsubmit","onfocus","onkeydown","onkeyup","onkeypress","data-reactid","data-react-checksum","data-reactroot",Z,p]),le=["type"],ae=["svg","path","g"],ue=["password","hidden"];function ce(e,t){var n,r,o,l,a,u;if(null===e)return null;var c=String(e.tagName).toLowerCase(),s={tag:c},d=Array.from(null!==(l=null===(o=e.parentElement)||void 0===o?void 0:o.children)&&void 0!==l?l:[]);d.length&&(s.index=d.indexOf(e),s.indexOfType=d.filter(function(t){return t.tagName===e.tagName}).indexOf(e));var f=null===(u=null===(a=e.previousElementSibling)||void 0===a?void 0:a.tagName)||void 0===u?void 0:u.toLowerCase();f&&(s.prevSib=String(f));var v=e.getAttribute("id");v&&(s.id=String(v));var p=Array.from(e.classList);p.length&&(s.classes=p);var h={},b=Array.from(e.attributes).filter(function(e){return!oe.has(e.name)}),m=!function(e){var t,n,r,i=null===(n=null===(t=null==e?void 0:e.tagName)||void 0===t?void 0:t.toLowerCase)||void 0===n?void 0:n.call(t),o=e instanceof HTMLElement&&"true"===(null===(r=e.getAttribute("contenteditable"))||void 0===r?void 0:r.toLowerCase());return!$.includes(i)&&!o}(e);if(!ue.includes(String(e.getAttribute("type")))&&!ae.includes(c))try{for(var y=i(b),w=y.next();!w.done;w=y.next()){var E=w.value;m&&!le.includes(E.name)||(t.has(E.name)?h[E.name]=g:h[E.name]=String(E.value).substring(0,128))}}catch(e){n={error:e}}finally{try{w&&!w.done&&(r=y.return)&&r.call(y)}finally{if(n)throw n.error}}return Object.keys(h).length&&(s.attrs=h),s}var se=function(e,t,n){e.forEach(function(e){if("string"!=typeof e&&"ATTACH_EVENT_PROPERTY"===e.actionType){var r=n.extractDataFromDataSource(e.dataSource,t.closestTrackedAncestor);t.targetElementProperties[e.destinationKey]=r}})},de=function(e,t){var n,r,a,u=this;this.replaceSensitiveString=function(e){return function(e,t){var n,r;if(void 0===t&&(t=[]),"string"!=typeof e)return"";var o=e;o=(o=(o=o.replace(h,g)).replace(b,g)).replace(m,g);try{for(var l=i(t),a=l.next();!a.done;a=l.next()){var u=a.value;try{o=o.replace(u,g)}catch(e){}}}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=l.return)&&r.call(l)}finally{if(n)throw n.error}}return o}(e,u.additionalMaskTextPatterns)},this.getHierarchy=function(e){var t,n,r,a,c,s=performance.now();if(!e)return[];for(var d=function(e){var t=[];if(!e)return t;t.push(e);for(var n=e.parentElement;n&&"HTML"!==n.tagName;)t.push(n),n=n.parentElement;return t}(e),f=new Map,v=d.length-1;v>=0;v--){var p=d[v];if(p){var g=te(p.getAttribute(Z)),h=v===d.length-1?[]:null!==(r=f.get(d[v+1]))&&void 0!==r?r:new Set,b=new Set(l(l([],o(h),!1),o(g),!1));f.set(p,b)}}c=d.map(function(e){var t;return ce(e,null!==(t=f.get(e))&&void 0!==t?t:new Set)});var m=function(e){(null==e?void 0:e.attrs)&&Object.entries(e.attrs).forEach(function(t){var n=o(t,2),r=n[0],i=n[1];e.attrs&&(e.attrs[r]=u.replaceSensitiveString(i))})};try{for(var y=i(c),w=y.next();!w.done;w=y.next())m(w.value)}catch(e){t={error:e}}finally{try{w&&!w.done&&(n=y.return)&&n.call(y)}finally{if(t)throw t.error}}var E=performance.now();return null===(a=u.diagnosticsClient)||void 0===a||a.recordHistogram("autocapturePlugin.getHierarchy",E-s),c},this.getNearestLabel=function(e){var t,n=e.parentElement;if(!n)return"";try{t=n.querySelector(":scope>span,h1,h2,h3,h4,h5,h6")}catch(e){t=null}return t?u.getText(t):u.getNearestLabel(n)},this.getEventProperties=function(e,t,n){var r,i,l,a,c,s,d=null===(l=null===(i=null==t?void 0:t.tagName)||void 0===i?void 0:i.toLowerCase)||void 0===l?void 0:l.call(i),f="function"==typeof t.getBoundingClientRect?t.getBoundingClientRect():{left:null,top:null},v=u.getHierarchy(t),h=null===(a=v[0])||void 0===a?void 0:a.attrs,b=u.getNearestLabel(t),m=(c=null!=h?h:{},s=n,Object.entries(c).reduce(function(e,t){var n=o(t,2),r=n[0],i=n[1];if(r.startsWith(s)){var l=r.replace(s,"");l&&(e[l]=i||"")}return e},{})),y=((r={})["[Amplitude] Element Hierarchy"]=v,r[Y]=d,r[W]=u.getText(t),r["[Amplitude] Element Position Left"]=null==f.left?null:Math.round(f.left),r["[Amplitude] Element Position Top"]=null==f.top?null:Math.round(f.top),r["[Amplitude] Element Attributes"]=m,r["[Amplitude] Element Parent Label"]=b,r[G]=function(e,t){var n=e;try{n=decodeURI(e)}catch(e){null==t||t.error("Malformed URI sequence: ",e)}return n}(window.location.href.split("?")[0]),r["[Amplitude] Page Title"]=function(e){if("undefined"==typeof document||!document.title)return"";var t=document.querySelector("title");return t&&t.hasAttribute(p)?g:e?e(document.title):document.title}(u.replaceSensitiveString),r["[Amplitude] Viewport Height"]=window.innerHeight,r["[Amplitude] Viewport Width"]=window.innerWidth,r);if(y["[Amplitude] Element ID"]=t.getAttribute("id")||"",y["[Amplitude] Element Class"]=t.getAttribute("class"),y["[Amplitude] Element Aria Label"]=null==h?void 0:h["aria-label"],"a"===d&&"click"===e&&t instanceof HTMLAnchorElement){var w=t.href.substring(0,128);y["[Amplitude] Element Href"]=u.replaceSensitiveString(w)}return ne(y)},this.addAdditionalEventProperties=function(e,t,n,r,i){void 0===i&&(i=!1);var o={event:e,timestamp:Date.now(),type:t};if(function(e){return"click"===e.type||"change"===e.type}(o)&&null!==o.event.target){if(i&&Q(o.event.target,o.type))return o.closestTrackedAncestor=o.event.target,o.targetElementProperties=u.getEventProperties(o.type,o.closestTrackedAncestor,r),o;var l=re(o.event.target,n);return l&&(o.closestTrackedAncestor=l,o.targetElementProperties=u.getEventProperties(o.type,l,r)),o}return o},this.extractDataFromDataSource=function(e,t){if("DOM_ELEMENT"===e.sourceType){var n=function(e,t){try{if("DOM_ELEMENT"===e.sourceType){var n=document.documentElement;return e.scope&&t&&(n=t.closest(e.scope)),n&&e.selector?n.querySelector(e.selector):n}}catch(e){return}}(e,t);if(!n)return;return"TEXT"===e.elementExtractType?u.getText(n):"ATTRIBUTE"===e.elementExtractType&&e.attribute?n.getAttribute(e.attribute):void 0}},this.getText=function(e){if(null!==e.closest("[".concat(p,"]")))return g;var t="";if(e.querySelector("[".concat(p,"], [contenteditable]"))){var n=e.cloneNode(!0);n.querySelectorAll("[".concat(p,"], [contenteditable]")).forEach(function(e){e.innerText=g}),t=n.innerText||""}else t=e.innerText||"";return u.replaceSensitiveString(t.substring(0,255)).replace(/\s+/g," ").trim()},this.getEventTagProps=function(e){var t,n,r;if(!e)return{};var i=null===(r=null===(n=null==e?void 0:e.tagName)||void 0===n?void 0:n.toLowerCase)||void 0===r?void 0:r.call(n),o=((t={})[Y]=i,t[W]=u.getText(e),t[G]=window.location.href.split("?")[0],t);return ne(o)},this.diagnosticsClient=null==t?void 0:t.diagnosticsClient;var c=null!==(a=e.maskTextRegex)&&void 0!==a?a:[],s=[];try{for(var d=i(c),f=d.next();!f.done;f=d.next()){var v=f.value;if(s.length>=25)break;if(v instanceof RegExp)s.push(v);else if("pattern"in v&&"string"==typeof v.pattern)try{s.push(new RegExp(v.pattern,"i"))}catch(e){}}}catch(e){n={error:e}}finally{try{f&&!f.done&&(r=d.return)&&r.call(d)}finally{if(n)throw n.error}}this.additionalMaskTextPatterns=s},fe=function(){function e(e){var t=(void 0===e?{}:e).origin,n=void 0===t?J:t,r=this;this.endpoint=J,this.requestCallbacks={},this.onSelect=function(e){r.notify({action:"element-selected",data:e})},this.onTrack=function(e,t){"selector-mode-changed"===e?r.notify({action:"track-selector-mode-changed",data:t}):"selector-moved"===e&&r.notify({action:"track-selector-moved",data:t})},this.endpoint=n}return e.prototype.notify=function(e){var t,n,r,i;null===(n=null===(t=this.logger)||void 0===t?void 0:t.debug)||void 0===n||n.call(t,"Message sent: ",JSON.stringify(e)),null===(i=null===(r=window.opener)||void 0===r?void 0:r.postMessage)||void 0===i||i.call(r,e,this.endpoint)},e.prototype.sendRequest=function(e,t,n){var r=this;void 0===n&&(n={timeout:15e3});var i="".concat(Date.now(),"-").concat(Math.random().toString(36).substr(2,9)),o={id:i,action:e,args:t};return new Promise(function(t,l){r.requestCallbacks[i]={resolve:t,reject:l},r.notify(o),(null==n?void 0:n.timeout)>0&&setTimeout(function(){l(new Error("".concat(e," timed out (id: ").concat(i,")"))),delete r.requestCallbacks[i]},n.timeout)})},e.prototype.handleResponse=function(e){var t;this.requestCallbacks[e.id]?(this.requestCallbacks[e.id].resolve(e.responseData),delete this.requestCallbacks[e.id]):null===(t=this.logger)||void 0===t||t.warn("No callback found for request id: ".concat(e.id))},e.prototype.setup=function(e){var t=this,n=void 0===e?{dataExtractor:new de({})}:e,r=n.logger,i=n.endpoint,o=n.isElementSelectable,l=n.cssSelectorAllowlist,a=n.actionClickAllowlist,u=n.dataExtractor;this.logger=r,i&&this.endpoint===J&&(this.endpoint=i);var c=null;window.addEventListener("message",function(e){var n,r,i,s,d;if(null===(r=null===(n=t.logger)||void 0===n?void 0:n.debug)||void 0===r||r.call(n,"Message received: ",JSON.stringify(e)),t.endpoint===e.origin){var f,v=null==e?void 0:e.data,p=null==v?void 0:v.action;if(p)if("id"in v)null===(s=null===(i=t.logger)||void 0===i?void 0:i.debug)||void 0===s||s.call(i,"Received Response to previous request: ",JSON.stringify(e)),t.handleResponse(v);else if("ping"===p)t.notify({action:"pong"});else if("initialize-visual-tagging-selector"===p){var g=null==v?void 0:v.data;(f="https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz",new Promise(function(e,t){var n;try{var r=document.createElement("script");r.type="text/javascript",r.async=!0,r.src=f,r.addEventListener("load",function(){e({status:!0})},{once:!0}),r.addEventListener("error",function(){t({status:!1,message:"Failed to load the script ".concat(f)})}),null===(n=document.head)||void 0===n||n.appendChild(r)}catch(e){t(e)}})).then(function(){var e;c=null===(e=null===window||void 0===window?void 0:window.amplitudeVisualTaggingSelector)||void 0===e?void 0:e.call(window,{getEventTagProps:u.getEventTagProps,isElementSelectable:function(e){return!o||o((null==g?void 0:g.actionType)||"click",e)},onTrack:t.onTrack,onSelect:t.onSelect,visualHighlightClass:"amp-visual-tagging-selector-highlight",messenger:t,cssSelectorAllowlist:l,actionClickAllowlist:a,extractDataFromDataSource:u.extractDataFromDataSource,dataExtractor:u,diagnostics:{autocapture:{version:F}}}),t.notify({action:"selector-loaded"})}).catch(function(){var e;null===(e=t.logger)||void 0===e||e.warn("Failed to initialize visual tagging selector")})}else"close-visual-tagging-selector"===p&&(null===(d=null==c?void 0:c.close)||void 0===d||d.call(c))}}),this.notify({action:"page-loaded"})},e}();var ve,pe=function(){return new U(function(e){var t=new MutationObserver(function(t){e.next(t)});return document.body&&t.observe(document.body,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),function(){return t.disconnect()}})},ge=function(e){return void 0===e&&(e="click"),new U(function(t){var n,r=function(e){t.next(e)};return null===(n=a())||void 0===n||n.document.addEventListener(e,r,{capture:!0}),function(){var t;null===(t=a())||void 0===t||t.document.removeEventListener(e,r,{capture:!0})}})},he={"[Amplitude] Element Clicked":"click","[Amplitude] Element Changed":"change"},be=function(e){var t,n,r,o,l=Object.values(he).reduce(function(e,t){return e[t]=new Set,e},{});if(!e)return l;try{for(var a=i(e),u=a.next();!u.done;u=a.next()){var c=u.value;try{try{for(var s=(r=void 0,i(c.definition)),d=s.next();!d.done;d=s.next()){var f=d.value,v=he[f.event_type];v&&l[v].add(c.id)}}catch(e){r={error:e}}finally{try{d&&!d.done&&(o=s.return)&&o.call(s)}finally{if(r)throw r.error}}}catch(e){console.warn("Skipping Labeled Event due to malformed definition",null==c?void 0:c.id,e)}}}catch(e){t={error:e}}finally{try{u&&!u.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return l},me=function(e){var t,n,r,o,l=new Map;try{for(var a=i(e),u=a.next();!u.done;u=a.next()){var c=u.value;try{for(var s=(r=void 0,i(c.conditions)),d=s.next();!d.done;d=s.next()){var f=d.value;if("LABELED_EVENT"===f.type){var v=f.match.eventId,p=l.get(v);p||(p=[],l.set(v,p)),p.push(c)}}}catch(e){r={error:e}}finally{try{d&&!d.done&&(o=s.return)&&o.call(s)}finally{if(r)throw r.error}}}}catch(e){t={error:e}}finally{try{u&&!u.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return l},ye=function(e,t){return t.filter(function(t){return t.definition.some(function(t){return he[t.event_type]===e.type&&t.filters.every(function(t){return function(e,t){try{if("[Amplitude] Element Text"===t.subprop_key)return"is"===t.subprop_op&&t.subprop_value.includes(e.targetElementProperties["[Amplitude] Element Text"]);if("[Amplitude] Element Hierarchy"===t.subprop_key)return"autotrack css match"===t.subprop_op&&!!e.closestTrackedAncestor.closest(t.subprop_value.toString())}catch(e){return console.error("Error matching event to filter",e),!1}return!1}(e,t)})})})},we=function(){function e(e,t,n,r){this.groupedLabeledEvents=e,this.labeledEventToTriggerMap=t,this.dataExtractor=n,this.options=r}return e.prototype.evaluate=function(e){var t,n,r=this.options.pageActions;if(!r)return e;var o=function(e,t){var n,r,o,l,a=new Set;try{for(var u=i(e),c=u.next();!c.done;c=u.next()){var s=c.value,d=t.get(s.id);if(d)try{for(var f=(o=void 0,i(d)),v=f.next();!v.done;v=f.next()){var p=v.value;a.add(p)}}catch(e){o={error:e}}finally{try{v&&!v.done&&(l=f.return)&&l.call(f)}finally{if(o)throw o.error}}}}catch(e){n={error:e}}finally{try{c&&!c.done&&(r=u.return)&&r.call(u)}finally{if(n)throw n.error}}return Array.from(a)}(ye(e,Array.from(this.groupedLabeledEvents[e.type]).map(function(e){return r.labeledEvents[e]})),this.labeledEventToTriggerMap);try{for(var l=i(o),a=l.next();!a.done;a=l.next()){var u=a.value;se(u.actions,e,this.dataExtractor)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=l.return)&&n.call(l)}finally{if(t)throw t.error}}return e},e.prototype.update=function(e,t,n){this.groupedLabeledEvents=e,this.labeledEventToTriggerMap=t,this.options=n},e}();!function(e){e.ClickObservable="clickObservable",e.ChangeObservable="changeObservable",e.NavigateObservable="navigateObservable",e.MutationObservable="mutationObservable",e.SelectionObservable="selectionObservable"}(ve||(ve={}));var Ee=function(e,u){var f,v,p,g,h,b,m,y;void 0===e&&(e={}),null==u||u.diagnosticsClient.setTag("plugin.autocapture.version",F);var w=e.dataAttributePrefix,E=void 0===w?s:w,x=e.visualTaggingOptions,k=void 0===x?{enabled:!0,messenger:new fe}:x;e.cssSelectorAllowlist=null!==(f=e.cssSelectorAllowlist)&&void 0!==f?f:c,e.actionClickAllowlist=null!==(v=e.actionClickAllowlist)&&void 0!==v?v:d,e.debounceTime=null!==(p=e.debounceTime)&&void 0!==p?p:0,e.pageUrlExcludelist=null===(g=e.pageUrlExcludelist)||void 0===g?void 0:g.reduce(function(e,t){if("string"==typeof t&&e.push(t),t instanceof RegExp&&e.push(t),"object"==typeof t&&null!==t&&"pattern"in t)try{e.push(new RegExp(t.pattern))}catch(n){return console.warn("Invalid regex pattern: ".concat(t.pattern),n),e}return e},[]);var A="@amplitude/plugin-autocapture-browser",T=[],S=new de(e,u),O=be(Object.values(null!==(b=null===(h=e.pageActions)||void 0===h?void 0:h.labeledEvents)&&void 0!==b?b:{})),C=me(null!==(y=null===(m=e.pageActions)||void 0===m?void 0:m.triggers)&&void 0!==y?y:[]),P=function(e,t,n,r){return new we(e,t,n,r)}(O,C,S,e);return{name:A,type:"enrichment",setup:function(i,u){return n(void 0,void 0,void 0,function(){var n,c,s,d,f,v,p,g,h,b;return r(this,function(r){return"undefined"==typeof document||(i.fetchRemoteConfig&&(i.remoteConfigClient?i.remoteConfigClient.subscribe("analyticsSDK.pageActions","all",function(n){!function(n){var r,i;n&&(e.pageActions=t(t({},e.pageActions),n),O=be(Object.values(null!==(r=e.pageActions.labeledEvents)&&void 0!==r?r:{})),C=me(null!==(i=e.pageActions.triggers)&&void 0!==i?i:[]),P.update(O,C,e))}(n)}):i.loggerProvider.debug("Remote config client is not provided, skipping remote config fetch")),n=ee(e,e.cssSelectorAllowlist),c=ee(e,e.actionClickAllowlist),s=function(){var t,n,r=X(ge().map(function(t){return S.addAdditionalEventProperties(t,"click",e.cssSelectorAllowlist,E)})),i=X(new U(function(t){var n,r=function(n){var r=S.addAdditionalEventProperties(n,"change",e.cssSelectorAllowlist,E);t.next(r)};return null===(n=a())||void 0===n||n.document.addEventListener("change",r,{capture:!0}),function(){var e;return null===(e=a())||void 0===e?void 0:e.document.removeEventListener("change",r)}}));window.navigation&&(n=X(new U(function(t){var n=function(n){var r=S.addAdditionalEventProperties(n,"navigate",e.cssSelectorAllowlist,E);t.next(r)};return window.navigation.addEventListener("navigate",n),function(){window.navigation.removeEventListener("navigate",n)}})));var o=X(pe().map(function(t){return S.addAdditionalEventProperties(t,"mutation",e.cssSelectorAllowlist,E)}));return(t={})[ve.ChangeObservable]=i,t[ve.ClickObservable]=r,t[ve.MutationObservable]=o,t[ve.NavigateObservable]=n,t}(),d=function(e){var t=e.amplitude,n=e.allObservables,r=e.shouldTrackEvent,i=e.evaluateTriggers;return n.clickObservable.filter(ie).filter(function(e){return r("click",e.closestTrackedAncestor)}).map(function(e){return i(e)}).subscribe(function(e){null==t||t.track(V,e.targetElementProperties)})}({allObservables:s,amplitude:u,shouldTrackEvent:n,evaluateTriggers:P.evaluate.bind(P)}),T.push(d),f=function(e){var t=e.amplitude,n=e.allObservables,r=e.getEventProperties,i=e.shouldTrackEvent,o=e.evaluateTriggers;return n.changeObservable.filter(ie).filter(function(e){return i("change",e.closestTrackedAncestor)}).map(function(e){return o(e)}).subscribe(function(e){null==t||t.track("[Amplitude] Element Changed",r("change",e.closestTrackedAncestor))})}({allObservables:s,getEventProperties:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return S.getEventProperties.apply(S,l(l([],o(e),!1),[E],!1))},amplitude:u,shouldTrackEvent:n,evaluateTriggers:P.evaluate.bind(P)}),T.push(f),v=function(e){var t=e.amplitude,n=e.allObservables,r=e.options,i=e.getEventProperties,o=e.shouldTrackEvent,l=e.shouldTrackActionClick,a=n.clickObservable,u=n.mutationObservable,c=n.navigateObservable,s=a.filter(function(e){return!o("click",e.closestTrackedAncestor)}).map(function(e){var t=re(e.event.target,r.actionClickAllowlist);return e.closestTrackedAncestor=t,null!==e.closestTrackedAncestor&&(e.targetElementProperties=i(e.type,e.closestTrackedAncestor)),e}).filter(ie).filter(function(e){return l("click",e.closestTrackedAncestor)}),d=c?B(u,c):u,f=B(s,d),v=null,p=null;return z(f,function(e){if(v&&(clearTimeout(v),v=null),"click"===e.type)return p=e,v=setTimeout(function(){v=null,p=null},500),Promise.resolve(null);if(p){var t=p;return p=null,Promise.resolve(t)}return Promise.resolve(null)}).subscribe(function(e){e&&(null==t||t.track(V,i("click",e.closestTrackedAncestor)))})}({allObservables:s,options:e,getEventProperties:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return S.getEventProperties.apply(S,l(l([],o(e),!1),[E],!1))},amplitude:u,shouldTrackEvent:n,shouldTrackActionClick:c}),v&&T.push(v),null===(h=null==i?void 0:i.loggerProvider)||void 0===h||h.log("".concat(A," has been successfully added.")),window.opener&&k.enabled&&(p=e.cssSelectorAllowlist,g=e.actionClickAllowlist,null===(b=k.messenger)||void 0===b||b.setup(t(t({dataExtractor:S,logger:null==i?void 0:i.loggerProvider},(null==i?void 0:i.serverZone)&&{endpoint:K[i.serverZone]}),{isElementSelectable:ee(e,l(l([],o(p),!1),o(g),!1)),cssSelectorAllowlist:p,actionClickAllowlist:g})))),[2]})})},execute:function(e){return n(void 0,void 0,void 0,function(){return r(this,function(t){return[2,e]})})},teardown:function(){return n(void 0,void 0,void 0,function(){var e,t,n,o;return r(this,function(r){try{for(e=i(T),t=e.next();!t.done;t=e.next())t.value.unsubscribe()}catch(e){n={error:e}}finally{try{t&&!t.done&&(o=e.return)&&o.call(e)}finally{if(n)throw n.error}}return[2]})})}}},xe=["mutation","navigate"];function ke(e,t){var n,r,i,o,l=t.event,a=l.pageX,u=l.pageY;e.yMin=Math.min(null!==(n=e.yMin)&&void 0!==n?n:u,u),e.yMax=Math.max(null!==(r=e.yMax)&&void 0!==r?r:u,u),e.xMin=Math.min(null!==(i=e.xMin)&&void 0!==i?i:a,a),e.xMax=Math.max(null!==(o=e.xMax)&&void 0!==o?o:a,a),e.isOutOfBounds=e.yMax-e.yMin>50||e.xMax-e.xMin>50}function Ae(e){if(0===e.length)return null;var n=e[0],r=e[e.length-1];return{rageClickEvent:t({"[Amplitude] Begin Time":new Date(n.timestamp).toISOString(),"[Amplitude] End Time":new Date(r.timestamp).toISOString(),"[Amplitude] Duration":r.timestamp-n.timestamp,"[Amplitude] Clicks":e.map(function(e){return{X:e.event.pageX,Y:e.event.pageY,Time:e.timestamp}}),"[Amplitude] Click Count":e.length},n.targetElementProperties),time:n.timestamp}}function Te(e){var t=this,i=e.amplitude,o=e.allObservables,l=e.shouldTrackRageClick,a=o.clickObservable,u=o.selectionObservable,c=[],s={},d=null;function f(e){c=[],s={},e&&(ke(s,e),c.push(e))}var v=z(a.filter(function(e){return l("click",e.closestTrackedAncestor)}),function(e){return n(t,void 0,void 0,function(){var t;return r(this,function(n){return ke(s,e),t=null,0===c.length||function(e,t){return e.length>0&&e[e.length-1].closestTrackedAncestor!==t.closestTrackedAncestor}(c,e)||function(e,t){var n=e[Math.max(0,e.length-4+1)];return t.timestamp-n.timestamp>=1e3}(c,e)||s.isOutOfBounds?(d&&(t=Ae(c)),f(e)):c.push(e),d&&(clearTimeout(d.timerId),d.resolve(t),d=null),c.length>=4?[2,new Promise(function(e){d={resolve:e,timerId:setTimeout(function(){e(Ae(c))},1e3)}})]:[2,null]})})}),p=null==u?void 0:u.subscribe(function(){f()}),g=v.subscribe(function(e){null!==e&&i.track("[Amplitude] Rage Click",e.rageClickEvent,{time:e.time})});return{unsubscribe:function(){g.unsubscribe(),null==p||p.unsubscribe()}}}function Se(e,t,n,r){if(!r)return[];var i=e[t];return"object"==typeof i&&null!==i&&"cssSelectorAllowlist"in i&&Array.isArray(i.cssSelectorAllowlist)?i.cssSelectorAllowlist:n}return e.DataExtractor=de,e.WindowMessenger=fe,e.autocapturePlugin=Ee,e.frustrationPlugin=function(e){var a;void 0===e&&(e={});var u="@amplitude/plugin-frustration-browser",c=[],d=!1!==e.deadClicks&&null!==e.deadClicks,p=!1!==e.rageClicks&&null!==e.rageClicks,g=Se(e,"rageClicks",v,p),h=Se(e,"deadClicks",f,d),b=null!==(a=e.dataAttributePrefix)&&void 0!==a?a:s,m=new de(e),y=l([],o(new Set(l(l([],o(g),!1),o(h),!1))),!1);return{name:u,type:"enrichment",setup:function(i,o){return n(void 0,void 0,void 0,function(){var n,l,a,s,f,v;return r(this,function(r){return"undefined"==typeof document||(n=function(){var e,n,r=X(ge("pointerdown").map(function(e){return m.addAdditionalEventProperties(e,"click",y,b,!0)})),i=X(pe().map(function(e){return m.addAdditionalEventProperties(e,"mutation",y,b)}));window.navigation&&(n=X(new U(function(e){var n=function(n){e.next(t(t({},n),{type:"navigate"}))};return window.navigation.addEventListener("navigate",n),function(){window.navigation.removeEventListener("navigate",n)}}).map(function(e){return m.addAdditionalEventProperties(e,"navigate",y,b)})));var o=X(new U(function(e){var t=function(){var t=document.activeElement;if(t&&("TEXTAREA"===t.tagName||"INPUT"===t.tagName)){try{if(t.selectionStart===t.selectionEnd)return}catch(e){return}return e.next()}var n=window.getSelection();if(n&&!n.isCollapsed)return e.next()};return window.document.addEventListener("selectionchange",t),function(){window.document.removeEventListener("selectionchange",t)}}));return(e={})[ve.ClickObservable]=r,e[ve.MutationObservable]=i,e[ve.NavigateObservable]=n,e[ve.SelectionObservable]=o,e}(),p&&(l=ee(e,g),a=Te({allObservables:n,amplitude:o,shouldTrackRageClick:l}),c.push(a)),d&&(s=ee(e,h),f=function(e){var n=e.amplitude,r=e.allObservables,i=e.getEventProperties,o=e.shouldTrackDeadClick,l=r.clickObservable,a=r.mutationObservable,u=r.navigateObservable,c=l.filter(function(e){return ie(e)&&o("click",e.closestTrackedAncestor)&&e.event.target instanceof Element&&null===e.event.target.closest('a[target="_blank"]')}),s=u?B(a,u):a,d=B(c,s),f=null;return z(d,function(e){return f&&xe.includes(e.type)?(clearTimeout(f),f=null,Promise.resolve(null)):"click"===e.type?f?Promise.resolve(null):new Promise(function(t){f=setTimeout(function(){t(e),f=null},3e3)}):Promise.resolve(null)}).subscribe(function(e){if(e){var r={"[Amplitude] X":e.event.clientX,"[Amplitude] Y":e.event.clientY};n.track("[Amplitude] Dead Click",t(t({},i("click",e.closestTrackedAncestor)),r),{time:e.timestamp})}})}({amplitude:o,allObservables:n,getEventProperties:function(e,t){return m.getEventProperties(e,t,b)},shouldTrackDeadClick:s}),c.push(f)),null===(v=null==i?void 0:i.loggerProvider)||void 0===v||v.log("".concat(u," has been successfully added."))),[2]})})},execute:function(e){return n(void 0,void 0,void 0,function(){return r(this,function(t){return[2,e]})})},teardown:function(){return n(void 0,void 0,void 0,function(){var e,t,n,o;return r(this,function(r){try{for(e=i(c),t=e.next();!t.done;t=e.next())t.value.unsubscribe()}catch(e){n={error:e}}finally{try{t&&!t.done&&(o=e.return)&&o.call(e)}finally{if(n)throw n.error}}return[2]})})}}},e.plugin=Ee,Object.defineProperty(e,"__esModule",{value:!0}),e}({});
2
2
  //# sourceMappingURL=amplitude-min.js.map
Binary file